• Aucun résultat trouvé

La comparaison des techniques developpees dans les grammaires attribuees et dans la programmation fonctionnelle qui est presentee dans cette these a donc ete basee sur le cas particulier de transformations de programmes qu'est la deforestation. Ce probleme de l'elimi-nation des structures de donnees servant de colle entre les di erents composants modulaires d'un programme constitue la caution du style de programmation par composition de mul-tiples speci cations de modules simples et independants. En e et, les avantages de ce style

10.2. La deforestation comme cas d'etude 177 de developpement sont nombreux: lisibilite, clarte, tracabilite et reutilisabilite de petits com-posants, dont la validation individuelle est facilitee. Cependant, au sein de l'agencement de ces composants dans une application, l'ensemble des structures produites par les uns pour ^etre consommees par les autres engendre un co^ut d'allocation, de parcours et de desallocation qui peut remettre en cause, de part la perte d'ecacite, l'inter^et m^eme d'une telle approche modulaire.

L'idee de transformer un programme, en vue de supprimer les structures intermediaires occasionnees par les compositions qu'il contient, a donc ete tres largement etudiee la ou la composition et la modularite etaient utilisees. Ce fut le cas dans les grammaires attri-buees avec la composition descriptionnelle de Ganzinger et Giegerich, technique dediee a ces speci cations declaratives guidees par la structure des donnees. Ce fut egalement le cas en programmation fonctionnelle, ou la modularite et la composition sont fondamentales. Dans ce contexte, de nombreux travaux de recherche ont ete menes. Le principe de transforma-tion de depliage/pliage de Burstall et Darlington a inspire di erentes etudes et en particulier l'algorithme de Wadler qui a donne le nom de deforestation a ce type de transformation de programme.

Des restrictions sur l'ensemble de methodes de deforestation etudiees

L'ensemble des travaux sur les methodes de deforestation en programmation fonctionnelle qui sont presentes et compares dans cette these n'est pas exhaustif. Il est representatif d'un ensemble d'approches de ces transformations de programmes ou la localite des transforma-tions est guidee par la structure des donnees. Ce critere de choix a ete dicte par le contexte de comparaison des techniques dediees aux grammaires attribuees avec celles utilisees en programmation fonctionnelle.

L'etude des methodes de transformation de programmes basees sur des systemes de re-ecriture, tels que ceux de Reddy ou de Bellegarde, apporterait probablement des elements de comparaison interessants. De m^eme, les techniques de deforestation developpees dans le do-maine de la programmation logique, principalement par Pettorossi et Proietti, pourraient ^etre comparees a celles que j'ai etudie. Par ailleurs, les travaux de Srensen, Gluck et al. sur l'uni- cation de l'evaluation partielle et de la super-compilation avec la deforestation meriteraient d'^etre etudies dans la continuite de cette these.

Neanmoins, je me suis interesse en priorite aux methodes fonctionnelles qui semblaient ^etre les plus \proches" des speci cites des grammaires attribuees, au sens ou la structure des donnees dirige a la fois la speci cation des programmes et la technique de transformation.

Les methodes de deforestation fonctionnelles considerees

Pour sa popularite et l'inter^et qu'elle a suscite dans la communaute fonctionnelle, j'ai considere l'algorithme de Wadler comme reference historique du principe de la deforestation de programmes fonctionnels. Outre les nombreux developpements, extensions et ameliorations qui ont ete apportes a l'algorithme de Wadler et a ce type de transformation, une autre approche a vu le jour, initiee par les travaux sur l'algorithmique constructive de Fokkinga, Meertens, Meijer et al., souvent appelee deforestation en forme calculationnelle. En 1993, deux techniques de transformations ont ete introduites parallelement.

D'une part, la regle d'eliminationfoldr/buildde Gill, Launchbury et Peyton Jones qui permet d'eliminer d'une facon facilement automatisable les listes intermediaires generees par

