38

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

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

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

+4

http: //en.wikipedia.org/wiki/Bootstrapping_ (компиляторы) –

+3

следует предупредить, что вам нужно * хорошо знать Javascript для кода в CoffeeScript, поскольку все ошибки времени выполнения указывают на скомпилированный источник. –

+0

Re терминология: вы можете сказать, что компилятор CoffeeScript был ** загружен ** из первоначальной реализации Ruby. Вы также можете сказать, что язык CoffeeScript ** является самообслуживанием **. – Quuxplusone

ответ

46

Это ничего нового. C составлены на C. Python has been written in Python.

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

Кстати, если вы хотите узнать больше о компиляторах, несмотря на то пропустил в универе, взглянуть на Learning to write a compiler — конкретно , the Dragon Book.

+0

Я уже слышал термин «Загрузочный», но не имел четкого понимания его. Это действительно интересно, спасибо за отличные ссылки, я немного поработаю над загрузкой. Я слышал о книге драконов, а также читал «Должен читать книги по программированию» на SO, мне нужно будет проверить это – Hortinstein

+1

Я согласен с Мэттом. Но, если вы хотите изучить Coffeescript, я настоятельно рекомендую сначала изучить Javascript. Это может выглядеть немного чуждо, как людям с разных языков, но его концепции (такие как функция и база прототипов) полезны для множества программных/прикладных решений и фреймворков. Опять же, Coffeescript компилируется в Javascript. Таким образом, очевидно, что скрытые под классами и концептуальные концепции в CS, концепции Javascript играют большую роль. И прочитайте книгу Дракона, чтобы понять, как работают компиляторы. – NirmalL

42

Ответ Мэтта прекрасен. Позвольте мне уточнить с какой CoffeeScript специфичной информации:

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

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

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

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

+3

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