【问题标题】:Is it possible to enforce Design by Contract checks at compile time?是否可以在编译时强制执行按合同设计的检查?
【发布时间】:2018-12-09 18:34:54
【问题描述】:

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

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

随后解释了它们在失败时会抛出异常。这让我觉得所有的 require ensure invariant all 检查可以在运行时执行或关闭。它是否正确?或者它们也可以在编译时使用适当的编译器选项强制执行?

【问题讨论】:

    标签: design-by-contract eiffel


    【解决方案1】:

    有一个工具AutoProof 用于在编译时验证合约。它执行一些转换,最终得到一个 SMT 实例,该实例由 Z3 SMT 求解器检查,该求解器告诉所有断言是否成立。从简短的introduction 可以看出,使用它需要相当多的注释。然而,该工具用于验证Base2,一组容器类,类似于 Base 库的标准类。合同依赖于相应论文中描述的所谓语义协作技术(在 AutoProof page 中查找 Publications)。

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

    【讨论】:

      猜你喜欢
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      相关资源
      最近更新 更多