Вы, очевидно, не фанат Лиспа, потому что мальчикам и девочкам, которые соответствуют этому описанию, обычно можно полагать, что Лисп - это скомпилированный язык. Lisp появился в 1958 году. Руководство по Lisp 1 от 1961 года уже описывает компиляцию.
Интерпретация полезна; это дает нам семантику без необходимости сначала писать компилятор. Эта семантика обеспечивает эталонную модель для скомпилированной семантики: в идеале интерпретируемые и скомпилированные программы делают то же самое. Когда мы обнаруживаем, что они этого не делают, мы либо разрешаем это, либо каким-то образом очерчиваем и оправдываем ситуацию.
Интерпретация может использоваться для начальной загрузки скомпилированной системы Lisp, не требуя существующей реализации Lisp, но вместо этого использует другой язык, такой как C. Интерпретация избавляет от необходимости писать компилятор Lisp на языке начальной загрузки.
Хорошим примером этого является реализация CLISP ANSI Common Lisp. Для сборки CLISP вам нужен только компилятор Си. Lisp-компилятор CLISP написан на Lisp. Так что, конечно, вам нечем запускать этот компилятор. Решение состоит в том, чтобы интерпретировать компилятор, используя интерпретатор, написанный на C.
Во время работы с интерпретатором компилятор компилирует большую часть библиотеки Lisp. Результатом этого является то, что CLISP называет «полускомпилированным образом памяти»: образ, который содержит скомпилированные подпрограммы, но некоторые интерпретированные подпрограммы. (Я думаю, что сам компилятор все еще интерпретирует код).
Это полускомпилированное изображение затем используется для компиляции оставшегося кода, в результате чего получается полностью скомпилированное изображение.
Без интерпретатора компилятор CLISP мог быть загружен только при условии, что сначала будет установлена другая реализация Lisp. (То, как вам нужен компилятор C для усиления GCC). В противном случае компилятор CLISP должен был бы быть написан на C, чтобы компилятор компилировался с использованием существующего компилятора C, а затем применялся к коду Lisp для его компиляции до его запуска.
Никто в здравом уме не хочет писать компилятор Lisp на C, и требование реализации Lisp для построения реализации Lisp является большим недостатком в мире, в котором Lisp не является вездесущим. Что произойдет в модели Boostpping Lisp-compiler-in-C, так это то, что Lisp-компилятор, написанный на C, будет полностью минимальным и, возможно, неполным, который будет генерировать код низкого качества, достаточно хорош только для запуска Boostrapping и «реальным» Компилятор все равно будет написан на Лиспе.