Сопрограммы C++
Функции, которые можно приостановить посередине и позже возобновить; появились в C++20. Язык получил механизм, но забыл приложить хоть что-нибудь пригодное для использования.
Функция с co_await, co_yield или co_return — сопрограмма, и компилятор переписывает её в конечный автомат, чьи локальные переменные переезжают во фрейм в куче — если оптимизатор не сумеет избавиться от аллокации. Это мощно и почти бесплатно во время выполнения. Беда в том, что C++20 описал лишь интерфейсы: promise_type нужно писать самому, плюс протокол awaiter и handle. Ни генератора, ни task, ни планировщика. В итоге без внешней библиотеки вроде cppcoro или asio возможностью было практически невозможно пользоваться. Лишь C++23 добавил std::generator.