Как CoffeeScript может быть написан на CoffeeScript? - PullRequest
38 голосов
/ 02 июня 2011

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

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

Я предполагаю, что это встроенный сценарий оболочки, который может позаботиться о создании некоторой исходной инфраструктуры для построения самоссылочной ( правильно ли описывает этот термин это поведение?) язык?

Ответы [ 2 ]

46 голосов
/ 02 июня 2011

В этом нет ничего нового.Компиляторы C были написаны на C. Python был написан на Python .

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

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

42 голосов
/ 02 июня 2011

Ответ Мэтта превосходен. Позвольте мне уточнить некоторые сведения о CoffeeScript:

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

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

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

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

...