[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