metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2011-07-19 09:25 am

Кодогенерация и метапрограммирование

Все-таки, несмотря на то, что функциональные языки (F#, в моем случае) очень удобны для кодогенерации - кодогенераторы получаются не очень адекватными.
Или огромные классы для описания AST целевых языков и сборка из них нужного кода, затем его pretty-printing или тупой вывод текста по шаблонам. В обоих случаях - код очень малочитабелен.
Для кодогенерации нужен какой-то специфический DSL, да еще с адаптацией под целевые языки.
В случае с метапрограммированием вроде его роль выполняет quasi-quotation, но там в итоге получается код только на том же языке на котором пишешь.

[identity profile] vit-r.livejournal.com 2011-07-19 08:01 am (UTC)(link)
DSL должны быть специфичными для каждой задачи и понятны специалистам-пользователям. Куда потом генерируется DSL пользователям абсолютно пофиг. Главное, чтоб им было просто решать свои задачи.

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

[identity profile] avnik.livejournal.com 2011-07-19 08:18 am (UTC)(link)
Кстати да.
Если это не задумывается как препроцессор какой нибудь, то лучше наверное сразу в LLVM IR -- там и база для AST готовая, и куча всякой фигни включая jit

[identity profile] metaclass.livejournal.com 2011-07-19 08:36 am (UTC)(link)
Не, тут DSL не для пользователей, а для себя - чтобы не сойти с ума, когда приходится чего-нибудь дорабатывать в кодогенераторе.

[identity profile] avnik.livejournal.com 2011-07-19 08:50 am (UTC)(link)
Может сам кодогенератор писать на DSL?
(или даже нескольких)

Погляди в ллвм, если не для использования - то на посмотреть как сделано.
(Там адъ из DSL'ей для всего)

[identity profile] cp-poster.livejournal.com 2011-07-19 09:51 am (UTC)(link)
И тем не менее знаю девушек-не-программисток/админок, которые осилили lisp-based DSL.