当用C#编写C#编译器时,是否可以修改它?

时间:2009-06-12 19:34:52

标签: c# .net compiler-construction

我想知道是否可以为方便起见实现一些新功能。

这是不可能的,什么时候出来?

C#5.0:编译器即服务:

http://www.matthewlefevre.com/blog/entry.php/c-40-and-c-50/368

5 个答案:

答案 0 :(得分:11)

Anders Hejlsberg说:

  

这是我们正在考虑的未来版本的方向之一   C#。实际上,我认为元编程是我们更大的“编译器”的一部分   作为服务“我们正在为将来的版本工作的主题。我们   想要打开我们的编译器,使它成为你可以调用的API   编译一段代码并获取表达式树和/或IL。这个   支持一系列场景,例如应用程序   可编程性,交互式提示,用户编写的重构,以及   特定领域的语言,其中嵌入了很少的C#岛   它们。
  Source

他还在其他地方(在Channel9采访中)说,他们正在将C#编译器的核心移植到托管代码,以实现此目的。

最后一个PDC提供了demo个。 C#编译器确实是托管代码。

答案 1 :(得分:5)

这真的取决于很多不同的事情。包括但不限于......

  1. Microsoft会用C#编写C#编译器吗?
  2. 编译器是以源代码和二进制形式提供还是仅以二进制形式提供?
  3. 您想编写二进制扩展名还是只修改源代码?
  4. 下面列出了源和二进制文件的许可证?
  5. 您想在商业或爱好项目中使用二进制文件吗?
  6. 现在关于这些问题的答案是什么,我不知道。我也不相信对基本问题#1有一个明确的答案。所以整体答案是一个很大的“不知道”

答案 2 :(得分:3)

严重。没有。这将成为微软支持的噩梦。 “引导”编译器,即编译它们所编写的语言的编译器至少在70年代就已存在(并且很常见)。这与让客户改变源代码鳕鱼没有任何关系,可支持性就是整个问题。所以现在,VS-IDE加载项就像你能得到的一样接近。

答案 3 :(得分:3)

如果我正确理解你的问题,那么我认为答案是部分肯定的:在C#中构建一个C#编译器(或者实际上,在.NET中)将使得在编译过程中公开钩子非常容易,用户将会能够在语言本身内使用。

作为使用.NET编译器的.NET语言的示例,请查看Boo。由于Boo的编译器是用.NET编写的(主要是在C#和一点Boo中,确切地说),因此很容易通过编译宏和元编程等方式挂钩编译过程。

我认为当C#编译器本身是用C#编写的时候,元编程C#会变得更容易,也很不可避免。但是我怀疑微软是否会使整个编译器“用户可修改”,因为正如其他答案所述,这将意味着支持噩梦。然而,其他open source C# compilers存在,并且可能在他们的方法中更加自由。

答案 4 :(得分:2)

是的,编译器的C#版本将是“官方Microsoft C#”,您可以使用它创建“自己的C#语言”。然后你可以创建一个用你自己的“C#语言”编写的编译器来编译自己或其他程序