[Toulouse-pm] Re: [ppm] YAPC::Europe::2003 (3) (fwd)

Michel Rodriguez mirod at xmltwig.com
Wed Jul 30 03:02:06 CDT 2003


Je commence a comprendre de plus en plus... il reste des zones d'ombres
ceci dit (a quoi ca sert en pratique une continuation?)

Michel Rodriguez
Perl & XML
http://www.xmltwig.com

---------- Forwarded message ----------
Date: Wed, 30 Jul 2003 09:39:23 +0200
From: arnaud.assad at free.fr
To: paris-pm-list at pm.org
Cc: marseille-pm at mail.pm.org
Subject: Re: [ppm] YAPC::Europe::2003 (3)

On Wed, Jul 30, 2003 at 02:48:27AM +0200, Sébastien Aperghis-Tramoni wrote:
> À ce propos si toi (ou quelqu'un d'autre) pouvait fournir une
> explication de ce que sont ces fameuses continuations et autres
> coroutines, car pour le moment j'en ai beaucoup entendu parlé, mais je
> n'ai aucune idée de ce que c'est.
>

Comme moi aussi, ca commencait à me tarabuster je me suis renseigné en
rentrant.
Voici donc l'avis d'un NEWBIE en ce domaine pour d'autres newbies :


I) Continuation

 1.1) Définition courte (et naive)

  Une continuation est une espèce de closure (fonction qui "capture" son
  environement lexical) qui contient AUSSI sa chaine de controle (la chaine
  de controle représente la pile d'appel, souvent représentée par ue liste
  chainée)

 1.2) Déveleppement

 D'abord sur le pourquoi de la chose : Cela permet de faire des optimisation
 sympa (tail calls/tail recursion) simplement et rapidement, parce que cela peut
 etre la base d'un systeme d'exception.

 De part la définition donnée plus haut, on comprend aisément que les
 continuations sont un surensemble des closures.

 Mais je crois que que Dan a envie de faire d'autres trucs vraiment plus
 "tordues" avec (dans son talk il parlait par exemple de reprendre
 l'exécution de la continuation a un autre endroit que celui sauvegardé
 lors de la capture de l'environnement ! Et la beaucoup de gens ont trouvé
 ça "evil" ;-)

 Bon pour faire ca il s'appuie sur une nouvelle facon d'appeller les
 fonctions : CPS (Continuaton Passing Style)

 1.3) Pointeurs

  Le site de Dan (tant qu'a faire) : http://www.sidhe.org/~dan/blog/


II) Co-routines

 2.1) Définition courte (et naive)

  Une coroutine est une fonction qui peut retourner a nimporte quel moment,
  et lors de son invocation suivante reprendre son exécution A PARTIR de cet
  endroit.

 2.2) Développement

  Un exemple simple

  sub lacoroutine {

	# code A

	yeld 1; 	# retourne 1;

	# code B

	yeld 2;		# retourne 2;

	# code C

	yeld 3;		# retourne 3;
  }


  lacoroutine();
  lacoroutine();
  lacoroutine();
  lacoroutine();

  retournera 1, puis 2, puis 3, puis 1.

  Lors du premier appel le code A sera exécuté ainsi que le yeld 1
  Lors du second appel le code B sera exécuté ainsi que le yeld 2
  Lors du troisieme appel le code C sera exécuté ainsi que le yeld 3
  Lors du quatrieme appel le code A sera exécuté ainsi que le yeld 1
  ...

  A noter plusieurs comportement sont possibles quand on passe des paramètres
  (prendre les paramètres de l'appel, précédent, continuer l'exécution avec
  les nouveaux parametres...

 2.3) Pointeurs

 	Le site de Dan : http://www.sidhe.org/~dan/blog/

	Tout ce qui dit Damian sur le sujet en particulier :
	 http://archive.develooper.com/perl6-language@perl.org/msg15348.html


N'hésitez pas à corriger, annoter, commenter.

Arnaud.
-
Paris Perl Mongueu(r|se)s  => http://paris.mongueurs.net/mail.html





More information about the Toulouse-pm mailing list