«Не-Эйфелевой» часть вашего вопроса интересна. Контракты имеют весь смысл, когда есть поддержка для них на языке программирования, иначе это просто хороший синтаксис для комментариев.
Это приводит нас к языкам, поддерживающим контракты. Я знаю, что из трех, кроме 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. Я уверен, что вы могли бы получить предварительную версию, если бы вас это заинтересовало. Не стесняйтесь обращаться к человеку, указанному как контакт на этой последней веб-странице.
Язык программирования D имеет встроенную поддержку контрактов. Существуют библиотеки для добавления контрактов на Python и Ruby, и даже C/C++ имеет некоторую поддержку через GNU Nana. Но я не знаю, действительно ли кто-то их использует. Меня особенно интересуют Java и C# /. NET. –