coroutine

 

Le mieux pour comprendre c'est un exemple :

 % proc compte x {
      while {$x > 0} {
           yield "tic... $x"
           incr x -1
      }
      return "BOUM !"
 }
 % coroutine bombe compte 3
 tic... 3
 % bombe
 tic... 2
 % bombe
 tic... 1
 % bombe
 BOUM !

La commande yield est un genre de return spécifique aux coroutines.

L'intérêt de l'appel d'une proc via une coroutine, c'est qu'à l'appel suivant de la coroutine, le code reprendra à la ligne suivant yield (incr x -1 dans l'exemple ci-dessus) tout en conservant la valeur des variables locales internes à la procédure. Dans l'exemple ci-dessus, on voit bien qu'à chaque appel de bombe, la variable $x n'est pas perdue.

Dès que la procédure arrive à son terme (avec un return, par exemple), la coroutine qui l'a appelée disparaît.