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 :
  1. 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.

  2. 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).

  3. 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.

  4. 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