合同式设计基于Hoare逻辑,通过前后条件和不变量的推理来证明程序的正确性。
使这种推理成为可能的语言的手段和先决条件是什么?
可以静态地检查它,还是它只是运行时断言的一种形式?
发布于 2016-03-07 15:19:41
在回答第一个问题时,设计或扩展支持DbC的语言似乎没有任何障碍。然而,DbC不仅向语言引入了断言,而且还引入了一组规则,这些规则告诉我们如何在存在(多个)继承和重声明的情况下组合这些断言。因此,除非语言工具知道如何执行注释,否则简单的注释无法轻松地转换为可执行代码。
至于第二个问题,最初通过合同设计的™是在埃菲尔引入的,实际上是为了运行时检查。随着时间的推移,出现了一些变化,我只想提及其中的一些变化:
Void目标(即NullReferenceException类型的例外是不可能的)。这项技术依赖于一些规则。为了使无效安全的编程变得可行,并且接近于常规程序员的推理,它们涉及某种形式的断言。例如,触发异常的方法在表单False中具有后置条件,以指示调用此类方法之后的任何代码都是不可访问的。然后编译器知道在这样的调用之后没有理由检查无效的安全规则,因为它永远不会被执行。https://softwareengineering.stackexchange.com/questions/311948
复制相似问题