next up previous
Next: Typage et inférence Up: Les grammaires attribuées Previous: Analyse statique pour

Évaluation indulgente et analyse statique dans les GA

 

Références: [FK93],[vdBFAvG93],[KS86b] D'après l'étude de Guy TRAMBLAY [Tre94,TG95], l'évaluation indulgente (une forme particulière de l'évaluation paresseuse) semble être une forme très courante en pratique. En effet, il montre que quasiment, tous les programmes décrits comme étant paresseuses dans la litérature, ne sont en rèalité que des programmes indulgents. Il est important de faire le parallèle avec nos travaux [AP94] sur la compilation efficace de TYPOL que nous avons poursuivi avec Isabelle ATTALI. En effet, cela montre que les grammaires attribuées sont une forme abstraite pour deux modèles de programmation (de calcul) bien différent (d'un point de vue externe). Les travaux sur l'évaluation indulgente (sur le Langage IDgif [SG95] ou encore HPgif de [SCG95]) sont souvent liés à l'évaluation parallèle. Il serait donc intéressant de relier ici nos travaux sur l'évaluation parallèle d'attributs (cf la section 2.8) et nos algorithmes de transformation de grammaires attribuées (cf la section 2.9).

L'autre intérêt de notre approche est de fournir à l'utilisateur une puissance d'expression comparable à celle que procure le style de programmation paresseux, sans pour autant avoir tous les désavantages de l'efficacité du code produits, surtout en terme d'espace mémoire. En effet, nos premières expériences, en utilisant le langage HASKELL ont bien mis en évidence ce gain d'espace mémoire. Il est important de remarquer que nous avons les mêmes motivations, en terme d'occupation mémoire, que pour la compilation efficace de TYPOL (voir la section 5). Mais, pour faire des comparaisons qui ont un sens, il est nécessaire (hélas) d'insérer cette analyse dans une chaîne complète d'un compilateur fonctionnel. En effet, lors de ces expériences (même pour la compilation efficace de TYPOL [AP94]), il est très difficile de valider correctement le gain de notre approche, d'autant plus lorsque le modèle de calcul change. Il est nécessaire de se ramener toujours au même modèle d'exécution et de comparer la forme non optimisée à la forme optimisée dans ce même modèle de calcul.



next up previous
Next: Typage et inférence Up: Les grammaires attribuées Previous: Analyse statique pour



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