用哪种语言编写的C#编译器?

我查看了http://referencesource.microsoft.com/上的源代码,看起来所有的源代码都在C#中。

我还查看了新的C#编译器平台( Roslyn )的源代码,它也在C#中。 这怎么可能? 用C#编写C#语言编译器吗? 还是我错过了明显的东西? 如果C#编译器是用C#编写的,那么它是如何工作的?

原来的C#编译器不是用C#编写的,而是用C和C ++编写的。 新的Roslyn编译器是用C#编写的,但最初是用旧编译器编译的。 一旦新的编译器完成,它就能够编译自己的源代码:这被称为引导 。

编译器是实用程序 – 他们将编程语言文本转换为机器代码。 如果编程语言描述的软件恰好是一个编译器…..

编译器也可以为其他架构生成机器码。 例如,Apple使用基于Intel的服务器机架编译iOS。 编译器不必运行它生成的ARM代码,只需将其写入磁盘即可。

编译器2.0必须使用编译器1.0可以处理的语言编写,但它肯定能够创build编译器2.0,并具有诸如优化等新function。 然后,您可以使用编译器2.0重新编译源代码,并创build一个更好的版本。 再次,编译器不知道它正在制造另一个版本。

如果我们走得足够远,回到时间的迷雾之中,那么我们确实达到了没有编译器的地步 – 这是高级语言的第一次迭代。 然后,我们必须拿出铅笔和操作码书,并写出第一个assembly。 我们如何编写第一个汇编程序? 直接input机器码,可能是打孔的纸带,或者前面板上的翻转开关。

编译器就像任何其他程序一样。 没有什么不可思议的或特殊的。 它需要一些input并产生一些输出。 在这种特殊情况下,input恰好是C#,输出恰好是CIL,但是与input是一系列纳税申报表并且输出是一个报表没有什么不同。