previous up next contents
Précédent : Implantation des langages Remonter : Implantation des langages Suivant : Correction d'optimisations reposant

Taxonomie des mises en oeuvre des langages fonctionnels

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.


previous up next contents
Précédent : Implantation des langages Remonter : Implantation des langages Suivant : Correction d'optimisations reposant