gcc C编译器是用C本身编写的吗?

eup*_*a83 81 c compiler-construction gcc

gcc C编译器是用C本身编写的吗?还是用大会写的?如果编译器是用C编写的,那么用于编译编译器代码的编译器是什么?

Rob*_*ier 91

gcc的特定历史记录在GCC Wiki上给出.更一般的一点是,编译器通常最初是用其他编译器编译的,直到它们足够强大以便自己编译.或者,可以编写一个基本编译器,它可以在汇编程序中处理您的功能的子集,并从那里进行构建.但同样,这几乎不再需要了.有许多可用的编译器,有多种语言版本.即使斯蒂芬约翰逊正在编写pcc(最早的C编译器之一),也有可用的B编译器以及许多其他语言.gcc最初选择了几个编译器来构建它,而RMS说他至少在初始开发期间使用了Pastel编译器.

请记住,不要求用C语言编写C编译器.如果你愿意,可以用Perl编写它.不要求最初在该平台上编写给定平台的编译器(嵌入式系统几乎总是在其他系统上编译).所以有很多方法可以让自己自我启动.

这个问题与引导编译器的第一个实例有一些有趣的微妙之处.如果你非常聪明,你可以利用那个引导来做一些令人难以置信的,辉煌的和可怕的事情.

  • Ritchie链接的+1,这总是一个很好的阅读.:) (11认同)
  • 一些语言组认为能够自我编译是一种荣誉.最近,Go朝这个方向大力推进.另一方面,Swift显然没有计划在Swift中重写他们的编译器.但请注意,GCC始终用C语言编写.它只是与其他编译器一起编译的.但是如果所有的C编译器都是用BCPL编写的,那就无法解决任何有关偏执狂的问题.它只是将问题推回一步.(通过编译GCC w/clang,你会得到同样的偏执狂好处.) (4认同)
  • 除此之外,如果你想真正地、可证明地解决偏执问题,你就必须[找到海底龟](https://blog.dave.tf/post/finding-bottom-turtle/)。 (2认同)

Dan*_*ite 51

最初它是用一些汇编语言编写的,然后就开始自食了.

  • 我虽然这个词是bootstrap. (16认同)
  • 哈哈哈几个星期前我读过这篇文章,并认为你不在乎这个表达,没想到它是标准的.好先生先生!https://en.wikipedia.org/wiki/Eating_your_own_dog_food (5认同)
  • 对于原始引导程序,我还没有看到使用汇编程序对RMS的任何引用。您的来源是什么?他还有其他几个编译器需要引导,因此似乎需要大量工作。 (2认同)