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 :
  1. 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é.
  2. L'introspection doit permettre l'équivalent de ce qui existe en JAVA.
  3. 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.
  4. PRM est basé sur les notions de modules et de raffinement de classes : ce devra être la clé du travail à réaliser, avec
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 :
  1. 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

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

  3. R. Ducournau.
    Implementing statically typed object-oriented programming languages.
    Rapport de Recherche 02-174, L.I.R.M.M., Montpellier, 2002/2005. 

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