为什么 C 语言的编译器是用 C 语言编写的?[关闭]

Why is C language's compiler written in C? [closed]

提问人:snir10 提问时间:11/16/2023 最后编辑:500 - Internal Server Errorsnir10 更新时间:11/16/2023 访问量:111

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

7天前关闭。

最近,我一直在学习更多关于硬件和软件如何协同工作的知识。在这个过程中,我了解到 C 语言的编译器是用 C 语言编写的,带有可选的汇编代码。如果我错了,请纠正我,但是由于汇编是比 C 更低级的编程语言,因此在汇编中编写 C 的编译器以获得更好的性能不是更好吗?我知道编写汇编代码很乏味,那么这是否是编写 C 编译器仅使用少量汇编代码的原因之一?还是有其他因素?

C 汇编 编译器构造 低级

评论

5赞 paddy 11/16/2023
C 语言比汇编语言更具可移植性。除了极端的受虐狂之外,没有人愿意用汇编语言编写 C 编译器来榨取最后一丝性能并牺牲其他一切。一个好的 C 编译器在调整生成的汇编方面做得非常好。事实上,它比(大多数)人类做得更好。
7赞 John Kugelman 11/16/2023
思想实验:这个想法可以应用于任何程序。“在汇编中编写 Chrome/Linux/GTA5/fill-in-the-blank 以获得更好的性能不是更好吗?”我们为什么不把所有东西都写在汇编中呢?如果你琢磨,你可能会明白为什么 gcc、clang 等没有选择那条路。
3赞 ShadowRanger 11/16/2023
此外,编译器性能虽然并非不重要,但并不那么重要。编译与数据压缩一样,理想情况下是一个发生频率远低于使用结果的过程;如果编译器运行速度稍慢,但更容易向其添加新功能以改进生成的代码(这最终会改进编译器本身!),这显然是值得的。
4赞 Peter Cordes 11/16/2023
C 编译器是庞大的代码库,其中大部分是与目标无关的优化传递。此外,能够构建一个交叉编译器以在一个 ISA 上运行,但为另一个 ISA 编译通常是一个有用的属性,这是您无法从 asm 中获得的。此外,没有太多的速度可以获得。特别是在大型代码库中,C 编译器在内联和利用基于常量值的特殊情况方面做得很好。在 asm 中手动执行相同的操作会使代码无法维护,这与您在此处想要的相反。我这么说,即使我经常可以在 GCC/clang asm 中发现错过的选择。
4赞 ShadowRanger 11/16/2023
我还要指出的是,虽然在某些领域,原始调整汇编是值得的(通常涉及使用特定于处理器的矢量化指令等手动调整的主要数字运算代码),但对于绝大多数代码来说,可用的收益是微乎其微的,我只相信世界上一小部分程序员实际上能够胜过编译器。平均而言,我预计人工编写的汇编会比编译器生成的代码差得多(更错误、更慢等)。

答: 暂无答案