繁体   English   中英

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

[英]How's Roslyn C# compiler bootstrapped?

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

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

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

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

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

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

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

我猜想已经使用了现有的C#编译器。 我的意思是,完全自举的编译器很不错,但在这种情况下并不是必需的。

读一读

http://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29

如果需要获得语言X的编译器(用X语言编写),则存在如何编写第一个编译器的问题。 在实践中用于解决这个鸡或鸡蛋问题的不同方法包括:

在语言Y中实现语言X的解释器或编译器.Niklaus Wirth报告他在Fortran中编写了第一个Pascal编译器。[引证需要] X的另一个解释器或编译器已经用另一种语言Y编写; 这就是Scheme经常被引导的方式。

但是对于Roslyn的细节,我猜想,用c#编译器(pre-Roslyn)构建然后用自己构建:)(前几次运行)一旦它稳定,他们probs只用Roslyn构建Roslyn :)

我还猜测它全部是自动化和单元测试的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM