Подтвердить что ты не робот

Как написать CoffeeScript на CoffeeScript?

Итак, как новый веб-программист (фон в основном на C, С++ и Python) без опыта работы с javascript (или желание испытать его, основываясь на том, что я видел), я делал некоторые предварительные исследования на CoffeeScript и am действительно нравится то, что я вижу. Один замечательный маленький нюанс, который я заметил, заключался в том, что CoffeeScript был написан на CoffeeScript, и это круто... но я действительно не понимаю, как это возможно. К сожалению, я решил взять Network Security вместо компиляторов во время моих последних курсов по информатике на старших уровнях.

Я слышал о том, как люди пишут языки на целевом языке для интерпретации с использованием существующих компиляторов для этого языка, но я не могу выкопать любую информацию о том, как это может работать, поскольку это первая реализация.

Мое предположение - это встроенная оболочка script, которая может позаботиться о том, чтобы заложить некоторые из исходных фреймворков для создания self-referential (этот термин правильно описывает это поведение?) language?

4b9b3361

Ответ 1

Это ничего нового. C составлены на C. Python написан на Python.

Можно использовать компилятор для Language X для компиляции более новой версии самого себя, с большим количеством функций. Он называется bootstrapping.

Кстати, если вы хотите больше узнать о компиляторах, несмотря на то, что пропустили в uni, посмотрите Обучение написанию компилятора — в частности, Книга Дракона.

Ответ 2

Ответ Matt отличный. Позвольте мне просто уточнить некоторые специфические для CoffeeScript сведения:

Оригинальная версия компилятора CoffeeScript была написана в Ruby, но она была переведена на CoffeeScript для v0.5.0, 21 февраля 2010 г.

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

git checkout lib && bin/cake build:full - хорошая команда для запуска, когда вы работаете на основном языке. Он обновит каталог lib (в случае, если вы что-то сломали), создайте измененный компилятор, используйте его, чтобы перестроить себя (хороший тест работоспособности), а затем запустите все тесты. Если они пройдут, у вас есть хорошие шансы на успешное изменение.

Каталог lib содержит скомпилированный JavaScript компилятора CoffeeScript (получил это?), предоставляя полезный посредник в процессе начальной загрузки. Поскольку код CoffeeScript компилятора никогда не запускается непосредственно сам по себе, это облегчает внесение изменений в язык.