Самостоятельный хостинг (компиляторы)

Материал из wikixw
Перейти к навигации Перейти к поиску

В компьютерном программированиисамохостинг - это использование программы как части цепочки инструментов или операционной системы, которая производит новые версии той же самой программы—например, компилятор, который может компилировать свой собственный исходный код. Самодостаточное программное обеспечение является обычным явлением на персональных компьютерах и более крупных системах. Другие программы, которые обычно являются автономными, включают ядра, ассемблеры, интерпретаторы командной строки и программное обеспечение для контроля версий.

Если система настолько нова, что для нее не было написано никакого программного обеспечения, то программное обеспечение разрабатывается на другой самодостаточной системе , часто с использованием кросс-компилятора, и помещается на запоминающее устройство, которое новая система может прочитать. Развитие продолжается таким образом до тех пор, пока новая система не сможет надежно разместить свою собственную разработку. Написание новых инструментов разработки программного обеспечения без использования другой хост-системы встречается редко.

История[править]

Основная статья: История создания компилятора

Первый самодостаточный компилятор (исключая ассемблеры) был написан для Lisp Хартом и Левином в Массачусетском технологическом институте в 1962 году. Они написали компилятор Lisp на языке Lisp, протестировав его внутри существующего интерпретатора Lisp. Как только они усовершенствовали компилятор до такой степени, что он мог компилировать свой собственный исходный код, он стал самостоятельным хостингом.

   Компилятор в том виде, в каком он существует на стандартной ленте компилятора,-это программа машинного языка, которая была получена с помощью определения S-выражения компилятора, работающего над собой через интерпретатор.
   - AI Memo 39

Этот метод обычно практичен только тогда, когда интерпретатор уже существует для того же самого языка, который должен быть скомпилирован; хотя это и возможно, крайне редко бывает, чтобы человек компилировал компилятор с самим собой. Это понятие заимствовано непосредственно из более широкого понятия запуска программы на самой себе в качестве входных данных и используется также в различных доказательствах в теоретической информатике, таких как доказательство того , что проблема остановки неразрешима.

Примеры[править]

Кен Томпсон начал разработку Unix в 1968 году, написав и скомпилировав программы на GE-635 и перенеся их на PDP-7 для тестирования. После того, как начальное ядро Unix , интерпретатор команд, редактор, ассемблер и несколько утилит были завершены, операционная система Unix стала самодостаточной-программы можно было писать и тестировать на самом PDP - 7.]

Дуглас Макилрой написал TMG (компилятор-компилятор) в TMG на листе бумаги и "решил дать свой лист бумаги своему листу бумаги", сделав вычисления сам, таким образом скомпилировав компилятор TMG в сборку, которую он напечатал и собрал на PDP-7 Кена Томпсона.]

Разработка системы GNU в значительной степени опирается на GCC (компилятор GNU C ) и GNU Emacs (популярный редактор), что делает возможной автономную, поддерживаемую и устойчивую разработку свободного программного обеспечения для проекта GNU.

Многие языки программирования имеют автономные реализации: компиляторы, которые находятся как в одном языке, так и для одного и того же языка. Такие языки включают Ада, базовые, Си, си++, в C#, Кложурскрипта, в CoffeeScript, Хрустальный, Д, Дилан, Ф#, ФАСМ, далее, Гамбас, иди, Хаскелл, HolyC, на Java, Лисп, Модула-2, Данные, используемые, Оберон, Паскаль, питон, ржавчина, Скала, общее, машинопись, вала, и визуальный основной.[5]

В некоторых из этих случаев первоначальная реализация не была самодостаточной, а скорее была написана на другом языке (или даже на машинном языке); в других случаях первоначальная реализация была разработана с использованием начальнойзагрузки .

См. также[править]

Пруф[править]