• Aucun résultat trouvé

J'ai deja montre dans le chapitre 6 que pour des programmes simples et plus particu-lierement pour les grammaires attribuees

S

1, les folds du premier ordre et certains hylo-morphismes, la composition descriptionnelle et les techniques de deforestation fonctionnelles aboutissaient a des resultats equivalents.

En depit des restrictions associees a la transformation FP-to-AG, la composition symbo-lique qui vient d'^etre presentee permet de deforester une classe de programmes pour laquelle les deforestations fonctionnelles etaient insusantes. Cette classe de programme regroupe les fonctions dans lesquelles un parametre d'accumulation construit le resultat de la fonction sans suivre exactement le schema de recursion du type de donnee sous-jacent ou de la fonction elle-m^eme. Les compositions (

rev

(

flat t nil

)

nil

) ou (

rev

(

rev x nil

)

nil

) appartiennent a cette classe pour laquelle, si SC represente la composition symbolique, on a:

SC FP-to-AG

>

FP-to-AG  Deforestation Fonctionnelle

La suite de cette section tente de mettre en evidence certaines des raisons qui expliquent cet avantage de la composition symbolique par rapport aux di erentes methodes calculationnelles. En fait, la plupart des methodes de fusion ou de deforestation dirigees par la structure des donnees en programmation fonctionnelle s'appuient sur la notion de foncteur et utilisent des operateurs de contr^ole generiques permettant de capturer en m^eme temps le schema de recursion des fonctions et celui des types de donnees. D'abord, les regles defoldr/buildde la shortcut deforestation de Gill et al. [GLJ93] implantee dans Haskell, rendaient possibles l'eli-mination de listes intermediaires pour des compositions de fonctions dont une version en fold etait disponible. Ensuite, la normalisation des folds de Sheard et Fegaras [SF93] generalisait cette technique a tous les types de donnee, en produisant automatiquement leurs foncteurs associes a partir de leurs de nitions algebriques. Cependant, ces foncteurs etaient trop iso-morphes aux types pour representer correctement certains calculs, aussi les hylomorphismes sous forme de triplet furent introduits par Takano et Meijer [TM95], puis developpes dans des

8.3. Une nouvelle technique de deforestation 165 systemes tels qu'adlou hylo[KL94, OHIT97]. Ces derniers permettent de deforester auto-matiquement certains programmes fonctionnels complexes, mais echouent encore, en terme de deforestation, sur des programmes tels que (

rev

(

flat t nil

)

nil

) ou (

rev

(

rev x nil

)

nil

), qui peuvent desormais ^etre traites ecacement gr^ace a la composition symbolique.

Une meilleure deforestation

Dans les methodes de deforestation fonctionnelles, en depit des generalisations ou rane-ments successifs, la classe des fonctions telles que revrev ou rev at restait problematique. Je donne ici quelques remarques qui peuvent expliquer pourquoi.

Les methodes calculationnelles utilisent toujours des foncteurs pour diriger leurs transfor-mations et leurs calculs, ce qui n'est pas le cas de la composition symbolique et des grammaires attribuees. L'exemple de la fonction rev est assez representatif:

let

rev x l

=case

x

of

cons head tail

!

rev tail

(

cons head l

) [

:::

]

Si

Frev

est le foncteur qui dirige la recursion du type liste, il ne suit pas la construction de la liste inversee, mais les appels recursifs de la fonction. Ce faisant, il cache la construction du resultat. Plus precisement le constructeur cons est cache dans le second parametre de l'appel recursif a rev. Dans ces conditions, la deforestation locale sur ce cons inaccessible est impossible.

