6 puntos por GN⁺ 2024-02-26 | Aún no hay comentarios. | Compartir por WhatsApp

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.

Aún no hay comentarios.