如果你编译一个新版本的编译器,你应该迭代编译多少次?
首先:使用旧版本编译新版本的compiler1。
第二:使用新编译的one1编译新的version2,以便对二进制文件应用新的优化并修复旧编译器中不存在的bug。
现在是第三名了?重新编译,使用2删除任何潜在的bug,这些bug可能是由于buggy的错误编译而导致的1中的bug ...?
...but如果你是偏执狂,也许into 1引入的bug也会导致2有点bug...?
超过2有意义吗?
发布于 2010-03-11 09:22:39
当编译n
的结果与编译n - 1
的结果相同时,我会停止编译;此时您已经达到了稳定状态。
发布于 2010-03-11 09:26:24
如果您愿意,引导OCaml的说明将邀请您继续until you have reached a fixpoint。假设新的编译器只修复bug而不引入新的bug,您可能需要多次引导才能使自诱导编译器bug消失。
您也可能在没有修复您试图修复的bug的情况下到达固定点,因为bootstrap编译器中存在的bug会使其在引导版本中永久存在(一种非自愿的Ken Thompson)。这在OCaml的历史上至少发生过一次。当他们注意到这一点时,开发人员手动修复汇编代码,以便获得正确的编译器,将正确的源代码转换为正确的编译器。
发布于 2010-03-11 09:28:29
通常,你应该在没有标准库的情况下编译一次,然后得到编译器的部分工作版本。随后,您需要使用标准库支持重新编译:这使您能够获得更多的功能(比如printf检查和libgcc内容)。
我不知道后续的重新编译,但感谢您的信息:)
https://stackoverflow.com/questions/2423728
复制