Ламерский вопрос по компилятору
От: IDL  
Дата: 07.07.07 10:39
Оценка:
Сразу извиняюсь за ламерский вопрос, но никогда не имел дело с компиляторами, парсерами, лексерами.
Часто встречал упоминания про то, что компилятор Nemerle написан на самом Nemerle. Этот момент мне не понятен.
Кто компилирует код написанный на Nemerle для компилятора?
Re: Ламерский вопрос по компилятору
От: Курилка Россия http://kirya.narod.ru/
Дата: 07.07.07 12:09
Оценка: 1 (1)
Здравствуйте, IDL, Вы писали:

IDL>Сразу извиняюсь за ламерский вопрос, но никогда не имел дело с компиляторами, парсерами, лексерами.

IDL>Часто встречал упоминания про то, что компилятор Nemerle написан на самом Nemerle. Этот момент мне не понятен.
IDL>Кто компилирует код написанный на Nemerle для компилятора?

Это такая техника, называется Bootstrapping
Re: Ламерский вопрос по компилятору
От: WolfHound  
Дата: 07.07.07 12:37
Оценка: 10 (2) +1
Здравствуйте, IDL, Вы писали:

IDL>Сразу извиняюсь за ламерский вопрос, но никогда не имел дело с компиляторами, парсерами, лексерами.

IDL>Часто встречал упоминания про то, что компилятор Nemerle написан на самом Nemerle. Этот момент мне не понятен.
IDL>Кто компилирует код написанный на Nemerle для компилятора?
Техника называется bootstrap.
Первая версия компилятора пишется на чем попало. В данном случае попался OCaml.
После того как первая версия заработает компилятор переписывают на том языке который он компилирует.
Теперь главное не потерять бинарники. Иначе не собрать... В данном случае бинарники лежат рядом с исходниками в SVN.
После того как очередная пачка фичей будет добавлена и баги исправлены собирают новую версию компилятора.

Сборка происходит следующим образом:
Сначала текущей версией собирают из исходников бинарник1.
Потом бинарником1 из исходников собирают бинарник2.
Потом бинарником2 из исходников собирают бинарник3.
Если бинарник2 и бинарник3 идентичны и проходят все тесты то считаем что компилятор может собрать сам себя и можно комитить новые бинарники.
Если обломились на любой из стадий то нужно найти и исправить ошибку так чтобы данный процесс проходил без ошибок.

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

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

Как по мне то пляски вокруг очередного билда (тем болие что эта процедура легко автоматизируется) просто ничто по сравнению с тем что дает bootstrap.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.