【问题标题】:How's Roslyn C# compiler bootstrapped?Roslyn C# 编译器是如何引导的?
【发布时间】:2015-06-19 23:43:15
【问题描述】:

我已经开始阅读新的 C# 编译器“Roslyn”,并且想知道 Roslyn 编译器是如何编译的?
我知道需要boostrapping 才能拥有"self hosting compiler",我想知道Roslyn 编译器是如何“引导”的?

【问题讨论】:

标签: c# compiler-construction compilation roslyn


【解决方案1】:

只有在该语言还没有现有实现的情况下,引导才是一个问题。在这种情况下有,所以很容易。

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

【讨论】:

  • 语言中添加新关键字时,如何编译?因为我们还没有理解新标记的编译器? Originally asked here
  • @SriramSakthivel 只是不要在编译器中使用那些新功能(一开始)。
  • 傻我 :) 这很容易 :)
  • 这对我们来说有点挑战——尽管支持 await 的 C# 编译器已经发布,但 Roslyn 编译器还不支持它。我们无法在 IDE 代码库中使用它,因为我们试图实现自托管。现在我们可以使用我们尚未发布到全世界的功能,但它曾经是相反的!
【解决方案2】:

C# 团队实际上(不是猜测)就是这样做的,according to Eric Lippert:

C# 1.0 到 5.0 编译器是用 C++ 编写的。很长一段时间——一年多——我们用 C# 编写 Roslyn C# 编译器,并用 C# 4.0 编译它。 (C# 5.0 正在由一个姊妹团队并行开发。)我们可以编译 Roslyn 编译器,然后转身使用我们刚刚构建的编译器再次编译它的那一天,那是快乐的一天。

Nice piece 关于 Mads Torgersen 引导编译器的商业案例:

“这就是我们的价值主张:让世界上只需要一个理解 C# 的代码库,供所有想要通过代码构建工具的人共享!”

【讨论】:

    【解决方案3】:

    我猜想现有的 C# 编译器已用于此目的。我的意思是,一个完全自举的编译器很好,但在这种情况下并不是必需的。

    【讨论】:

      【解决方案4】:

      阅读

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

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

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

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

      我也猜想它全是自动化和单元测试的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-19
        • 2016-03-12
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多