我想在C#中實現DBC。我面對它的規範和代碼合同。
Spec#和Code Contract之間的區別是什麼?代碼合同和規範之間的差異#
4
A
回答
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
相關問題
- 1. 聚合和合成之間的代碼差異
- 2. scanf的寬度規範和scanf_s之間的差異
- 3. 機器代碼和處理器代碼之間的差異
- 4. 本地和遠程JSON代碼之間的代碼差異
- 5. 執行代碼之前和規範
- 6. 代碼合同和異常拋出差異
- 7. 代碼合同和異步
- 8. /和/ **之間的差異
- 9. PHP之間的差異()和[]
- 10. '//'和'///'之間的C++差異
- 11. VBA:&和+之間的差異
- 12. 之間的差異和::: ++
- 13. XAML和C#代碼之間的UI差異
- 14. 源代碼和「檢查元素」之間的差異
- 15. 頁面源代碼和檢查元素i之間的差異
- 16. 運算符「==」和「=」之間的差異運算符「==」和「=」之間的差異「==」和「=」
- 17. PHP:差異之間 - >和::
- 18. 差之間2代碼段
- 19. 合同異步和同步代碼
- 20. 在規範中組合C#代碼和數據庫代碼
- 21. SSIS-合併和合並之間的差異加入
- 22. 子聚合和嵌套聚合之間的差異
- 23. 在我當前的未被代碼的代碼和同一分支上的遠程頭之間的差異
- 24. 不同JavaScript模式之間的差異
- 25. 觸發器中同步和異步復位之間的差異
- 26. Htaccess - 和*之間的差異:。*和。+
- 27. 總和和+之間的差異?
- 28. Url.Action和Html.RenderActionLink和Html.RenderAction之間的差異
- 29. 聲明和決策覆蓋範圍之間的差異
- 30. Ruby範圍:MyClass.new和:: MyClass.new之間的差異
我認爲規範編號和代碼合同是圍繞建築合同的競爭想法(或類似但不同)。我不能確定,但我認爲Code Contracts贏得了這場比賽。 – Prescott 2014-10-19 22:20:12