Interested Article - Самодостаточность (компиляторы)
![](/images/007/324/7324570/1.jpg?rand=501040)
![](https://cdn.wafarin.com/avatars/a7cf8b1676a33f2d7b907899a3a94169.gif)
- 2021-12-08
- 1
Cамодостаточность ( англ. self-hosting ) в разработке программного обеспечения — это использование программы для создания новых версий той же самой программы. Чаще всего данное понятие применяется в отношении компиляторов , которые могут скомпилировать собственный исходный код . Также к самодостаточным программам обычно относятся ядра операционных систем , интерпретаторы командной строки и системы контроля версий.
История
Первый самодостаточный компилятор был написан для языка программирования Lisp Хартом и Левиным в Массачусетском технологическом институте в 1962 году. Они написали компилятор для исходного кода Lisp на Lisp и тестировали его внутри уже существовавшего на тот момент интерпретатора . Со временем компилятор стал самодостаточным и смог компилировать собственный исходный код.
Примеры
Когда Кен Томпсон начал разработку Unix в 1968 году, он писал и компилировал программы на GE-635, и запускал их на PDP-7 . После того, как первая версия ядра Unix, интерпретатор команд , редактор, ассемблер и несколько других утилит заработали, операционная система Unix стала самодостаточной — новые программы можно было писать и тестировать на самой PDP-7 без использования сторонних устройств.
Дуглас Макилрой написал TMG ( компилятор компиляторов ) с помощью TMG на листе бумаги, выполнил трансформацию в машинный код вручную, и перенес этот машинный код на PDP-7 Кена Томпсона.
Разработка Системы GNU в значительной мере основана на использовании GCC (GNU C compiler) и GNU Emacs (популярный текстовый редактор), что позволяет разрабатывать свободное программное обеспечение в рамках проекта GNU без внешних зависимостей от другого, потенциально несвободного ПО.
Многие языки программирования имеют самодостаточные реализации: компиляторы для этих языков написаны на самих этих языках. В некоторых из этих случаев первоначальная реализация была разработана с использованием другого языка программирования, ассемблера или даже машинного кода .
См. также
- Раскрутка компилятора
- Компилятор компиляторов
- Кросс-компилятор
- Самореференция
- Самомодифицирующийся код
Примечания
- Dennis M. Ritchie. от 3 апреля 2017 на Wayback Machine . 1993.
- Ken Thompson. . Дата обращения: 28 октября 2019. 11 июня 2021 года.
![](https://cdn.wafarin.com/avatars/a7cf8b1676a33f2d7b907899a3a94169.gif)
- 2021-12-08
- 1