Автор Тема: Опыт создания ЯП.  (Прочитано 8801 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Опыт создания ЯП.
« : Октябрь 15, 2011, 07:52:01 pm »
Я давно читал серию постов одного очень грамотного товарища по поводу его опыта создания и реализации ЯП (компилятор, виртуальная машина, весь сопутствующий инструментарий). Потом потерял ссылку на это вот богатство. Теперь вот снова нашел и спешу поделиться, может кому-то полезно будет.

Для затравки пара цитат:

Цитировать
Сам компилятор написан на Окамле - ~1700 строк. При этом он вдоль и поперек неправильный. Как обычно компилируют подобные языки? Берется генератор парсеров, вроде яка, бизона или муравлера, им разбирают текст. Типы или заставляют описывать явно, или делают их вывод имени Хайнекен-Миллера Хиндли-Милнера. Для ФВП делают или первоклассные функции и замыкания, с представлением функций парой указатель-данные, или хотя бы объекты с виртуальными функциями. Для автоматического управления памятью делают сборку мусора или хотя бы подсчет ссылок. Для генерации кода используют промежуточное представление SSA. ВМ делают стековую или, реже, регистровую... Ничего этого у меня нет. А что есть вместо  - расскажу в следующих постах.

Цитировать
Почти все классические книжки и курсы по компиляторостроению начинаются с приемов разбора текста. И, я смотрю, многие разработчики тоже начинают писать свои компиляторы с парсинга. Не делайте этого! Это имеет смысл, только если разбираемый язык дан свыше каким-нибудь уважаемым божеством, а жрецы уже написали к нему сутры, шастры и кандидатские диссертации с комментариями. В противном случае дизайн языка начинает подчиняться ограничениям используемых инструментов парсинга, а сформулировать нормально грамматику становится очень сложно. Да и в выборе инструментов легко ошибиться. Вот вам мой совет: сперва опишите язык в виде структуры данных (алгебраического типа, например), реализуйте логику самого компилятора (в процессе структура может не раз поменяться), и лишь потом из нее уже делайте текст, перевод такой структуры в грамматику уже прост и линеен.

Пишем неправильный компилятор. Часть 0
Часть 1. Як, слон и древесная крыса
Часть 2. Иллюзорный автомобиль
Часть 3. Первые шаги
Часть 4. ФВП, полиморфизм и вывод типов без матана
Структуры, рефакторинг.
Оптимизация
Fun with Leo: metaprogramming for free
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"