关于标准ML编译器,我的问题是,尽管ML本身是正式定义的,可以证明程序的确定性计算,但编译器本身不是用C编写的吗?C不是正式定义的,至少不是全部?我想我的问题是,假设我们用标准ML编写了一个程序,可以证明它的正确性,我们怎么知道C编写的编译器没有以一种可能改变结果的方式执行呢?
谢谢
发布于 2013-12-06 15:23:02
这是一个责任问题。不管您的SML运行时或编译器是用哪种语言编写的(SML是一种规范,而SML编译器做的是而不是,它可以是任何其他语言),您的责任是使您的SML程序按照SML规范工作。如果SML编译器是错误的,那是其他人的问题。
您是否考虑过处理器、SML运行时的编译指令?谁正式证明了这一点?那么在处理器的晶体管中移动的电子呢?谁告诉他们按照处理器设计所依据的物理“定律”工作?谁正式证明了这些法律?
这不是你的问题。
这就是说,在撰写本文时,有一个用Coq,CompCert编写的C编译器。这个编译器为输入语言(大部分C语言)和目标汇编语言定义了形式语义。只要SML实现设计为在编译时使用这种风格的C,则输入语言不必完全是C。如果您使用CompCert的输入语言实现了SML,并且尽可能地遵循正式定义,那么您将拥有一个SML解释器,它的信任链几乎不间断地下降到程序集。
发布于 2013-12-06 15:24:03
仅仅因为你可以写坏的C程序并不意味着你必须写。完全有可能编写正确的C程序,并从C语言规范中推断程序执行正确。
https://stackoverflow.com/questions/20435282
复制