next up previous
Next: Analyse statique pour Up: Les grammaires attribuées Previous: Les grammaires attribuées

déforestation et la composition descriptionnelle

 

Dans [Dur94,DPJ95,DPRJ96,DPRJ97b,DPRJ97a] nous avons commencé à montrer la forte relation qui pouvait exister entre les mécanismes de déforestation introduits dans la programmation fonctionnelle [Wad88] et la composition descriptionnelle [GG84]. Il existe dans la communauté fonctionnelle plusieurs approches pour ce même problème ([KR93] pour ADL,[OHIT97] pour HYLO, [MH95] pour Bananas), mais elles ont toutes en commun, le même principe de transformation locale, sur chaque constructeur. Ainsi ces diverses approches définissent pour un programme fonctionnel une forme intermédiaire très similaire où sur laquelle divers algorithmes de transformation (déforestation) sont appliqués. Je suis de plus en plus convaincu que cette forme intermédiaire se rapproche fortement d'une spécification par grammaire attribuée abstraite (indépendante du modèle de calcul choisi).

Ainsi nos travaux futurs sur cette comparaison vont nous permettre de valoriser et de démontrer les avantages de l'approche (de programmation ou d'analyse) par grammaire attribuée sur les points essentiels suivants:

Je ne suis pas le seuls à penser à ce dernier point, jcela. En effet, dans l'article [She94] de présentation générale de Tim SHEARD, qui n'est pas de la communauté des grammaires attribuées, il est écrit que la programmation par grammaire attribuée est plus claire, concise et maintenable que la programmation fonctionnelle. On peut aussi faire référence aux polytypic programmning de Johan JEURING [JJ96] surtout si l'on s'appuie sur le fait qu'une grammaire attribuée peut être transformée en un catamorphisme [FJMM91]. Notre notion de grammaire attribuée dynamique permettra d'étendre encore plus cette comparaison (aux hylomorphismes)

Les divers travaux que nous devons poursuivre sont les suivants:

Après cela, il sera certainement utile d'insérer ce mécanisme dans une chaîne complète de compilation de programmes fonctionnels. Mais nous préférons, dans un premier temps, faire cette étude indépendament d'un langage fonctionnel donné pour garder le plus possible toute la généralité (abstraction) de notre approche. En effet, lors de l'instantiation de ce mécanisme pour un compilateur donné, il sera certainement nécessaire d'effectuer certaines adaptations en fonction des particularités du langage d'entrée. De plus, nos travaux sur l'optimisation mémoire (cf la section 2.6), mise à jour destructives (cf la section 3.2), évaluation indulgente (cf la section 3.3) et enfin sur l'évaluation parallèle (cf la section 2.8) pourront être aussi incorporés, si la forme intermédiaire, ``les grammaires attribuées'' conserve toujours les mêmes avantages.

Pour nous, l'objectif de ces travaux n'est pas exclusivement motivé par l'optimisation (élimination des structures intermédiaires) de programme, mais surtout par son utilisation dans le mécanisme de généricité structurelle avec notre notion de couplage (cf la section 2.5). Le polymorphisme est souvent décrit comme un moyen de favoriser la réutilisation du code, nous pensons que la généricité structurelle permettra une plus grande réutilisation. En effet le mécanisme de polymorphisme est limité dans le sens qu'il ne permet pas de s'affranchir de la structure. Elle reste figée, d'une utilisation à l'autre. Ce ne sont que les feuilles de la structure (le type de base) qui sont les paramètres de la réutilisation. D'après nos premières études, l'approche décrite dans [JJ97] semble proche de notre notion de coupleur statique (cf la section 2.3) décrite dans [RPJ94].



next up previous
Next: Analyse statique pour Up: Les grammaires attribuées Previous: Les grammaires attribuées



Didier Parigot
Mon Apr 7 10:23:43 MET DST 1997