Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

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

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

-  AI Memo 39 [1]

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

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

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

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

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

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

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

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

  • Ада
  • АЛГОЛ ( Берроуз B5000 )
  • ОСНОВНОЙ [4]
  • BCPL
  • BlitzMax
  • C
  • C ++ ( Visual C ++ , LLVM / clang , gcc 4.8)
  • C # ( Microsoft Roslyn , Mono gmcs)
  • Чао
  • ClojureScript [5]
  • Кобол
  • CoffeeScript
  • Кристалл
  • Карри
  • D
  • Дилан
  • Delphi
  • Эйфелева
  • Эликсир
  • F #
  • FASM
  • Фактор
  • Четвертый
  • Гамбас
  • Идти
  • Haskell
  • Идрис
  • Ява
  • Котлин
  • Лисп ( Common Lisp )
  • LiveScript
  • Меркурий
  • Модула-2
  • Nemerle
  • Ним
  • Оберон
  • OCaml
  • PL / I
  • Паскаль ( Free Pascal )
  • Пайрет [6]
  • Python ( PyPy )
  • Раку ( Ракудо )
  • Ржавчина
  • Scala
  • Схема
  • Болтовня
  • SML
  • Tcl [7]
  • TMG
  • Машинопись
  • Вала
  • Вергилий [8]
  • Umple
  • Visual Basic .NET ( Microsoft Roslyn , Mono gmcs)
  • XPL

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

  • Начальная загрузка (компиляторы)
  • Компилятор-компилятор
  • Кросс-компилятор
  • Собачье кормление
  • Проекция футамуры
  • Самостоятельный переводчик
  • Самостоятельная ссылка
  • Самомодифицирующийся код

Ссылки [ править ]

  1. ^ а б Тим Харт и Майк Левин. «AI Memo 39-Новый компилятор» (PDF) . Проверено 23 мая 2008 .[ постоянная мертвая ссылка ]
  2. ^ а б Кен Томпсон. «VCF East 2019 - Брайан Керниган берет интервью у Кена Томпсона» . Проверено 28 октября 2019 .
  3. ^ Деннис М. Ричи. «Развитие языка Си» . 1993 г.
  4. ^ Пример начальной загрузки компилятора BASICO
  5. ^ ClojureScript Далее
  6. ^ https://www.pyret.org Архивировано 10 апреля 2018 г. в Wayback Machine
  7. ^ "Архивная копия" . Архивировано 4 июня 2017 года . Проверено 19 сентября 2017 . CS1 maint: не рекомендуется параметр ( ссылка ) CS1 maint: заархивированная копия как заголовок ( ссылка )
  8. ^ "Архивная копия" . Архивировано 28 декабря 2014 года . Проверено 27 мая 2015 . CS1 maint: не рекомендуется параметр ( ссылка ) CS1 maint: заархивированная копия как заголовок ( ссылка )