![]()
Précédent : Implantation des langages fonctionnels
Remonter : Implantation des langages fonctionnels
Suivant : Langages restreints pour machines
parallèles
Participants : Rémi Douence, Pascal Fradet De nombreuses
techniques ont été proposées pour implanter les langages
fonctionnels et il est difficile d'établir des comparaisons
rigoureuses entre les différentes options existantes. Afin
d'apporter des éléments de solution à ce problème difficile, nous
avons proposé un cadre formel pour décrire et comparer les
techniques de compilation des langages fonctionnels. L'idée de
base consiste à définir le processus de compilation comme une
suite de transformations de programmes dans le cadre fonctionnel.
Nous nous sommes dans un premier temps concentrés sur les mises
en oeuvre basées sur l'appel par valeur [22]. 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 chaque étape plusieurs choix fondamentaux et
nous les avons décrits comme des transformations de programmes.
Nous nous sommes ensuite intéressés à l'appel par nom, l'appel
par nécessité et la réduction de graphe [23]. Nous avons mené le même travail de
description et de comparaison. L'appel par nécessité a demandé la
modélisation d'une nouvelle étape de compilation: le partage et
la mise à jour des fermetures. Nous avons identifié des étapes et
des choix communs entre ces différentes options. La description
dans un cadre unique a permis de mettre clairement en évidence
les différences et les similitudes entre la réduction de graphe
et les implantations à environnement.
Un des avantages de cette démarche est de décomposer et de structurer le processus de compilation. On peut, par exemple, montrer que des implantations apparemment très différentes partagent certaines options de mise en oeuvre [9]. Nous avons établi une taxonomie des mises en oeuvre de langages fonctionnels et nous avons classifié de nombreuses implantations classiques comme la SECD, la Cam, la G-machine, Tim, etc. Nous avons également étudié l'expression d'optimisations classiques, la conception de machines hybrides (i.e. intégrant plusieurs choix de compilation) et proposé des comparaisons formelles sous la forme d'étude de complexité des transformations. Le document de thèse de Rémi Douence [2] offre une présentation complète et unifiée de ces travaux.