Corrutina (C++)
# Corrutina (C++)

En programación, una corrutina es una generalización del concepto de función. Dicho de otra manera, una función es un caso particular de corrutina. Salvo excepciones una función no guarda estado: al invocarse crea variables locales, al terminar las destruye y devuelve un valor. Una corrutina, por su parte, preserva su estado y puede terminar provisoriamente y devolver un valor, de modo que más tarde se le puede pedir que continúe desde donde dejó.

Las corrutinas permiten implementar estos tipos de funciones, entre otros:

* generadores
* autómatas finitos
* actores
* comunicaciones de procesos secuenciales

C++20 introduce un conjunto de herramientas para que los programadores puedan implementar estos tipos de funciones con mayor facilidad y elocuencia.

## Herramientas introducidas en C++20

C++20 introduce tres nuevas instrucciones:

* co_await
* co_yield
* co_return

Cualquier función que contenga cualquiera de estas instrucciones se convierte en corrutina.

Estas adiciones al lenguaje C++ permiten al compilador optimizar el código ejecutable de las corrutinas, y al programador desarrollar funciones de alto nivel basadas en corrutinas. Es importante señalar que estas funciones de alto nivel, como por ejemplo los generadores, no fueron incorporadas en la biblioteca estándar. El motivo es simple: esas incorporaciones son novedosas y el comité de estandarización prefirió esperar a ver su uso e impacto en proyectos reales antes de escribir esas bibliotecas.

Por el momento se aconseja fuertemente usar alguna biblioteca de terceros existente como cppcoro con tipos y conceptos para corrutinas en lugar de trabajar directamente con las nuevas instrucciones. Ya hay una propuesta para incluir en la biblioteca estándar una de generadores basados en corrutinas, para ser considerada en C++23.

