扩展Mono C#编译器:有没有文档或先例?

我目前正在参与一些有趣的编程语言研究,迄今为止,它集中在通过一些非常强大的基于程序员生产力的功能扩展即将推出的Java 7.0编译器.这些工作应该同样适用于相关的编程语言,如C#.

我目前正在为这个功能的C#端口制定原型的选项.我更喜欢开放源代码的选择,以便这些工作的成果可以与最广泛的受众共享.因此,Mono C#编译器似乎是最明显的起点.我是一个经验丰富的C#开发人员,所以写代码不是问题.我主要关心以可维护和支持的方式扩展编译器.在Mono常见问题(link)中,“Mono已被用作为C#语言(有来自Mono C#编译器的三四个编译器)尝试新思路的基础”.不幸的是,没有比这更多的指针,到目前为止,Google的搜索没有改变.

我想知道有没有人有这方面的信息. mcs / gmcs / dmcs是否具有标准的可扩展性模型?具体来说,我将在程序的抽象语法树上执行一些有趣的变换.在抽象语法树生成和类型检查器之间是否有将标准机制插入到编译器链中,然后代码生成?

到目前为止,我已经编写了代码的一些特别扩展(主要在代码生成器中),但这似乎并不是一个可维护的解决方案,特别是考虑到我打算将扩展名与Git中继线单声道尽可能多.此外,无论何时进行更改,无需重新编译整个编译器,就可以对我的扩展进行更新.我希望能够将所有的AST操作包装到一个可以由mcs / gmcs / dmcs动态加载的.NET程序集中,而无需直接攻击核心编译器代码.

任何关于扩展Mono C#编译器的想法或指针都将非常感激!

更新(2010年10月23日)

为了回应我的问题,我决定开始在Mono的一个分支上工作,以便为编译器创建一个简单的扩展性模型.这是在很早的阶段,但是在这里它是在GitHub:

http://github.com/rcook/mono-extensibility

而主要的承诺是:http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01

如果有人对这个项目的合作感兴趣,请告诉我们!

不幸的是,我无法充分回答你的问题,但是如果你看看Miguel de Icaza博客上的C#扩展的例子,你会发现所有这些都是补丁的形式,而不是插件或扩展.这似乎表明没有这样的API.

请注意,所有这些示例的范围比您似乎正在处理的范围小得多:

> Parameterless Anonymous Methods(这篇文章实际上明确提到了关于这种语言扩展的可维护性的担忧)
> String Interpolation
> Destructuring Assignment for Tuples
> Syntactic Sugar for IEnumerable

这些大多是局部语法糖,没有“有趣”的行为.例如,第四个补丁为IEnumerables实现了Cω的语法糖,但没有任何使语法有趣的Cω语义.如果你看这个补丁,你可以看到,它完全是愚蠢的语法扩展〜T→IEnumerable< T>,而不是Cω,成员访问和方法调用在流上被适当提升.

Microsoft Research’s Phoenix Compiler Pipeline曾经被明确宣称为这种可扩展性问题的解决方案,但它似乎主要侧重于代码生成后端的IR级别的优化和分析.其实我甚至不确定这个项目是否还活着.

翻译自:https://stackoverflow.com/questions/3848001/extending-the-mono-c-sharp-compiler-is-there-any-documentation-or-precedent

转载注明原文:扩展Mono C#编译器:有没有文档或先例?