2014-10-19 2 views
4

Я хочу реализовать DBC в C#. Я столкнулся с контрактом SpeC# и Code для него.
В чем разница между SpeC# и Code Contract?Различия между контрактом кода и спецификацией #

+0

Я думаю, что и контракты SpeC#, и Code Contracts были конкурирующими идеями (или похожими, но разными) вокруг контрактов на строительство. Я не могу быть уверен, но я думаю, что Code Contracts выиграли эту гонку. – Prescott

ответ

4

Это из Code Contracts FAQs at Microsoft Research:

Do Кодовые контракты имеют ничего общего с SpeC#?

Кодовые контракты являются побочным продуктом проекта SpeC#. Исследовательский центр Spec № понимает значение инвариантов объектов в присутствии наследования, обратных вызовов, псевдонимов и многопоточности. SpeC# является надмножеством C# v2.0 и использует перезаписывающий источник, чтобы сплести контракты в код. Он использует генерацию условий проверки и теоретический прокси для статической проверки кода SpeC#. Но , работающий со всеми сложными проблемами вокруг поддерживающего объекта У инвариантов есть цена: проверка становится нетривиальной. Вот почему SpeC# также нуждается в дисциплине владения, чтобы знать, какие объекты могут псевдоним или не могут друг друга.

Код Контракты являются результатом обучения от SpeC#, что работает, и , что нет. В отличие от SpeC#, Code Contracts являются агностиками языка, и , таким образом, работают на всех языках .NET, от VB до C# до F #. Переписывающий работает на MSIL и поэтому не имеет зависимости от конкретных компиляторов. В его статическом аналитическом механизме используется абстрактная интерпретация, которая намного больше и предсказуема, чем проверка; Кроме того, аннотация интерпретирует интерпретации циклов и контракты метода, которые помогает в принятии и простоте использования кодовых контрактов.

Таким образом, похоже, что контракты с кодом будут более активным инструментом, поддерживающим его.

+0

Важно, чтобы «поддерживаемые» остались в кавычках. Кодовые контракты по-прежнему считаются научно-исследовательским проектом альфа-качества, он не имеет строгого тестирования полностью поддерживаемого продукта и иногда прерывается. –