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

Sébastien Aperghis-Tramoni maddingue at free.fr
Wed Jul 30 08:49:27 CDT 2003


On mercredi, juil 30, 2003, at 11:33 Europe/Paris, arnaud.assad at free.fr 
wrote:

> On Wed, Jul 30, 2003 at 10:00:51AM +0200, Michel Rodriguez wrote:
>> Ceci dit l'impression que j'ai c'est que c'est plutot utilise comme
>> mechanismes de bas niveau: c'est surtout necessaire au niveau de 
>> Parrot
>> pour pouvoir traiter les interruptions, faire du multi-threading et 
>> que
>> sais-je encore. Ca pourra etre utilise dans Perl pour faire des 
>> modules
>> hyper-ruses, mais je suis pas sur que le clamping moyen qui fait du 
>> XML
>> (au hasard ;--) aura trop a s'en servir.
>
> Je pense aussi.  Les continuations ont un intérêt surtout
> (uniquement?) pour l'implémentation.
>
> J'avais évoqué les tail calls et la tail recursion, optimisations 
> pouvant
> être mises en oeuvre facilement et efficacement si on a des 
> continuation.
>
> Comme l'explication est le meilleur moyen de tester ses connaissances,
> voici un petit topo (toujours orienté newbie (tricks of the wizard on
> attendra un peu ;-)) sur les tail calls et la tail recursion :
>
> Commencons par les tail calls (appels finaux ? appels finauds ? ;-)
>
> Un "tail call" c'est quand une fonction retourne le résultat d'une
> fonction.
> [...]
> D'ou l'idée, déjà ancienne, de remplacer le 'return quelquechose' par
>
> 1) retirer l'espace alloué pour la fonction courante 2) faire un goto
> (!!!!) vers la fonction dont on retourne la valeur

Je crois que je vois. En Perl, ce serait équivalent à utiliser la 3e 
forme du goto (dit "magique") :

sub foo {
     # do things
     goto &bar
}

La nuance est qu'ici c'est au compilo à deviner tout seul quand il peut 
le faire automatiquement.


> A noter la tail récursion est un sous-cas plus simple du tail call
> [...]
> Ce cas est plus simple car on connait la fonction appelante, du coup le
> compilateur peut effectuer ce genre d'optimisations automatiquement.

Hmm.. Sauf erreur de ma part, la théorie de la compilation offre déjà 
plusieurs mécanismes de dérécursion des fonctions.


Ah au fait, j'ai retrouvé ce que c'est que la curryfication : c'est une 
opération qui permet d'obtenir une version monadique de toute fonction 
polyadique... ;-)
Exprimé plus clairement, cela permet de transformer une fonction à 
plusieurs arguments en une fonction à un seul argument, plus conforme à 
la notation mathématique usuelle. Ces notions proviennent du λ-calcul 
(lambda-calcul) et de la programmation fonctionnelle, où on retrouve 
nos amis Lisp et Scheme, ainsi que Caml et Prolog.


Sébastien Aperghis-Tramoni
  -- - --- -- - -- - --- -- - --- -- - --[ http://maddingue.org ]



More information about the Marseille-pm mailing list