Open Neargye opened 3 years ago
yndx-antoshkka 10 апреля 2019, 22:26 Спрошу в рассылках, кажется что проблема не обсуждалась.
Andrey Davydov 10 апреля 2019, 23:01 А что мешает этому в текущей версии стандарта? Корутины это обычные функции.
yndx-antoshkka 10 апреля 2019, 23:10 Andrey Davydov, лично мне не очень понятно:
Надо почитать стандарт.
Andrey Davydov 11 апреля 2019, 0:10 yndx-antoshkka, в стандарте очень мало что специфицировано про контракты: http://eel.is/c++draft/dcl.attr.contract. Кажется, что для проверки предъусловия тело функции вообще не нужно, т.е. эти проверки можно вставлять в место вызова, где даже не известно, что вызываемая функция является корутиной.
Andrey Davydov 11 апреля 2019, 0:20 Поэтому для меня очевидно, что predondition должно проверяться в момент создания корутины, а не в момент первого пробуждения. Скажем корутина пораждаящая генератор не будет пробуждена, если никто не запросит значение из генератора, но это же не значит, что можно нарушать контракт передавая ей на вход любые значения.
А вот с postcondition-м ситуация, действительно, интереснее, так как фраза "A postcondition is checked by evaluating its predicate immediately before returning control to the caller of the function." (http://eel.is/c++draft/dcl.attr.contract#cond-5) с корутинами явно не очень сочетается.
yndx-antoshkka 31 июля 2019, 13:26 Контракты отложены, в C++20 их не будет.
Перенос предложения: голоса +5, -0 Автор идеи: Олег Власов
Хочется что бы можно было использовать контракты в корутинах. Также как с функциями:
Потому что, это даст возможность сообщать разработчику об ограничения работы с данной корутиной. И позволит компилятору оптимизорать работу с ней.