Самозагрузка все еще требует внешней поддержки - PullRequest
91 голосов
/ 17 августа 2008

Я слышал об идее начальной загрузки языка, то есть написании компилятора / интерпретатора для самого языка. Мне было интересно, как это можно сделать, я немного осмотрелся и увидел, что кто-то сказал, что это может быть сделано либо

  • написание исходного компилятора на другом языке.
  • ручное кодирование исходного компилятора в Assembly, что выглядит как особый случай первого

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

Ответы [ 11 ]

0 голосов
/ 01 мая 2015

Некоторые загрузочные компиляторы или системы сохраняют как исходную форму, так и форму объекта в своем хранилище:

  • ocaml - это язык, который имеет как интерпретатор байт-кода (т.е. компилятор для байт-кода Ocaml), так и собственный компилятор (для x86-64 или ARM и т. Д. ... ассемблер). Его репозиторий svn содержит как исходный код (файлы */*.{ml,mli}), так и форму байт-кода (файл boot/ocamlc) компилятора. Поэтому при сборке он сначала использует свой байт-код (из предыдущей версии компилятора), чтобы скомпилировать себя. Позже только что скомпилированный байт-код может скомпилировать нативный компилятор. Итак, репозиторий Ocaml svn содержит как исходные файлы *.ml[i], так и файл байт-кода boot/ocamlc.

  • Компилятор rust загружает (используя wget, поэтому вам нужно работающее подключение к Интернету) предыдущую версию своего двоичного файла для компиляции.

  • MELT - это язык, похожий на Лисп, для настройки и расширения GCC . Он переводится в код C ++ загрузочным переводчиком. Сгенерированный код C ++ транслятора распространяется, поэтому репозиторий svn содержит как *.melt исходные файлы, так и melt/generated/*.cc "объектные" файлы транслятора.

  • Система искусственного интеллекта J.Pitrat CAIA является полностью самогенерирующей. Он доступен как коллекция из тысяч [A-Z]*.c сгенерированных файлов (также с сгенерированным заголовочным файлом dx.h) с коллекцией из тысяч _[0-9]* файлов данных.

  • Несколько компиляторов Scheme также загружаются. Схема 48, Схема курицы, ...

...