M2 INFORMATIQUE
UE HAI931I - Méta-Programmation et Réflexivité
Christophe Dony
Vue Générale
-
Concepts étudiés : modèles, méta-modèles, réflexivité,
méta-programmation, modèles à l'exécution (models@runtime),
méta-classes, méta-objets, auto-adaptabilité dynamique, construction de systèmes auto-adaptables, construction de
systèmes réflexifs.
- Cours :
- Utilisation de Systèmes Réflexifs : utilisation de méta-objets pour manipuler les classes, les méthodes,
ou la pile d'exécution, ou pour définir un interpréteur
méta-circulaire du langage.
- Construction de systèmes réflexifs
- TPs: Pratique en TP des langages réflexifs les plus élaborés et puissants : Pharo et
CLOS (Common-Lisp Object System), dont dérivent les autres
(JavaScript, Python, Ruby, etc).
- Projet :
Construction de systèmes réflexifs : construction d'un
interpréteur pour un langage intégrant des
méta-classes explicites, avec son bootstrap.
Notes de Cours
Sujets de TDs/TPs
- SEANCES 1 à 9 - Feuille de TD/TP - Utilisation de systèmes
réflexifs :
- Metaprogrammation en
Pharo/Smalltalk (utilisation de méta-objets pour manipuler les classes, les méthodes,
ou la pile d'exécution, utilisation des méta-classes implicites,
- Metaprogrammation en Clos avec les méta-classes explicites,
combinaison et compatibilité de métaclasses (ou d'aspects).
- SEANCES 9 à 11 : travail sur le projet, voir la section "Projets"
ci-dessous.
Corrigés des TDs/TPs
Note : Quand les corrigés sont des codes Pharo, pour les utiliser :
--> solution 1 : ouvrir les fichiers avec votre nagigateur ou avec un éditeur de texte et
faire des copier/coller vers l'éditeur Pharo (le browser);
--> solution 2 : sauvegarder le fichier avec son extension ".st", puis en Pharo, sélectionner le fichier avec l'outil
FileBrowser puis le charger avec FileIn ou Install. Le code
chargé (installé) sera ensuite visible dans le browser.
Attention (1) il ne peut y avoir deux classes de même nom dans le
système donc si vous chargez un corrigé, cela peut
entrer en conflit avec votre propre classe.
Attention (2) certaines classes des corrigés sont chargées dans un
package dont le nom commence par ExosPharo; d'autres sont dans
le package TD-HAI931.
Projet
- Sujet
Réalisation du noyau d'un langage de programmation, à objets, réflexif, à métaclasses
explicites (comme dans Objvlisp/CLOS), avec son bootstrap,
implanté avec le langage réflexif Pharo et son
système à métaclasses implicites (c'est beau !).
La réalisation se fera selon le
programme guidé présenté au chapitre 2 du livre
A simple
reflective Object Kernel. Vous pouvez également faire cette implantation
d'une autre façon si vous préférez.
Je vous conseille de travailler avec la version pdf accessible : ici.
a) Lire le chapitre 1 du livre qui est une alternative au cours (très
intéressant revoir des choses connues dites autrement).
b) Réalisez l'exercice présenté dans le chapitre 2 du livre.
- Modalités
Le projet sera réalisé avec mon concours lors des deux dernières séances de TD, puis par votre travail individuel.
- Rendu
Travail individuel. A rendre par courriel, avant la fin de
l'année 2025, à l'adresse christophe.dony@umontpellier.fr avec un document joint nommé impérativement
HAI931I-votreNom-Projet.pdf contenant
un pdf (fait avec le traitement de texte de votre choix)
avec les codes que vous avez écrit pour traiter l'exercice
et avec pour chaque code un commentaire personnel montrant votre
vocabulaire et votre compréhension fine des choses.