我想在C#中实现DBC。我面对的是Spec#和Code Contract Spec#和Code Contract有什么区别?
答案 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,因此不依赖于特定的编译器。它的 静态分析引擎使用抽象解释,这是很多 比验证更快,更可预测;还抽象 解释推断循环不变量和方法契约,其中 有助于采用和易于使用代码合同。
因此,似乎代码合同将得到更多支持'工具继续前进。