Next: Représentation des connaissances et
Up: Activités de recherche
Previous: Contraintes sur les flottants
  Contents
Ces travaux traitent de différents problèmes liés à la réflexivité dans les langages fonctionnels et
à objets distribués. Durant mon stage de DEA, j'ai eu à utiliser un langage d'acteurs minimaliste
dont les limitations auraient pu être contournées à l'aide de la réflexivité. La réflexivité,
i.e. la capacité qu'a l'interprète d'un langage de se prendre pour objet de son propre calcul,
permet de modifier et d'enrichir les mécanismes d'un interprète. Si son potentiel semble
illimité, elle soulève cependant de nombreux problèmes. Lors de ma thèse, je me suis attaqué
à certain d'entre eux qui vont de la relation entre implémentation et modèle, au problème
de la réutilisation de code réflexif en passant par le problème de l'inefficacité des
interprètes réflexifs. L'ensemble de ces travaux se caractérise par un effort important
d'implémentation.
- Réflexivité globale
- Problème
- Clarification des liens entre la ``philosophie'' de la réflexivité
et son implémentation dans les langages fonctionnels.
- Difficultés
- Dès ses débuts, la réflexivité a bénéficié d'une définition claire.
Cependant, si de nombreux interprètes sont venus illustrer différentes implémentations
possibles, aucun n'a vraiment pris pour objectif de suivre
au plus près la philosophie de la réflexivité. En particulier, la notion de tour
d'interprètes dont l'interprète de niveau interprète celui de niveau
n'a pas été complètement implémentée. Par exemple, les différents interprètes disponibles ne propagent pas
les effets d'une modification de la définition l'interprète de niveau sur
le niveau 0 (ou niveau utilisateur).
- Contributions
- Introduction du concept de réflexivité globale; définition et réalisation d'un interprète réflexif basé sur
une tour virtuellement infinie d'interprètes et qui permet de modifier
de manière permanente le fonctionnement de l'interprète, par opposition à la
modification temporaire du cours de l'interprétation proposée par les
lambda réflexives.
Thèse : chapitre
4 (sert de base à un cours de DEA).
Réalisation : un interprète réflexif,
(utilisé pour illustrer un cours de DEA)
(610 l de code Scheme).
- Évaluation partielle et réflexivité
- Problème
- Utilisation l'évaluation partielle afin de pallier au
problème de l'efficacité des interprètes réflexifs.
- Difficultés
- L'évaluation partielle est une technique de transformation
de programme qui permet de spécialiser un programme à partir d'une spécification
partielle des ses paramètres d'entrée. Ainsi, l'évaluation partielle d'un interprète en fonction
du programme à interpréter (mais sans la connaissance des données passées au programme)
peut se traduire par la suppression de l'appel à l'interprète. Il est naturel d'en déduire
que son application à un interprète réflexif devrait permettre, en supprimant plusieurs
niveaux d'interprétation, de réduire le coût de la réflexivité.
Plusieurs recherches ont donc tenté d'utiliser l'évaluation partielle pour optimiser
les interprètes réflexifs. Mais aucun de ces travaux ne s'est attaqué au problème
de la réduction d'une tour virtuellement infinie d'interprètes, en particulier
lorsque celle-ci permet une réflexivité globale.
- Contributions
- Définition et implémentation d'une technique d'utilisation de l'évaluation partielle
qui réduit effectivement le coût de la réflexivité, qu'elle soit locale
(lambdas réflexives) ou globale.
Thèse : chapitre
5 (sert de support à un cours de DEA).
Réalisation : un interprète réflexif,
(1760 l de code Scheme pour l'interprète et 1998 l de code Scheme pour l'évaluateur partiel).
- Réflexivité dans les langages d'acteurs
- Problème
- Introduction de la réflexivité dans une couche acteur minimaliste
basée sur le modèle de Gul Agha.
- Difficultés
- Si un certain nombre d'interprètes réflexifs pour des langages d'acteurs
ont été écrit, ces travaux se sont concentrés sur les problèmes liés au modèle
laissant de coté les aspects pratiques ainsi que la problématique de l'implémentation.
Or, pour obtenir un interprète effectivement utilisable, il fallait aussi traiter de ces
problèmes.
- Contributions
- Définition et développement d'un interprète réflexif
pour un langage d'acteurs basé sur un découpage fin des mécanismes de l'interprète, LActE/R.
Thèse : chapitre
7 (modèle), 8(implémentation) et 9 (mise en uvre).
Réalisation : LActE/R, un interprète réflexif (utilisé par M. Jean-Christophe Pazzaglia dans sa thèse)
(6580 l de code Lisp).
- Bibliothèques de méta-composants
- Problème
- Permettre de réutiliser les programmes réflexifs.
- Difficultés
- L'un des freins à l'utilisation de la réflexivité est l'accroissement de la
complexité qu'elle introduit. Nous proposions la mise en place de bibliothèques de méta-composants.
Cependant les langages d'acteurs ne disposent pas des outils linguistiques nécessaire à la constitution
de telles bibliothèques. L'objet de ces recherches était donc d'introduire dans les langages d'acteurs
les outils qui permettent la constitution de telles bibliothèques.
- Contributions
- Définition et implémentation d'un système de spécification des éléments réifiés par l'entité méta
qui permet de définir des méta-composants.
Publications : Article long publié dans LMO'99
(Langages et Modèles à Objets).
Réalisation : Un interprète réflexif pour un langage d'acteurs, SActE/R
(2915 l de code C (dont 589 l de macros M4) et 2314 de code Scheme).
Next: Représentation des connaissances et
Up: Activités de recherche
Previous: Contraintes sur les flottants
  Contents
Claude Michel
2002-03-27