Gr^ace a l'expression de cette fonction en grammaire attribuee, la composition symbolique permet d'atteindre chaque constructeur du resultat, directement a partir de la speci cation. De plus, ceci est possible sans l'utilisation d'une forme intermediaire abstraite telle que les foncteurs. La raison de cette di erence est que toutes les constructions du resultat sont visibles dans la grammaire attribuee, m^eme s'ils ne suivent pas exactement le schema de recursion (foncteur) du type sous-jacent. Ceci explique que la composition symbolique permette une meilleure deforestation sur les programmes construisant une structure intermediaire dans un parametre d'accumulation, comme c'est le cas dans rev at ou le cons ci-dessus est deforeste. Pour permettre aux methodes calculationnelles d'e ectuer de telles deforestations, il fau-drait envisager un foncteur qui decrive completement le schema de recursion de la construction du resultat, et qui prenne en compte les parametres d'accumulations dans lesquels des frag-ments de resultats sont construits ou transmis. Les travaux de Meijer et Hutton sur les difonc-teurs [MH95], qui permettent d'exprimer des schemas recursifs plus complexes que ceux pris en charge par les endofoncteurs polyn^omiaux consideres dans ces methodes de deforestation, constituent peut ^etre une piste pour apporter une amelioration a ce probleme.

Pour conclure ici, je rappelle que la composition symbolique est une methode de defores-tation generale. Gr^ace a la transformation FP-to-AG et a la transformation inverse, elle n'est plus limitee uniquement aux grammaires attribuees.

Du point de vue des grammaires attribuees

Dans le domaine des grammaires attribuees, l'introduction de la composition symbolique constitue une integration plus complete de la composition descriptionnelle et la rend plus largement utilisable. L'idee initiale introduite par Ganzinger et Giegerich, plus recemment developpee et mise en uvre par Roussel, etait d'appliquer un mecanisme de composition entre deux grammaires attribuees separees. La composition symbolique, gr^ace a la localite de

166 Chapitre 8. Composition symbolique ses pas de projections et de son evaluation symbolique, permet d'e ectuer de la deforestation sur des termes a l'interieur d'une grammaire attribuee. De plus, les termes nis peuvent ^etre evalues pendant ces transformations et une utilisation particuliere de la composition symbolique peut ^etre vue comme de l'evaluation partielle.

Finalement, il faut rappeler que le formalisme des grammaires attribuees n'est pas seule-ment une notation abstraite pour ecrire des equations semantiques. C'est egaleseule-ment un lan-gage de programmation complet, reconnu pour sa puissance et son ecacite dans la conception de grosses applications, ou pour l'ecriture de compilateurs (cf. systemeFnc-2[JPJ+90]). De plus, pour e ectuer de la deforestation, m^eme pour les programmes complexes qui posent des problemes aux autres methodes, aucune extension speci que n'a ete requise dans le formalisme initial et simple des grammaires attribuees. C'est une preuve supplementaire de la possibi-lite d'utiliser les grammaires attribuees a des ns de deforestation comme une alternative avantageuse a d'autres formalismes classiques dans ce contexte.

167

Chapitre 9

Elimination de regles de copie

Les grammaires attribuees, particulierement celles qui sont produites par la composition symbolique, peuvent contenir de nombreuses regles de copie qui servent uniquement a trans-porter des valeurs ou des constantes le long de la structure de l'arbre d'entree. Cependant, il est possible d'eliminer ces regles de copie dans de nombreux cas, gr^ace a une analyse statique globale de la grammaire attribuee [Rou94]. Je rappelle ici que les transformations souhaitees doivent ^etre valables quel que soit le parametre d'entree de la grammaire attribuee. Elles ont lieu sur la speci cation de la grammaire attribuee. D'autres optimisations, liees a un para-metre donne, peuvent ^etre faites de facon dynamique par l'evaluateur produit par le systeme de traitement de grammaires attribuees, comme c'est le cas pourFnc-2.

Dans le cadre de l'application de la composition symbolique sur une grammaire attri-buee produite par la transformation FP-to-AG, c'est-a-dire correspondant a un programme fonctionnel donne dont on attend le programme fonctionnel correspondant a la version defo-restee par la composition symbolique, l'application de ces eliminations de regles de copie est conditionnee par des contraintes sur la semantique d'evaluation du programme fonctionnel considere. En fait, plus particulierement dans le cas d'evaluation paresseuse, ces eliminations peuvent conduire a une non-preservation de la semantique du programme deforeste. Apres avoir donne l'idee intuitive des transformations d'elimination des regles de copie, je reviendrai a la n de cette section sur ses conditions d'application.