gcc / g ++是如何引导的?

时间:2012-02-24 10:52:57

标签: c++ c compiler-construction

这一直困扰着我。 gcc / g ++如何编译自己? 我猜测每个修订版都使用以前构建的修订版进行编译。这是真的?如果是的话,是否意味着最古老的g ++ / gcc版本是用汇编语言编写的?

1 个答案:

答案 0 :(得分:173)

最古老的GCC版本是使用另一个C编译器编译的,因为编写它时还有其他版本。有史以来第一个C编译器(约1973年,IIRC)是在PDP-11汇编中实现的,或者是在它之前的B编程语言中实现的,但无论如何B编译器都是用汇编语言编写的。 同样,第一个C ++编译器(CPre / Cfront,1979-1983)可能首先在C中实现,然后用C ++重写。

编译GCC或任何其他自托管编译器时,构建的完整顺序为:

  1. 使用现有的C编译器构建新版本的GCC
  2. 使用您刚刚构建的GCC重新构建新版本的GCC
  3. (可选)重复步骤2以进行验证。
  4. 此过程称为bootstrapping。它测试编译器编译自身的能力,并确保生成的编译器使用它自己实现的所有优化构建。

    编辑:Drew Dormann在评论中指出了Bjarne Stroustrup对earliest implementation of C++的描述。它是用C ++实现的,但是被Stroustrup称为从C ++到C的“预处理器”的翻译;根据他的定义,它不是一个完整的编译器,但C ++仍然是用C语言引导的。