178 Chapitre 10. Conclusion un constructeur et consommees par un destructeur; cependant, cette approche ne permet de traiter que le type des listes.

D'autre part, l'algorithme de normalisation des folds de Sheard et Fegaras qui utilise la notion de foncteur inherente au type algebrique d'une structure de donnee; gr^ace au theoreme de promotion relatif aux proprietes des foncteurs, cet algorithme permet de transformer une composition d'un programme ou les calculs sont representes en fonction des di erents patterns de recursion du type de donnee sous-jacent.

Plus recemment, une approche generalisant les deux precedentes a ete introduite par Meijer et Takano, puis developpee par Hu, Iwasaki et Takeichi. Basee sur la theorie des categories, la notion d'hylomorphisme permet de representer des programmes en fonction de foncteurs qui ne dependent plus uniquement du type de donnee sous-jacent, mais egalement du schema de recursion des fonctions. Les theoremes classiques de la theorie des categories sont alors dedies a cette utilisation particuliere et fournissent des regles de transformation simples permettant d'automatiser la fusion d'hylomorphismes.

L'etude comparative des ces methodes fonctionnelles

Pour pouvoir etablir des comparaisons entre les techniques utilisees dans ces approches de la deforestation et la composition descriptionnelle des grammaires attribuees, cette these a tout d'abord presente ces di erentes methodes fonctionnelles de deforestation. Leurs forma-lismes de base etant tres di erents, j'ai voulu aborder chacune de ces approches de maniere formelle et precise pour en permettre une etude detaillee, mais egalement illustree d'exemples pour donner au lecteur une idee intuitive de leurs principes dans une vue d'ensemble compa-rative.

Ainsi, j'ai pu mettre en evidence de profondes ressemblances entre l'algorithme de norma-lisation des folds et l'algorithme de deforestation de Wadler, dans leur principe de fonctionne-ment et dans l'ensemble des programmes qu'ils permettent de traiter. Par ailleurs, sans egaler la simplicite d'application de la regle foldr/build, les folds permettent de traiter di erents types de maniere generique et non plus simplement celui des listes. La notion d'hylomorphisme est ensuite apparue comme etant une generalisation de l'operateur fold, mais egalement de son operateur dual gr^ace aux notions de catamorphisme et d'anamorphisme qu'elle regroupe. Finalement, les theoremes de fusion des hylomorphismes (Acid Rain) ont ete identi es comme des moyen d'automatisation de la deforestation qui englobent et generalisent a la fois l'algo-rithme de normalisation des folds et la regle d'elimination foldr/build.

Au dela de ces remarques comparatives, cette these a egalement permis de determiner cer-taines limitations de ces formalismes. En particulier, lors de la composition d'un programme qui construit son resultat dans un parametre d'accumulation, comme l'inversion de liste par exemple, j'ai montre que le schema de recursion du type de donnees (pour les folds) ou de la fonction (pour les hylomorphismes), permettant de determiner le foncteur correspondant a ce programme, ne permettait pas de suivre delement la construction de la structure interme-diaire dans le parametre d'accumulation. Les methodes de deforestation calculationnellesetant guidees par ces foncteurs, elles ne permettent pas d'intervenir sur ces constructions interme-diaires. Cette particularite pose des problemes aux algorithmes de normalisation ou de fusion, qui s'ils fonctionnent | c'est-a-dire generent une seule fonction a partir d'une composition | ne produisent pas le resultat optimal attendu en terme de deforestation, c'est-a-dire d'eli-mination des structures intermediaires. Par exemple, la double inversion de liste et l'inversion

10.2. La deforestation comme cas d'etude 179 de la liste des feuilles d'un arbre binaire sont des programmes que les methodes fonctionnelles ne permettent pas, pour l'instant, de deforester de maniere satisfaisante.

