Это интересный вопрос.
Хммм, заставляет меня думать ... "кодовые контракты" .. Казалось бы, возможно, что статически (во время компиляции) технически возможно, чтобы определенные контракты кода были доказаны выполненными. Если бы это было так, и у вас была такая опция проверки компиляции, вы могли бы указать эти контракты, даже не проверяя условия во время выполнения.
Требуется, чтобы сам код клиента был проверен по контактам кода.
И, конечно, это неизбежно будет сильно зависеть от типа условий, которые вы хотите написать, и, вероятно, будет возможно доказать эти контракты только до определенной точки (как далеко вы бы подняли возможный граф вызовов). идти?). Помимо этого, валидатору, возможно, придется начинать и настаивать на том, чтобы вы поместили проверку во время выполнения (или, возможно, подавление предупреждения проверки?).
Все просто пустые домыслы. Меня заставляет задуматься немного больше о контрактах кода C # 4.0. Интересно, есть ли в них поддержка статического анализа? Вы проверили их? Я имел в виду, но изучение F # в данный момент является приоритетным!
Обновление:
Прочитав немного об этом, похоже, что в C # 4.0 действительно есть «статическая проверка», а также двоичный перезаписывающий модуль (который заботится об изменении выходного двоичного файла так, чтобы проверки условий до и после выполнялись в соответствующих место)
Что не ясно из моего чрезвычайно быстрого прочтения, так это то, можете ли вы отказаться от бинарного переписывания - я думаю, что вам действительно нужно использовать контракты кода, иметь метаданные ( или код) для контрактов, поддерживаемых в различных сборках, но используйте only статический контролер по крайней мере для выбранного подмножества контрактов, так что теоретически вы получаете проверенную безопасность без какого-либо удара во время выполнения.
Вот ссылка на статью о кодовых контрактах