Korutyny w C++
Funkcje, które mogą się wstrzymać w połowie i wznowić później, wprowadzone w C++20. Język dostarczył mechanizm, ale zapomniał dołożyć cokolwiek, co dałoby się na nim uruchomić.
Funkcja zawierająca co_await, co_yield lub co_return jest korutyną, a kompilator przepisuje ją na maszynę stanów, której zmienne lokalne trafiają do ramki na stercie — chyba że optymalizator zdoła tę alokację pominąć. Jest to potężne i w czasie działania niemal darmowe. Problem w tym, że C++20 określiło tylko interfejsy: promise_type, który trzeba napisać samemu, protokół awaitera, uchwyt. Bez generatora, bez zadania, bez schedulera. W efekcie funkcja była praktycznie bezużyteczna bez zewnętrznej biblioteki, takiej jak cppcoro czy asio. C++23 w końcu dodało std::generator.