编译器是用什么语言编写的?

the*_*mer 7 language compile

编译器是否用与它们编译的语言不同的语言编写?

Kei*_*thB 17

编译器涉及三种语言:被编译的语言(源语言)、被编译成的语言(目标语言)和编译器所用的语言(实现语言)。一般来说,实现语言要么是像 C 或 C++ 这样的通用语言,要么是源语言。目标语言可以是某种适合于已经存在的源语言或汇编语言的语言。有时会有自定义的中间语言,因此可以有多种语言的通用后端。这就是 gcc 的工作方式。有一个适用于 C、C++、Fortran、Ada 和其他可能的前端。每一个都被编译成相同的中间语言,然后被编译成特定于体系结构的汇编语言。

如果编译器使用与其编译的语言相同的语言编写,则编译器称为self-hosting。如果一种语言是新语言,那么它已经不存在编译器,这意味着它的第一个编译器不能是自托管的(否则,第一个编译器将如何编译?)。因此,新语言的任何编译器的第一次迭代总是用不同的语言编写。话虽如此,自托管更方便;作者只需要精通一种语言。