T4

Aug. 6th, 2010 11:53 am
metaclass: (Default)
[personal profile] metaclass
Вкуриваю полезную вещь, на которую мне кто-то когда-то дал ссылку - Text Template Transformation Toolkit - шаблонизатор-кодогенератор, встроенный в Visual Studio.

Всем полезная штука, но что-то мне кажется, что кодогенерация прямо в текст - это уныние и печаль. Вот генерить AST, а потом из него генерить код на целевом языке - более правильный подход. Правда, что в первом, что во втором случае, шаблоны для кодогенератора выглядят нечитабельным адом.

PS: Написал на T4 генератор иммутабельных классов:
ROEntity.tt - генератор
ROEntityTest.tt - пример использования
ROEntityTest.generated.cs - результат кодогенерации

Date: 2010-08-06 12:37 pm (UTC)
wizzard: (Default)
From: [personal profile] wizzard
>> кодогенерация прямо в текст - это уныние и печаль

Полностью согласен; вот правда если бы был еще AST под всё что можно...

Date: 2010-08-06 01:19 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Не вижу существенной разницы, за исключением того, что их подход проще для освоения.

Date: 2010-08-06 01:19 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да, прилично проще.

Date: 2010-08-09 05:02 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
Кодогенерация в AST более правильна с точки зрения интеграции кодогенератора в компилятор. Поскольку не требуется потом парсить сгенерированный код. Кроме того, над AST можно проделывать разные штуки, которые над текстом не сделаешь - статистики там печатать, типовые упрощения...

Date: 2010-08-09 06:01 pm (UTC)
From: [identity profile] aamonster.livejournal.com
(почесав репу) В тот момент, когда мне объяснят, зачем для печати статистики надо строить дерево, я, наверное, решу использовать деревья на все случаи жини, а не думать над задачей.

А то для простейшей задачи типа вычисления выражения или подсчёта статистики люди их строят - решая задачу в два прохода вместо одного и держа в памяти целое дерево вместо пути от корня к текущей ветке (да и тот живёт в стеке - сокращая код вдвое).

Я не против деревьев - я за обдумывание и выбор лучшего решения для каждого конкретного случая.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 3rd, 2025 12:13 am
Powered by Dreamwidth Studios