排除将一种高级语言转换为另一种语言的编译器,编译为机器代码的编译器是否需要用汇编编写?
答案 0 :(得分:5)
编译器的源代码不需要在汇编中编写。例如,CPython编译器(很好,技术上的解释器)的一个很好的部分是用C语言编写的: http://en.wikipedia.org/wiki/Cpython
一开始,在有编译器之前,第一个编译器必须用汇编语言编写。但后来有人用这个编译器来编译自己的编译器。然后其他人使用这个编译器编译自己的编译器。依此类推。
这提出了“自举”的概念。引导编译器是用它打算编译的语言编写的编译器。 clang编译器可以编译C ++代码,但编译器本身是用C ++编写的!这是如何运作的?那么第一个clang编译器是由不同的编译器编译的(可能是g ++)。在clang编译器足够成熟之后,它能够编译自己的代码。现在,对clang编译器所做的任何更改都可以由clang编译器重新编译成另一个clang编译器!干净,是吗?
答案 1 :(得分:0)
编译器不是一个特殊的,神奇的程序。如果你眯着眼睛看,编译器就是一个程序,它将一个文本文件转换成另一个文本文件(好吧,一个二进制文件)。
关于程序可以实现的语言只有一个限制。如果您使用某种语言编写程序,那么该语言必须已经实现了编译器或解释器。因此,语言X的第一个编译器/解释器不能用X编写。(如果你想能够使用它,至少。)但这对编译器/解释器来说并不特殊;在有人实施X之前,你无法在X中有用地写任何东西。