如何使用Roslyn C#编译器进行自举?

Ami*_*ira 5 c# compiler-construction compilation roslyn

我开始阅读关于"Roslyn"的新C#编译器,并想知道Roslyn编译器是如何编译的?
我明白为了拥有"自托管编译器"需要使用boostrapping,我想知道Roslyn编译器是如何"自举"的?

sep*_*p2k 8

如果尚未存在该语言的现有实现,则引导只是一个问题.在这种情况下,这很容易.

  1. 使用现有的C#编译器编译第一个版本的Roslyn
  2. 然后使用新编译的Roslyn构建重新编译它.
  3. 完成.

  • @SriramSakthivel只是不要在编译器中使用这些新功能(首先). (4认同)
  • 这对我们来说有点挑战 - 即使支持await的C#编译器已发布,但Roslyn编译器还不支持它.我们无法在IDE代码库中使用它,因为我们试图进行自托管.现在我们可以使用尚未发送到整个世界的功能,但它曾经是相反的! (3认同)

Ami*_*ira 6

根据Eric Lippert的说法,这就是C#团队实际上(不是猜测)完成的事情:

C#1.0到5.0编译器是用C++编写的.很长一段时间 - 超过一年 - 我们用C#编写了Roslyn C#编译器并用C#4.0编译它.(C#5.0是由一个姐妹团队并行开发的.)我们可以编译Roslyn编译器,然后右转并使用我们刚刚构建的编译器再次编译它,这是一个快乐的日子.

一件漂亮的商业案例提供引导通过的Mads托格森编译:

"在这里,最后是我们的价值主张:让它成为世界上只需要一个理解C#的代码库,由想要在代码上构建工具的每个人共享!"