Corutinas (Coroutines) en C
- Introducción de las corutinas: Estructurar programas grandes siempre es una tarea difícil. Cuando hay código que produce datos y código que consume datos, a menudo surge el problema de decidir cuál es el llamador (
caller) y cuál es el llamado (callee).
- Reescritura (Rewriting): La solución habitual es reescribir uno de los lados del canal de comunicación como una función invocable. Esto es menos claro que el código original y aumenta la carga de mantenimiento.
- Las corutinas de Knuth (Knuth's coroutines): Donald Knuth propuso una solución que abandona el concepto de pila y considera los procesos como colaboradores en igualdad de condiciones. Sin embargo, esto solo es posible en lenguaje ensamblador y no está soportado en lenguajes de alto nivel como C.
- Corutinas basadas en pila (Stack-based coroutines): Se busca imitar en C el principio de llamada de las corutinas de Knuth. Para ello, se usa una técnica que mueve el control a puntos arbitrarios dentro de una función mediante la instrucción
goto y una variable de estado.
- El dispositivo de Duff (Duff's device): Se usan sentencias
case dentro de una instrucción switch para hacer el salto con el propio switch en lugar de etiquetas. Con esto se implementa el truco de las corutinas.
- Evaluación (Evaluation): El uso de macros de corutinas permite transferir datos entre productor y consumidor. Esto se implementa de forma portable en ANSI C.
- Estándares de codificación (Coding Standards): Esta técnica viola los estándares de codificación, pero ayuda a mostrar con claridad la estructura del algoritmo. Los estándares de codificación deberían buscar la claridad algorítmica más que la claridad sintáctica.
- Mejoras y código (Refinements and Code): En aplicaciones reales, se necesita una implementación de corutinas que no dependa de variables estáticas, que sea reentrante y funcione también en entornos multihilo. Para ello, se usa una estructura de contexto como parámetro.
La opinión de GN⁺
- Importancia: Este artículo presenta una forma creativa de implementar corutinas en el lenguaje C, explicando cómo los programadores pueden codificar de forma más eficiente la interacción entre productores y consumidores de datos.
- Interés: El intento de aplicar el concepto de corutinas de Knuth al lenguaje C muestra la creatividad de los desarrolladores para superar las limitaciones de los lenguajes de programación.
- Utilidad: Usar corutinas permite implementar procesamiento asíncrono sin escribir explícitamente máquinas de estado complejas, lo que mejora la legibilidad y el mantenimiento del código.
Aún no hay comentarios.