假设您需要C编译器。鉴于该程度的编译器的复杂性,优选地编写该编译器。最多,C编译器将以C编写,但这需要C编译器开始。如果在制作一个编译器的早期迭代之一的错误时,它可以传播。编译器如何确保这不会发生这种情况?显然,没有任何代码完美无瑕,甚至处理器都没有,但如果你没有以某种方式测量稳定性,你甚至不知道你的编译器是否稳定。提出了什么假设,它是如何合理的?我想象它也是依赖的架构。

编辑:通过稳定性,我的意思是代码按预期运行。

有帮助吗?

解决方案

编译器编写者使用的单词是“一致性”。正确实现语言规范的编译器是符合。有公司作为业务的一部分,销售各种标准的一致性测试,包括编程语言。

通过事故通过编译器代来传播的错误是罕见的(尽管它发生在目的中)。

其他提示

它恰好编译器包含微妙的错误。没有公然的错误,因为将检测到斑点错误并修复。

由具有微妙错误的编译器编译的编译器将往往具有明显的错误。它们很容易被检测,因为它们是如此公然的。他们将难以解决,因为这些公然的错误将由完全精细的源代码制作,因此想要修复的人会很难找到真正的问题。

解决方案是制作足够质量的编译器,错误的错误是非常罕见的,并且在编译器中非常罕见。我们还希望编译器错误影响非常复杂的代码,因此编译器编写器应该编写简单的代码并遵循常见的编码模式。

一个答案是测试,测试,测试。例如。GCC随着每次构建编译器时检查的一组越来越多的一组测试。许多编译器都需要通过所谓的三重测试:使用编译器A编译编译器C的代码,给出C_1;使用C_1编译C_2,使用C_2编译C_3。现在C_2和C_3被C编译,应该是相等的。如果没有,腥味正在发生。

看看everher的“嵌入在学术界”的博客,他是在周围工作的人之一LLVM编译器工具,并定期触摸用于使编译器更好的工具和技术(或自动化它的建筑物)。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top