模板驱动的代码生成:Jeeves框架详解
1. 代码生成概述
程序员在日常工作中经常会创建和使用小型的规范语言,例如数据库模式、资源文件(如Unix中的.rc文件)、用户界面规范(如Motif UIL文件)以及网络接口规范(如RPC或CORBA IDL文件)等。这些规范语言能让我们以高级、紧凑且声明式的格式来表述需求。比如在Motif的UIL中,只需简单声明在表单中添加两个按钮,就能避免用C语言编写约20条语句来实现相同效果。
在规范语言和传统系统编程语言(如C或C++)之间的语义差距可以通过两种方式来弥合:
- 方式一 :C应用程序将规范视为元数据,即应用程序嵌入规范解析器,并使用C数据结构和内部API与之交换信息。
- 方式二 :使用独立的编译器将规范转换为C代码,然后将其链接到应用程序中。RPC系统和CASE工具通常采用这种方式。
我们接下来将研究第二种方式,并构建一个名为Jeeves的可配置代码生成框架。
2. 现有代码生成工具的局限性
目前的代码生成器大多是特定领域的,并且在输出能力方面存在不必要的局限性,以下是一些具体例子:
| 工具类型 | 特点 | 局限性 |
| ---- | ---- | ---- |
| RPC | 允许在不同地址空间(可能是不同机器)调用过程,通过IDL编译器生成客户端和服务器端的C代码 | 商业IDL编译器在更改输出代码方面缺乏灵活性,难以插入监控网络性能或审计数据的探针,也难以对数据进行透明加密,且手动更改的代码会在下次运行编译器时被覆盖 |
| CASE |