Он имеет в виду теоретическое доказательство.
Нет ничего, что помешало бы открытому или коммерческому сообществу реализовать свои собственные. Классы контрактов являются частью BCL и тривиально легко добавлять, скажем, к Mono. «Мы должны будем сделать доказательство теоремы, если мы хотим статически проверять вещи.
Проник не является частью компилятора. Он в основном работает следующим образом:
- Скомпилировать версию двоичного файла с
CONTRACTS_FULL
. Это испускает все атрибуты Контракта и вызовы статическим методам класса Contract
.
- Загрузите сборку «только для отражения» и проанализируйте все байтовые коды метода. Подробный анализ потока с информацией о состоянии позволит показать определенные контракты «всегда верно». Некоторые из них будут «известны в какой-то момент». Другие будут «неспособны статически доказать контракт».
По мере того, как инструмент становится лучше, он будет давать предупреждения о каждом контракте, чтобы в конечном итоге предложить аналогичные результаты проверки версии Microsoft.
Редактировать: Человек, если отражатель был открыт, это было бы здорово для этого. Реализация первого прохода, безусловно, может работать как плагин. Таким образом, логика проверки может быть сконструирована, не беспокоясь о том, как загружаются двоичные файлы. Как только он окажется функциональным (получите его?), Логика может быть извлечена и построена для работы с деревьями синтаксиса, создаваемыми другим загрузчиком сборок (который является открытым исходным кодом). Важная/новая вещь здесь - логика проверки - загрузчик сборок был сделан несколько раз, и ничто не изменилось эффектно для этого использования.
жандарм уже имеет значительную инфраструктуру для загрузки сборок и анализа байт-кода: http://www.mono-project.com/Gendarme –