LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

top-level или локальные - тут не важно

Это важно, например foo-using-bar-dsl.cc, bar-using-foo-cc.dsl - если *.dsl транслируется в *.cc, то есть в top-level формы, то мы тут легко получаем интерпортабельность просто на уровне символов линковки, вся сложность только в парсере, чекере (если нужен) и принтере. Поэтому кодогенерация top-level форм «никогда не была проблемой» - cpp, m4, свои велосипеды-трансляторы.

И это ни через рефлексию ни через ADT не сделать

Ну да, это должен быть либо механизм в языке, либо ручками.

Как в TH сделать макрос, раскрывающийся в определение другого макроса?

А в чём проблема? Пишется как обычно в Q Dec.

Но я «формы deriving в хаскеле» привёл как примеры полезной кодогенерации которые там видел - Derive* расширения, derive пакеты. Ещё можно вспомнить разные DSL для routes, css, js, html в yesod (тут уже и top-level c TH/QQ для Dec, и просто QQ для Exp).

Вот, кстати, в Scala/Play! тоже в своё время перешли к таким type-safe DSLям для маршрутов и темплейтов, но там оно ещё без макросов, а * -> *.scala и с вырвиглазными парсерами, чекерами и принтерами :)

Исходная версия quasimoto, :

top-level или локальные - тут не важно

Это важно, например foo-using-bar-dsl.cc, bar-using-foo-cc.dsl - если *.dsl транслируется в *.cc, то есть в top-level формы, то мы тут легко получаем интерпортабельность просто на уровне символов линковки, вся сложность только в парсере, чекере (если нужен) и принтере. Поэтому кодогенерация top-level форм «никогда не была проблемой» - cpp, m4, свои велосипеды-трансляторы.

И это ни через рефлексию ни через ADT не сделать

Ну да, это должен быть либо механизм в языке, либо ручками.

Как в TH сделать макрос, раскрывающийся в определение другого макроса?

А в чём проблема? Пишется как обычно в Q Dec.

Но я «формы deriving в хаскеле» привёл как примеры полезной кодогенерации которые там видел - Derive* расширения, derive пакеты. Ещё можно вспомнить разные DSL для routes, css, js, html в yesod (тут уже и top-level и обычный TH для Exp).

Вот, кстати, в Scala/Play! тоже в своё время перешли к таким type-safe DSLям для маршрутов и темплейтов, но там оно ещё без макросов, а * -> *.scala и с вырвиглазными парсерами, чекерами и принтерами :)