可以在编译时强制执行“按合同设计”检查吗?

时间:2018-12-09 18:34:54

标签: design-by-contract eiffel

阅读Design by Contract tutorial时,我偶然发现了以下一行:

  

埃菲尔铁塔的合同不仅仅是一厢情愿。可以在运行时在编译选项的控制下对其进行监视。

后面有说明,它们将在失败时引发异常。我认为所有require ensure invariant all检查都可以在运行时执行或关闭。它是否正确?还是可以使用适当的编译器选项在编译时强制执行它们?

1 个答案:

答案 0 :(得分:1)

有一个工具AutoProof用于在编译时验证合同。它执行一些转换,最后以一个SMT实例结束,该实例由Z3 SMT求解器检查,以判断是否所有断言都成立。从简短的introduction开始,使用它需要很多注释。尽管如此,还是使用该工具来验证Base2(一组容器类),类似于 Base 库的标准类。合同依赖于相应论文中描述的所谓的语义协作技术(请在自动证明page上查找出版物)。

正在进行一些research work来简化AutoProof所采用的技术,解决现有问题,使其适应void-safe系统和SCOOP(简单并发面向对象编程)的使用。截至撰写本文时,该技术仍处于研究阶段,尚未准备好在生产环境中首次使用。主要障碍是使用该技术所需的复杂性和特殊培训。但是,基本思想非常笼统,可以在教学过程中使用该工具。