Participants : Rémi Douence, Pascal Fradet
Depuis plus de trente ans, une pléthore de nouvelles machines abstraites ou techniques de compilation des langages fonctionnels a été proposée. De plus, de nombreux articles proposent des optimisations adaptées à une machine ou une approche spécifique.
Afin de pouvoir comparer ces différentes options, nous avons
proposé un cadre formel permettant de les décrire, et de les
analyser [14,21]. Ce cadre commun est constitué
d'une collection de langages intermédiaires sous-ensembles du
-calcul. Une
implantation est décrite comme une série de transformations
chacune compilant une
tâche en convertissant une expression d'un langage intermédiaire
dans le suivant. Le dernier langage
est composé d'expressions fonctionnelles
particulièrement simples (des combinateurs et un flot de contrôle
explicite) qui peuvent être vues comme du code machine. Nous nous
sommes limités dans un premier temps à l'appel par valeur et aux
-expressions pures.
Les principales tâches d'un compilateur sont la compilation du
schéma d'évaluation, de la
-réduction et des transferts de contrôle (appels et
retours de fonctions). Nous avons identifié pour chacune de ces
étapes plusieurs choix fondamentaux et nous les avons décrits
comme des transformations de programmes différentes. Nous avons
également abordé la compilation de l'appel par nom (avec ou sans
information de nécessité des arguments), des opérateurs primitifs
et des structures de données.
Un des avantages de cette approche est de décomposer et de structurer le processus de compilation. On a pu, par exemple, montrer que deux implantations apparemment très différentes partagent un choix de mise en oeuvre [15].
Nous avons également étudié la conception de machines hybrides (i.e. mélangeant plusieurs choix de compilation) et les comparaisons formelles sous la forme d'étude de complexité des transformations. Nous poursuivons ce travail en considérant les implantations de langages paresseux (à environnement et par réduction de graphe) et en complétant la description et la comparaison des mises en oeuvre classiques.