6 points par GN⁺ 2024-02-26 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Coroutines en C

  • Introduction des coroutines : structurer un programme de grande taille est toujours difficile. Lorsqu’il y a du code qui produit des données et du code qui les consomme, il faut souvent décider lequel est l’appelant (caller) et lequel est l’appelé (callee).
  • Réécriture (Rewriting) : la solution habituelle consiste à réécrire l’un des côtés du canal de communication sous forme de fonction appelable. Cela est moins clair que le code d’origine et alourdit la maintenance.
  • Coroutines de Knuth (Knuth's coroutines) : Donald Knuth a proposé une solution qui abandonne la notion de pile et considère les processus comme des collaborateurs à égalité. Mais cela n’est possible qu’en assembleur et n’est pas pris en charge par les langages de haut niveau comme le C.
  • Coroutines basées sur la pile (Stack-based coroutines) : l’objectif est d’imiter en C le principe d’appel des coroutines de Knuth. Pour cela, on utilise une instruction goto et une variable d’état afin de déplacer le contrôle vers un point arbitraire à l’intérieur de la fonction.
  • Le dispositif de Duff (Duff's device) : au lieu d’étiquettes, on utilise des clauses case à l’intérieur d’une instruction switch, ce qui permet d’effectuer le saut via le switch lui-même. Cela permet d’implémenter l’astuce des coroutines.
  • Évaluation (Evaluation) : l’utilisation de macros de coroutines permet le passage de données entre producteur et consommateur. Cela est implémenté de manière portable en ANSI C.
  • Standards de codage (Coding Standards) : cette technique enfreint les standards de codage, mais aide à faire apparaître clairement la structure de l’algorithme. Les standards de codage devraient viser la clarté algorithmique plutôt que la seule clarté syntaxique.
  • Améliorations et code (Refinements and Code) : dans les applications réelles, une implémentation de coroutines réentrante et compatible avec un environnement multithread est nécessaire, sans dépendre de variables statiques. Pour cela, on utilise une structure de contexte comme paramètre.

L’avis de GN⁺

  • Importance : cet article présente une manière créative d’implémenter des coroutines en C, en expliquant comment les programmeurs peuvent coder plus efficacement l’interaction entre producteurs et consommateurs de données.
  • Aspect intéressant : la tentative d’appliquer le concept de coroutines de Knuth au langage C montre la créativité des développeurs qui cherchent à dépasser les limites d’un langage de programmation.
  • Utile : les coroutines permettent d’implémenter un traitement asynchrone sans écrire explicitement une machine à états complexe, ce qui améliore la lisibilité et la maintenabilité du code.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.