2009-10-28 2 views
5

Мне любопытно, сколько проектов по контракту используется на практике за пределами сообщества Эйфеля. Существуют ли какие-либо активные проекты с открытым исходным кодом, которые используют дизайн за контрактом?Какой самый широко используемый проект с открытым исходным кодом, который использует дизайн по контракту?

Или, чтобы переформулировать вопрос в одном, что имеет один ответ: какой самый широко используемый (неэфирный) проект с открытым исходным кодом, который использует дизайн за контрактом?

ответ

4

«Не-Эйфелевой» часть вашего вопроса интересна. Контракты имеют весь смысл, когда есть поддержка для них на языке программирования, иначе это просто хороший синтаксис для комментариев.

Это приводит нас к языкам, поддерживающим контракты. Я знаю, что из трех, кроме Eiffel:

  • ESC/Java добавляет контракты на Java с использованием языка с именем JML.
  • .NET contracts для всех языков .NET (работает на уровне байт-кода)
  • Frama-C добавляет контракты на C с использованием языка ACSL

Первые два имеют исполняемые контракты. Преимущества: могут использоваться как утверждения времени выполнения. Недостатки: отсутствие выразительной способности полностью указать, что делает функция в контракте. Вы можете в основном писать только проверки здравомыслия.

С другой стороны, контракты ACSL более выразительны и не исполняются. Они позволяют полностью указать, что функция сортировки всегда должна заканчиваться и оставлять те же элементы, что и в исходном массиве по порядку. Контракты ACSL могут использоваться для статического анализа, особенно для самых слабых предварительных вычислений в стиле Hoare.

И только если вы действительно знакомы с последним (отказ от ответственности: я работаю над Frama-C, но часть ACSL - это работа многих людей, некоторые из которых внесли гораздо больше, чем я), я могу только упомянуть «ACSL на пример», библиотеку с открытым исходным кодом C с контрактами ACSL, которые в настоящее время разрабатываются Fraunhofer FIRST. Он еще не выпущен, но он будет частью проекта Device-soft. Я уверен, что вы могли бы получить предварительную версию, если бы вас это заинтересовало. Не стесняйтесь обращаться к человеку, указанному как контакт на этой последней веб-странице.

+2

Язык программирования D имеет встроенную поддержку контрактов. Существуют библиотеки для добавления контрактов на Python и Ruby, и даже C/C++ имеет некоторую поддержку через GNU Nana. Но я не знаю, действительно ли кто-то их использует. Меня особенно интересуют Java и C# /. NET. –

Смежные вопросы