stringtranslate.com

Самостоятельное размещение (компиляторы)

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

Операционные системы

Операционная система является самохостируемой, когда набор инструментов для сборки операционной системы работает в той же операционной системе. Например, Windows может быть собрана на компьютере под управлением Windows.

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

Решением этой проблемы является кросс-компилятор (или кросс-ассемблер при работе с языком ассемблера). Кросс-компилятор позволяет компилировать исходный код на одной платформе для другой машины или операционной системы, что позволяет создать операционную систему для машины, для которой еще не существует компилятора с собственным хостингом. После написания программное обеспечение может быть развернуто на целевой системе с помощью таких средств, как EPROM , дискета , флэш-память (например, USB-накопитель) или устройство JTAG . Это похоже на метод, используемый для написания программного обеспечения для игровых консолей или для портативных устройств, таких как сотовые телефоны или планшеты, которые не содержат собственных инструментов разработки.

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

Компиляторы

Разработка программного обеспечения с использованием компилятора или интерпретаторов также может быть самостоятельным проектом, если компилятор способен компилировать сам себя. [1]

Поскольку самостоятельные компиляторы страдают от тех же проблем с самозагрузкой, что и операционные системы, компилятор для нового языка программирования должен быть написан на существующем языке. Поэтому разработчик может использовать что-то вроде языка ассемблера, C / C++ или даже скриптовый язык, такой как Python или Lua, для сборки первой версии компилятора. Как только язык станет достаточно зрелым, разработка компилятора может перейти на родной язык компилятора, что позволит компилятору собрать себя.

История

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

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

—  Памятка ИИ 39 [2]

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

Примеры

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

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

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

Многие языки программирования имеют самостоятельные реализации: компиляторы, которые находятся как на одном языке, так и для него. Подходом является самонастройка , когда базовая версия языка изначально реализуется с использованием другого языка высокого уровня, ассемблера или даже машинного языка ; затем полученный компилятор используется для начала построения последовательных расширенных версий самого себя.

Список языков, имеющих самостоятельные компиляторы

Следующие языки программирования имеют самостоятельные компиляторы: [ необходима ссылка ]

Смотрите также

Ссылки

  1. ^ Хитон, Роберт. «Что такое самостоятельный компилятор?». robertheaton.com/ .
  2. ^ ab Харт, Тим; Левин, Майк. "AI Memo 39-The new compiler" (PDF) . Архивировано из оригинала (PDF) 2020-12-13 . Получено 2008-05-23 .
  3. ^ ab Томпсон, Кен. "VCF East 2019 -- Брайан Керниган берет интервью у Кена Томпсона". YouTube . Получено 28.10.2019 .
  4. ^ Деннис М. Ритчи. «Развитие языка Си». 1993.
  5. ^ Пример загрузки компилятора BASICO
  6. ^ ClojureScript Далее
  7. ^ "flat assembler" . Получено 7 января 2022 г. Flat assembler является самостоятельным и включает в себя полный исходный код.
  8. ^ «Отчет о сообществах и деятельности Haskell».
  9. ^ https://www.pyret.org Архивировано 10.04.2018 на Wayback Machine
  10. ^ "Implement TCL in TCL". Архивировано из оригинала 2017-06-04 . Получено 2017-09-19 .
  11. ^ «Вергилий».