这一直困扰着我。 gcc / g ++如何编译自己? 我猜测每个修订版都使用以前构建的修订版进行编译。这是真的?如果是的话,是否意味着最古老的g ++ / gcc版本是用汇编语言编写的?
答案 0 :(得分:173)
最古老的GCC版本是使用另一个C编译器编译的,因为编写它时还有其他版本。有史以来第一个C编译器(约1973年,IIRC)是在PDP-11汇编中实现的,或者是在它之前的B编程语言中实现的,但无论如何B编译器都是用汇编语言编写的。 同样,第一个C ++编译器(CPre / Cfront,1979-1983)可能首先在C中实现,然后用C ++重写。
编译GCC或任何其他自托管编译器时,构建的完整顺序为:
此过程称为bootstrapping。它测试编译器编译自身的能力,并确保生成的编译器使用它自己实现的所有优化构建。
编辑:Drew Dormann在评论中指出了Bjarne Stroustrup对earliest implementation of C++的描述。它是用C ++实现的,但是被Stroustrup称为从C ++到C的“预处理器”的翻译;根据他的定义,它不是一个完整的编译器,但C ++仍然是用C语言引导的。