Какой код вы бы хотели использовать для генерации кода, например CodeSmith? - PullRequest
2 голосов
/ 18 января 2011

Я использую CodeSmith для шаблонов PLINQO, чтобы построить свой DAL из моих объектов БД;это прекрасно работает!

Я считаю, что это основное применение приложений генератора кода, но мне любопытно ... какой другой код вы бы рассмотрели для использования генератора кода?Есть ли у вас какие-либо шаблоны CodeSmith, которые вы часто используете (если да, что он делает)?

1 Ответ

3 голосов
/ 18 января 2011

Я не использовал CodeSmith, но я довольно много сделал для генерации кода. Примечательно, что я написал большую часть системы управления конфигурацией (CM) для системы WiMAX, где код CM был сгенерирован для 3 различных платформ. Единственным отличием была модель CM для каждой платформы.

Модель была на собственном доменно-специфическом языке (DSL), для которого у нас был парсер. Язык представлял собой базовый стиль контейнера / элемента, в котором контейнеры могли вкладываться и иметь идентификатор, а элементы имели предопределенные типы. Документация была атрибутом элементов и контейнеров. Вы можете добавить Lua фрагменты к определениям элемента и контейнера, чтобы выполнить семантическую проверку (например, значение находится в правильном диапазоне, если это IP-адрес, это в диапазоне CIDR, определенном в другом месте, и т. Д.).

Парсер сгенерировал синтаксическое дерево, которое мы затем добавили в шаблоны. Язык шаблонов был частичной реализацией C StringTemplate . Мы использовали его для генерации:

  • API C для конкретной модели, к которому приложения могут обращаться для получения значений конфигурации,
  • Собранный код Lua для проверки модели и предоставления полезных сообщений об ошибках,
  • Два «бэкэнда» для API, который будет управлять значениями в памяти (для временного манипулирования моделью) и в системе базы данных (для совместного использования между процессами),
  • Анализатор и средство записи файла конфигурации,
  • документация HTML и
  • Реализация интерфейса командной строки (CLI) для интерактивного просмотра и изменения конфигурации.

Оглядываясь назад, я должен был просто использовать Lua напрямую в качестве DSL. Это было бы более многословно, но наличие синтаксического анализатора и множества доступных шаблонов Lua позволило бы сэкономить много усилий при разработке.

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

...