Langages applicatifs et machines abstraites
Emmanuel Chailloux |
Présentation générale
Les langages applicatifs (
JFLA)
regroupent de façon large (et dans le désordre) les langages
ensemblistes, fonctionnels, parenthétiques, à objets ou acteurs. Ces
différentes familles de langages sont assez proches pour de nobreux
traits des langages (exceptions, ...), de la bibliothèque d'exécution
(GC, ) et des techniques de compilation (machines abstraites, JIT,
dots).
On cherche à déterminer l'adéquation entre langages de haut niveau et
machines abstraites selon les caractéristiques de chacun. Pour cela on
s'intéressera d'une part au langage Objective Caml, qui allie les
modèles de programmation fonctionnel, impératif, objet et modulaire,
et d'autre part aux machines abstraites objets récentes
(
JVM, CLR de
.NET) ou fonctionnelles
(Zinc [5],
...). Le système ocamil [1] a montré la faisabilité et l'intérêt
d'utiliser comme cible la plate-forme d'exécution .NET pour autoriser
l'interopérabilité du langage O'Caml avec les autres compilateurs
ciblant cette plate-forme. D'autres essais ont été réalisés comme la compilation Scheme vers Java [2] avec le compilateur
Bigloo. On s'intéresse aussi aux extensions des machines objets tant du point de vue traits fonctionnel [3] que du typage [4].
Objective Caml
Objective Caml, dévéloppé à l'Inria
(
O'Caml ), est l'un des dialectes
ML les plus connus. Ses qualités d'expressivité, de sûreté et
d'efficacité sont appréciées par une communauté de programmeurs en
nombre croissant. Pour améliorer sa diffusion on cherche à le doter
d'un environneement de développement intégré portable sur les
plate-formes de développement classiques (Windows, macosx, Linux).
ocamil
Le compilateur expérimental
ocamil
permet d'étudier l'intérêt de la plate-forme d'exécution
.NET pour les langages
fonctionnels statiquement typés. Plusieurs
publications
décrivent les techniques employées
pour obtenir un compilateur complet d'OCaml qui engendre du code MSIL géré.
La nouvelle version ocamil utilise une partie de l'information
issue de la phase de typage pour produire un code optimisé de plus
haut niveau. Cette information de types est embarquée dans les
différents langages intermédiaires du compilateur jusqu'à la phase de
génération de code.
Objectifs du stage
Ce stage consiste à addapter le compilateur ocamil à la
plate-forme d'exécution Java (JVM). Ce travail est découpé en 4
parties :
- une partie paramétrisation du compilateur ocamil pour
cibler différentes plate-formes d'exécution. Une partie de ce
travail a déjà été effectué pour la cohabitation de deux versions de
génération de code vers .NET.
- une spécification formelle du système de types de la bibliothèque
d'exécution Java pour ocamil et de la compilation des
principaux traits (contrôle et données).
- une partie implantation comprenant la réalisation de la
bibliothèque d'exécution Java et de la compilation effectives vers
celle-ci permettant d'obtenir un compilateur complet d'O'Caml vers
Java.
- une partie évaluation permettant de valider les choix
techniques.
Bien que la réalisation du stage cherche à reste compatible avec la
JVM, le fait que cette dernière soit depuis peu <<open source>>
autorise de futures modifications tant du point de vue du typage que
des traits de haut niveau fonctionnels.
Profil recherché
Le volume de travail de ce stage est
évalué entre 4 et 6 mois pour un étudiant de M2 qui devra pouvoir
allier connaissances théoriques (avoir suivi un cours de compilation
et un cours de sémantique) et pratiques (connaissances des langages
Objective Caml, Java et C).
Contact
Emmanuel Chailloux
Bureau 740
Equipe SPIRAL - LIP6
Université Paris 6
104 avenue du président Kennedy
75016 Paris
mél : Emmanuel.Chailloux@lip6.fr
web : http://www-spiral.lip6.fr/~chaillou
Références
- [1]
-
Montelatici, R. –
Langages fonctionnels, typage et interopérabilité : Objective Caml sur .NET
thèse d'université – université Paris 7,
mars 2007
- [2]
-
Serpette, B. and Serrano, M. –
Compiling Scheme to JVM bytecode: a performance study – 7th sigplan International Conference on Functional Programming (ICFP)
Octobre , 2002.
- [3]
-
Syme, D. –
ILX: Extending the .NET Common IL for Functional Language Interoperability –
Babel 01, – Septembre 2001.
- [4]
-
Kennedy, A. and Syme, D. –
Design and Implementation of Generics for the .NET Common Language Runtime – PLDI
2001
- [5]
-
Leroy, X. –
The ZINC experiment, an economical implementation of the ML language.Rapport technique 117, INRIA, 1990.
Ce document a été traduit de LATEX par HEVEA