Jump to content

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

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

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

[ редактировать ]

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

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

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

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

Составители

[ редактировать ]

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

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

Первый автономный компилятор (исключая ассемблеры) был написан для Лиспа Хартом и Левином из Массачусетского технологического института в 1962 году. Они написали компилятор Лиспа на Лиспе, протестировав его внутри существующего интерпретатора Лиспа . Как только они улучшили компилятор до такой степени, что он мог компилировать собственный исходный код, он стал самостоятельным. [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. ^ Перейти обратно: а б Харт, Тим; Левин, Майк. «AI Memo 39-Новый компилятор» (PDF) . Архивировано из оригинала (PDF) 13 декабря 2020 г. Проверено 23 мая 2008 г.
  3. ^ Перейти обратно: а б Томпсон, Кен. «VCF East 2019 — Брайан Керниган берет интервью у Кена Томпсона» . Ютуб . Проверено 28 октября 2019 г.
  4. ^ Деннис М. Ричи. «Развитие языка Си» . 1993.
  5. ^ Пример начальной загрузки компилятора BASICO
  6. ^ ClojureScript Далее
  7. ^ «плоский ассемблер» . Проверено 7 января 2022 г. Плоский ассемблер является автономным и включает в себя полный исходный код.
  8. ^ «Отчет о сообществах и деятельности Haskell» .
  9. ^ https://www.pyret.org. Архивировано 10 апреля 2018 г. на Wayback Machine.
  10. ^ «Реализовать TCL в TCL» . Архивировано из оригинала 4 июня 2017 г. Проверено 19 сентября 2017 г.
  11. ^ «Вергилий» .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8468e21ae762ff1f5ccb0754b9750083__1721025480
URL1:https://arc.ask3.ru/arc/aa/84/83/8468e21ae762ff1f5ccb0754b9750083.html
Заголовок, (Title) документа по адресу, URL1:
Self-hosting (compilers) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)