Corrotinas do C++
Funções que podem pausar no meio e retomar depois, introduzidas no C++20. A linguagem entregou a engrenagem, mas esqueceu de incluir qualquer coisa utilizável para rodar em cima dela.
Uma função que contém co_await, co_yield ou co_return é uma corrotina, e o compilador a reescreve como uma máquina de estados cujas variáveis locais vão parar num frame no heap — a menos que o otimizador consiga eliminar a alocação. É poderoso e quase de graça em tempo de execução. O problema é que o C++20 só especificou as interfaces: um promise_type que você mesmo tem de escrever, um protocolo de awaiter, um handle. Nada de generator, task ou scheduler. O resultado foi um recurso praticamente inutilizável sem uma biblioteca externa, como cppcoro ou asio. O C++23 finalmente trouxe o std::generator.