代码合同与规范之间的差异#

时间:2014-10-19 21:52:51

标签: c# code-contracts design-by-contract spec#

我想在C#中实现DBC。我面对的是Spec#和Code Contract Spec#和Code Contract有什么区别?

1 个答案:

答案 0 :(得分:4)

这来自Code Contracts FAQs at Microsoft Research

  

代码合同是否与Spec#?

有关      

Code Contracts是Spec#项目的衍生产品。 Spec#的研究重点是   在存在的情况下理解对象不变量的含义   继承,回调,别名和多线程。 Spec#是一个   C#v2.0的超集,并使用源级重写器编织   合同进入代码。它使用验证条件生成和   用于静态验证Spec#代码的定理证明器。但   处理维护对象的所有复杂问题   不变量有一个价格:验证变得非常重要。这就是为什么   Spec#还需要一个所有权纪律来了解哪些对象可能   别名或不能互为别名。

     

Code Contracts是从Spec#学到什么有用的结果   什么不是。与Spec#不同,Code Contracts与语言无关,并且   因此适用于所有.NET语言,从VB到C#到F#。重写者   适用于MSIL,因此不依赖于特定的编译器。它的   静态分析引擎使用抽象解释,这是很多   比验证更快,更可预测;还抽象   解释推断循环不变量和方法契约,其中   有助于采用和易于使用代码合同。

因此,似乎代码合同将得到更多支持'工具继续前进。