簡體   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