Да это все замечательно; но вот какой с этого прок крокодилам? Я лет шесть назад, сознаюсь, не от большого ума полистал книжку по, кажется, хаскелю и, к своей чести, довольно быстро ее выкинул. Почему? Потому что ни одной моей проблемы это не решало.
Мои решило. Правда, не хаскель (который я изучил, но на практике почти не использую), а F# и Clojure. Первое генерит код, второе считает бухгалтерские отчеты. В первом случае, кроме функциональщины вообще слабо что пригодно, во втором - она используется как "более мощный sql, чем сам sql" :)
Представление AST кода наиболее естественным образом выглядит в двух случаях - или это лиспообразные языки, где код от данных и AST не отличается, или же нужны развесистые деревья с разнообразными структурами данных, которые проще всего на функциональных языках описываются.
Еще можно было бы генерить код без AST, а как любой текст - из текстовых шаблонов, но даже для этого входные данные проще описывать на функциональных языках.
Я пытался сделать кодогенератор сначала на C# - получился откровенный неподдерживаемый бред. Ну по аналогии - как SQL запросы руками на обычных языках имитировать, над курсорами :) На F# то же самое получилось гораздо понятнее и лаконичнее.
no subject
Date: 2013-02-08 09:52 am (UTC)no subject
Date: 2013-02-08 09:55 am (UTC)no subject
Date: 2013-02-08 10:09 am (UTC)no subject
Date: 2013-02-08 10:08 am (UTC)Первое генерит код, второе считает бухгалтерские отчеты.
В первом случае, кроме функциональщины вообще слабо что пригодно, во втором - она используется как "более мощный sql, чем сам sql" :)
no subject
Date: 2013-02-08 10:11 am (UTC)no subject
Date: 2013-02-08 10:30 am (UTC)Еще можно было бы генерить код без AST, а как любой текст - из текстовых шаблонов, но даже для этого входные данные проще описывать на функциональных языках.
Я пытался сделать кодогенератор сначала на C# - получился откровенный неподдерживаемый бред. Ну по аналогии - как SQL запросы руками на обычных языках имитировать, над курсорами :)
На F# то же самое получилось гораздо понятнее и лаконичнее.