2014-10-19 83 views
4

我想在C#中实现DBC。我面对它的规范和代码合同。
Spec#和Code Contract之间的区别是什么?代码合同和规范之间的差异#

+0

我认为规范编号和代码合同是围绕建筑合同的竞争想法(或类似但不同)。我不能确定,但​​我认为Code Contracts赢得了这场比赛。 – Prescott 2014-10-19 22:20:12

回答

4

这是从Code Contracts FAQs at Microsoft Research

待办事项代码契约有什么用规格#?

代码合同是来自Spec#项目的衍生产品。 Spec#的研究重点是在 继承,回调,别名和多线程的存在下理解对象不变量的含义。 Spec#是C#2.0版的 超集,并使用源级重写器将 合约编织到代码中。它使用验证条件生成和 定理证明器来进行Spec#代码的静态验证。但是 与维护对象 不变的所有复杂问题妥善处理不变价格:验证变得不平凡。这就是为什么 规范#还需要一个所有权规定,以知道哪些对象可能是别名或不能相互混淆的。

代码合同是从规范#学习的结果,什么工作和 什么没有。与规范#不同,代码契约是语言不可知的,因此可以跨所有.NET语言工作,从VB到C#到F#。重写器 适用于MSIL,因此不依赖于特定的编译器。它的 静态分析引擎使用抽象解释,这比验证更快,更可预测;此外,抽象 的解释推断环路不变量和方法合同,其中 有助于代码合同的采用和易用性。

因此,Code Contracts似乎是未来更受“支持”的工具。

+0

重要的是,“支持”仍然在这里引号。代码合同仍然被认为是一个alpha质量的研究项目,它没有对完全支持的产品进行严格的测试,偶尔也会中断。 – 2014-10-21 15:38:17

相关问题