Introspection et réflexivité dans le langage PRM
Encadrants : Roland Ducournau et Floréal Morandat
Lieu : LIRMM
PRM
est le langage
développé par Jean Privat dans le cadre de
sa
thèse, pour tester un nouveau schéma de compilation et
spécifier diverses fonctionnalités nouvelles.
Floréal
Morandat a développé au cours de son stage de M2R un
compilateur autogène (de PRM en PRM).
L'objectif du présent stage est de développer dans PRM
des fonctionnalités d'introspection et de
réflexivité.
Globalement, le cahier des charges est le suivant :
- PRM est déjà doté d'un méta-modèle, tel que
décrit par exemple dans le polycopié
du module UMINM 208, qui sert aussi à l'implémentation du
compilateur.
Ce méta-modèle doit servir de base
d'implémentation de l'introspection et de la
réflexivité.
- L'introspection doit permettre l'équivalent de ce qui
existe en JAVA.
- La réflexivité doit permettre au programmeur de
définir des méta-classes et de s'en servir pour
générer du code particulier aussi bien qu'à
l'exécution.
La réflexion portera en particulier sur la possibilité de
définir un moyen terme entre la réflexivité
à l'exécuction de CLOS et la réflexivité
à la compilation de OPENC++ et OPENJAVA.
- PRM est basé sur les notions de modules et de raffinement de classes : ce devra
être la clé du travail à réaliser, avec
- des modules système pour l'introspection, d'autres pour
la réflexivité
- des modules programme pour le niveau-méta.
Le module UMINR 325 (Spécifications et Implémentation des
Langages Objets) est un prérequis.
La bibliographie est celle du cours, et en particulier pour les travaux
menés au LIRMM :
- J. Privat and R. Ducournau.
Link-time Static Analysis for Efficient Separate Compilation of
Object-Oriented Languages
In ACM SIGPLAN-SIGSOFT
Workshop on Program Analysis for Software Tools and Engineering
(PASTE'05), pages , 2005
- J. Privat and R. Ducournau.
Raffinement de classes dans les langages à objets
statiquement typés
In M. Huchard, S. Ducasse et O. Nierstrasz, editors, Actes LMO'05 ,
pages 17--32, 2005
- R. Ducournau.
Implementing statically typed object-oriented programming
languages.
Rapport de Recherche 02-174, L.I.R.M.M., Montpellier, 2002/2005.
- J. Privat.
De l'expressivité à l'efficacité une
approche modulaire des langages à objets.
Le langage PRM et le compilateur prmc (voir le site de Jean Privat)
Thèse d'Informatique. Université Montpellier II,
juillet 2006.
Il faut y ajouter tout ce qui concerne la réflexivité et
en particulier CLOS, OPENC++, OPENJAVA, JAVASSIST.