繁体   English   中英

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

[英]Differences between Code Contract and Spec#

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

这来自Microsoft ResearchCode Contracts FAQs

代码合同是否与Spec#有关?

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

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

因此,代码合约似乎将成为未来更“支持”的工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM