我看过http://referencesource.microsoft.com/的源代码,似乎所有的源代码都是用C#编写的。
我还查看了新的C#编译器平台(Roslyn)的源代码,它也是用C#编写的。那件事怎么可能?C#语言编译器是用C#编写的吗?还是我漏掉了什么明显的东西?如果C#编译器是用C#编写的,那么它是如何工作的呢?
发布于 2014-12-17 04:24:58
最初的C#编译器不是用C#编写的,而是用C和C++编写的。新的罗斯林编译器是用C#编写的,但最初是用旧的编译器编译的。一旦新的编译器完成,它就能够编译自己的源代码:这就是所谓的bootstrapping。
发布于 2014-12-17 08:06:01
编译器是实用程序-它们将编程语言文本转换为机器代码。如果编程语言描述的软件恰好是一个编译器.....
编译器还可以为其他架构生成机器码。例如,苹果使用基于英特尔的服务器机架编译iOS。编译器不必运行它生成的ARM代码,只需将其写入磁盘即可。
编译器2.0必须用编译器1.0可以处理的语言编写,但它肯定可以创建具有更新功能的编译器2.0,比如优化。然后,您可以使用编译器2.0重新编译源代码,并生成更好的版本。同样,编译器不知道它正在生成自己的另一个版本。
如果我们回到时间的迷雾中足够远,那么我们确实达到了没有编译器的地步--高级语言的第一次迭代。然后我们必须拿出铅笔和操作码手册,并在汇编中编写第一个。我们是如何编写第一个汇编器的?直接输入机器代码,可能在打孔的纸带上,或前面板上的翻转开关上。
发布于 2014-12-17 14:06:32
编译器只是一个程序,就像任何其他程序一样。它并没有什么神奇或特别之处。它需要一些输入并产生一些输出。在本例中,输入恰好是C#,输出恰好是CIL,但这与输入是一系列纳税申报单,输出是一份报告没有什么不同。
https://stackoverflow.com/questions/27513234
复制相似问题