Par ailleurs, l'etude des methodes calculationnelles a permis de mettre en evidence un probleme dans la methode de fusion des hylomorphismes presentee par Takano et Meijer, et d'en proposer une explication et un debut de solution. Ce probleme est reste jusqu'a present dans l'ombre et n'a pas encore pu ^etre eclairci par les auteurs.

Une deforestation facilitee dans les grammaires attribuees

Apres la comparaison des methodes fonctionnelles de deforestation entre elles, j'ai pre-sente leur comparaison avec la composition descriptionnelle des grammaires attribuees. J'ai d'abord montre que les folds de premier ordre et les grammaires attribuees purement synthe-tisees permettaient de representer des programmes simples de maniere equivalente et qu'ils aboutissaient, avec leurs methodes respectives, aux m^emes resultats de deforestation. J'ai en-suite montre que le traitement de programmes plus complexes avait necessite des extensions dans le formalisme des folds sans ^etre pour autant completement satisfaisant (algorithme de normalisation de second ordre, transformations ad hoc basees sur des types possedant des zero-constructeurs, exceptions dans l'algorithme de normalisation etendu). Au contraire, les grammaires attribuees, avec leur notion d'attribut herite, permettent de representer ces pro-grammes plus complexes dans leur formalisme de base et de traiter leur deforestation avec le m^eme algorithme de composition descriptionnelle. En fait, un attribut herite permet d'ex-primer un calcul descendant dans une structure, ce que les folds necessitent d'exd'ex-primer sous la forme d'un parametre d'accumulation ou d'une fonction d'ordre superieur. Ces dernieres formes rendent la deforestation des structures qui y sont construites plus dicile puisqu'elles y sont encapsulees, tandis que sous la forme d'attributs herites, qui sont des objets de premiere classe dans les grammaires attribuees, ces structures sont facilement accessibles et defores-tables.

Concernant les hylomorphismes, qui sont guides par des foncteurs representant le schema de recursion des fonctions, les structures intermediaires intervenant dans des parametres d'ac-cumulation sont egalement diciles a eliminer, puisque qu'elles ne sont pas construites en suivant le schema de recursion determine par le foncteur. Les exemples de double inversion de liste ou d'inversion de la liste des feuilles d'un arbre binaire, deja evoques comme faisant echec a ces methodes calculationnelles, sont naturellement traites par la composition description-nelle des grammaires attribuees correspondantes, ou ces calculs sont directement accessibles puisque representes dans des attributs herites et non caches dans des fonctions de second ordre ou des parametres d'accumulation. Les travaux de Meijer et Hutton sur les difoncteurs, permettant d'exprimer des schemas recursifs plus complexes que ceux pris en charge par les endofoncteurs polyn^omiaux consideres dans ces methodes de deforestation, pourraient peut ^etre apporter une amelioration a ce probleme.

D'une maniere plus generale, le formalisme des folds tend a representer une fonction dans les termes du schema de recursion du type de donnee sous-jacent. Autrement dit, il s'agit de plaquer le ot de donnees sur un ot de contr^ole arbitrairement xe par le type du parametre d'entree. Il en va de m^eme pour les hylomorphismes, ou cependant le ot de contr^ole n'est plus seulement xe par le type du parametre d'entree, mais prend egalement en compte le schema de recursion de la fonction. Neanmoins, le ot de donnee est guide par un ot de contr^ole ge par le foncteur qui ne represente pas necessairement la construction d'une structure

interme-180 Chapitre 10. Conclusion diaire intervenant dans un parametre d'accumulation. La di erence fondamentale entre ces approches et l'approche des grammaires attribuees est que dans ces dernieres, les productions qui representent le ot de contr^ole (le type de donnee sous-jacent) sont tout a fait distinctes du ot de donnees represente par les regles semantiques. De plus, l'existence des attributs herites ainsi que l'attachement des attributs aux variables de pattern permettent d'expliciter le ot de donnees de maniere plus souple et pas necessairement dans les termes d'un schema de recursion ge.