您会考虑使用 CodeSmith 这样的代码生成器来编写哪些代码?

发布于 2024-10-12 09:13:22 字数 154 浏览 3 评论 0原文

我使用 CodeSmith 作为 PLINQO 模板,从我的数据库对象构建我的 DAL;效果很好!

我相信这是代码生成器应用程序的主要用途,但我很好奇......您还会考虑使用代码生成器来执行哪些其他代码?您是否有经常使用的 CodeSmith 模板(如果有,它的作用是什么)?

I use CodeSmith for the PLINQO templates, to build my DAL from my DB objects; it works great!

I believe that's the primary use of code generator apps, but I'm curious... what other code would you consider using a code generator for? Do you have any CodeSmith templates that you use frequently (if so, what does it do)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终难愈 2024-10-19 09:13:22

我没有使用过 CodeSmith,但我已经完成了相当多的代码生成。值得注意的是,我为 WiMAX 系统编写了大部分配置管理 (CM) 系统,其中为 3 个不同的平台生成了 CM 代码。唯一的区别是每个平台的 CM 模型。

该模型采用自定义的领域特定语言 (DSL),我们为其构建了一个解析器。该语言是一种基本的容器/元素样式,其中容器可以嵌套并具有标识符,元素是预定义的类型。文档是元素和容器的属性。您可以将 Lua 片段添加到元素和容器定义中以进行语义验证(例如,该值位于正确的位置)范围,如果它是 IP 地址,则它是否在其他地方定义的 CIDR 范围内,等等)。

解析器生成一个语法树,然后我们将其推送到模板中。模板语言是 StringTemplate 的部分 C 实现。我们用它来生成:

  • 应用程序可以调用以获取配置值的特定于模型的 C API,
  • 收集的用于验证模型并提供有用错误消息的 Lua 代码,
  • 用于管理内存中值的 API 的两个“后端”(例如模型的临时操作),以及数据库系统(用于在进程之间共享)、
  • 配置文件解析器和编写器、
  • HTML 文档以及
  • 用于交互式查看和更改配置的命令行界面 (CLI) 实现。

现在回想起来,我应该直接使用 Lua 作为 DSL。它会更加冗长,但是如果已经有了解析器并且有很多可供我使用的 Lua 模板选项,将会节省大量的开发工作。

对于具有重复结构和明确定义这些事情需要做什么的规则的事物来说,代码生成可能是一件很棒的事情。

I haven't used CodeSmith, but I've done a fair bit of code generation. Noteably I wrote most of a configuration management (CM) system for a WiMAX system, where the CM code was generated for 3 different platforms. The only difference was the CM model for each platform.

The model was in a custom Domain Specific Language (DSL) that we built had a parser for. The language was a basic container/element style where containers could nest and have an identifier, and elements were of pre-defined types. Documentation was an attribute of elements and containers. You could add Lua snippets to the element and container definitions to do semantic validation (e.g., the value is in the correct range, if it's an IP address is it in a CIDR range defined elsewhere, etc.).

The parser generated a syntax tree that we then pushed at templates. The template language was a partial C implementation of StringTemplate. We used it to generate:

  • A model specific C API that applications could call into to get configuration values,
  • The collected Lua code for validating the model and providing useful error messages,
  • Two "backends" for the API that would manage values in memory (for temporary manipulation of a model), and in a database system (for sharing amongst processes),
  • Configuration file parser and writer,
  • HTML documentation, and
  • Command Line Interface (CLI) implementation for interactive viewing and changing of a configuration.

In retrospect, I should have simply used Lua directly as the DSL. It would have been more verbose, but having the parser already there and lots of Lua templating choices available to me would have saved a lot of development effort.

For things that have a repetivie structure and well defined rules about what those things need to do, code generation can be a wonderful thing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文