我目前正在参与一些有趣的编程语言研究,到目前为止,这些研究一直围绕着扩展即将推出的 Java 7.0 编译器,使其具有一些非常强大的基于程序员生产力的特性。这项工作应该同样适用于相关的编程语言,例如 C#。
我目前正在研究为功能的 C# 端口设计原型的选项。我更喜欢开源选项,以便可以与最广泛的受众分享这项工作的成果。因此,Mono C# 编译器似乎是最明显的起点。我是一位经验丰富的 C# 开发人员,因此编写代码不是问题。我主要关心以可维护和受支持的方式扩展编译器。在有关该主题的 Mono 常见问题解答(链接)中指出,“Mono 已被用作尝试 C# 语言新想法的基础(从 Mono 的 C# 编译器派生的三个或四个编译器)”。不幸的是,没有比这更进一步的指示,到目前为止,谷歌搜索还没有出现任何结果。
我想知道有没有人有这方面的信息。mcs
//是否有标准的可扩展性模型gmcs
?dmcs
具体来说,我将对程序的抽象语法树进行一些有趣的转换。是否有一种标准机制可以在抽象语法树生成和类型检查器然后代码生成之间将功能插入编译器链?
到目前为止,我已经为代码编写了一些临时扩展(主要在代码生成器中),但这似乎不是一个可维护的解决方案,特别是考虑到我打算让我的扩展与 Git 主干保持同步尽可能单声道。此外,如果能够在每次进行更改时不必重新编译整个编译器,就能够对我的扩展进行更新,这将是一件好事。我希望能够将我所有的 AST 操作包装到一个单独的 .NET 程序集中,该程序集可以由mcs
//动态加载gmcs
,dmcs
而无需直接破解核心编译器代码。
任何关于扩展 Mono C# 编译器的想法或建议都将不胜感激!
更新(2010 年 10 月 23 日)
针对我的问题的回答,我决定开始研究 Mono 的一个分支,以便为编译器创建一个简单的可扩展性模型。它处于非常早期的阶段,但它位于 GitHub:
http://github.com/rcook/mono-extensibility
主要提交是:http: //github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01
如果有人有兴趣在这个项目上合作,请告诉我!