Контрактное программирование и компиляторы C++2a

Я заинтересован в изучении недавно принятого контрактного программирования для C++20 для целей обучения и исследования.

Когда я ищу поддержку компилятора, я разочарован, что не нашел. Как gcc, так и clang совершенно ясно, что они не поддерживают эту функцию в своем режиме --std=c++2a.

Поскольку одобрение было получено совсем недавно, я не слишком удивлен, что современные компиляторы не поддерживают точно предложенную семантику. Что меня больше всего удивляет, так это то, что нет абсолютно ничего, даже специфичного для компилятора расширения, которое могло бы имитировать, пусть и ограниченно, ту же функцию.

Я ожидал, что комитет C++ будет рассматривать только функции, которые зарекомендовали себя в полевых условиях, как правило, с помощью компилятора или целевых расширений. Одобрение этой функции для C++20 предполагает, что эта функция должна быть где-то доступна. Но пока найти не удалось.

Есть ли способ поэкспериментировать с контрактным программированием на С++ в настоящее время? даже используя набор расширений для компилятора?


person Cyan    schedule 11.12.2018    source источник
comment
Его грубая реализация находится в CppCoreGuidelines библиотеке поддержки здесь: github. com/Microsoft/GSL/blob/master/include/gsl/gsl_assert Я сделал похожие макросы и использую их так же, как assert. Или вы можете просто использовать assert.   -  person Galik    schedule 11.12.2018
comment
Ваша ссылка теперь указывает на удаленную страницу. Было ли это контрактное программирование действительно приемлемым? Если это так, я думаю, он был бы перемещен или, возможно, будет в следующей версии C++.   -  person Alexis Wilke    schedule 26.03.2021
comment
@Alexis: нет, я считаю, что в конечном итоге он был удален на том основании, что зависимость функции от режима компиляции (анализ, отладка, выпуск) была слишком разрушительной, поскольку такой концепции больше нигде нет.   -  person Cyan    schedule 27.03.2021


Ответы (2)


Вы можете попробовать эту экспериментальную реализацию контрактов в Clang.

person r3mus n0x    schedule 11.12.2018

На собрании WG21 в июле 2019 года в Кельне было принято решение удалить контракты из рабочего проекта C++20. См. предложение Николая Йосуттиса P1823 здесь.

person user2023370    schedule 23.09.2019