【发布时间】:2014-05-06 01:21:12
【问题描述】:
我想知道今天的现代编译器,如 MS cc、gcc、clang、icc,是否使用相同编译器的当前版本构建了新版本?
因为当然有这个风险:
http://scienceblogs.com/goodmath/2007/04/15/strange-loops-dennis-ritchie-a/
http://c2.com/cgi/wiki?TheKenThompsonHack
相信参与上述编译器开发的每个人都知道这个问题,即代码由自身的早期版本注入编译器并无形传播。
现在真正的问题不是后门,而是更多关于代码生成正确性的问题,不是吗?如果在构建链中的某个地方由于纯错误而引入了一些变态扭曲,并且由于 Ken Thompson 的缺陷,即使编译器的源代码看起来不错,今天的编译器也会生成不正确的代码,该怎么办?
那么如果它们是自己建造的,它们如何保护自己呢?
【问题讨论】:
-
@DevSolar:
opinion based?认真的吗?你对完全可验证的 EJP 的评论有什么看法?你为什么不给回答的实施者一个机会呢?这个社区里有微软的人。我敢肯定也有 GCC 贡献者。 -
可能。怎么样:传送带系统是在工厂中使用传送带建造的吗?机器人是用机器人制造的(还是手工制造的)?计算机是用计算机设计的(还是在纸上绘制的)?
-
为了获得对编译器的信心,您将 (a) 使用来自不同制造商的多个编译器对其进行编译;这显然会产生不同的二进制文件,然后(b)用这些不同的二进制文件编译它,然后应该给出相同的二进制文件。那是一个可以编译它所用语言的编译器; COBOL 编译器可能不是用 COBOL 编写的。
标签: c++ c compiler-construction compilation