相关疑难解决方法(0)

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

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

我目前正在寻找原型化C#端口功能的选项.我更喜欢开源选项,以便可以与最广泛的受众分享这项工作的成果.因此,Mono C#编译器似乎是最明显的起点.我是一位经验丰富的C#开发人员,所以编写代码不是问题.我主要关心的是以可维护和支持的方式扩展编译器.在关于这个主题的单声道常见问题解答(链接)中,声称"Mono已被用作尝试C#语言的新思想的基础(有三个或四个编译器派生自Mono的C#编译器)".不幸的是,没有比此更多的指示,到目前为止,谷歌的搜索还没有任何改变.

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

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

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

更新(2010年10月23日)

在回答我的问题时,我决定开始研究Mono的一个分支,以便为编译器创建一个简单的可扩展性模型.这是在它的早期阶段,但它在GitHub:

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

主要提交是:http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01

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

c# compiler-construction mono gmcs

15
推荐指数
1
解决办法
888
查看次数

扩展C#语言,多少努力/收益?

介绍

作为一名开发人员,我每天都参与编写大量的数学代码,并且我想在C#语言中添加很少的语法糖来简化代码编写和审阅.

我已经读到这个线程,这等一个可能的解决方案,并只是想知道往哪个方向最好了多少努力,可能只占到解决以下三个问题语法*.

*:我可以在没有描述语法糖的情况下生存,但如果没有太多的工作和Rube-Goldberg为简单的编译过程设计,那么进一步调查可能会很有趣.

1.多个输出参数

我想写:

 [double x, int i] = foo(z);
Run Code Online (Sandbox Code Playgroud)

代替:

 double x;
 int i;
 foo(out x, out i, z);
Run Code Online (Sandbox Code Playgroud)

注意:out首先放置参数并foo像往常一样声明(或使用相同类型的语法).

2.附加运营商

我想要一些新的一元/二元运算符.不知道如何为这些定义(并且在解析源时不引入歧义似乎相当复杂),无论如何想要有类似的东西:

namespace Foo
{
    using binary operator "\" as "MyMath.LeftDivide";
    using unary operator "'" as "MyMath.ConjugateTranspose";

    public class Test
    {
         public void Example()
         {
             var y = x';
             var z = x \ y;
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

代替:

namespace Foo
{
    public class Test
    {
         public …
Run Code Online (Sandbox Code Playgroud)

c#

8
推荐指数
2
解决办法
351
查看次数

标签 统计

c# ×2

compiler-construction ×1

gmcs ×1

mono ×1