UMINR325 -- SILO année 2005-2006
Documents
Supports de cours
(Si vous n'avez pas eu l'un ou l'autre, signalez-le moi)
- R. Ducournau and M. Huchard. Programmation
par Objets : les concepts fondamentaux. (polycopié de M1) 2000--2005.
- R. Ducournau. Implementing statically
typed object-oriented programming
languages. Rapport de Recherche 02-174, L.I.R.M.M., Montpellier,
2002-05.
- R. Ducournau.
Perfect hashing as an almost
perfect subtype test. Rapport de Recherche 05-xxx, L.I.R.M.M.,
Montpellier, 2005.
- R. Ducournau. La coloration pour
l'implémentation des langages à
objets à
typage statique In M. Dao et M. Huchard, editors, Actes LMO'02
, pages
79--98, 2002 (ps).
Sur l'analyse de types
- Tip, F. and Palsberg, J. 2000. Scalable
propagation-based call
graph construction algorithms. In Proceedings of the 15th
ACM
SIGPLAN Conference on Object-Oriented Programming, Systems, Languages,
and Applications (Minneapolis, Minnesota, United States). OOPSLA
'00. ACM Press, New York, NY, 281-293.
- Agesen, O. 1995. The Cartesian
Product Algorithm: Simple and
Precise Type Inference Of Parametric Polymorphism. In Proceedings
of the 9th European Conference on Object-Oriented Programming
(August 07 - 11, 1995). W. G. Olthoff, Ed. Lecture Notes In Computer
Science, vol. 952. Springer-Verlag, London, 2-26. Full
article in PDF
Examen écrit
L'examen écrit portera sur les deux articles suivants
(distribués le 19 octobre)
- Y. Zibin and J. Gil. Two-dimensional
Bi-directional Object
Layout, Proc. ECOOP'03 (pdf)
- Y. Zibin and J. Gil. Efficient
Subtyping Tests with PQ-encoding,
Proc. OOPSLA'01 (pdf)
- Préparez un résumé dactylographié (2
pages max. pour chaque article) en le corrélant à ce qui
a été
vu en cours ;
- Le sujet d'examen comportera des questions plus précises.
- Date : mercredi 14
décembre
de 8h30
à 11h30, salle 28 ED I2S.
- Tous documents autorisés.
Examen de Rattrapage
L'examen de rattrapage du module 325 portera sur l'article suivant : An Overview
of the Scala Programming Language
L'examen portera exclusivement sur la hierarchie de classes et types de
SCALA et sur la façon dont l'implémentation sur la
machine virtuelle JAVA a pu être faite. La question est donc plus
précisément celle de l'implémentation d'une
hiérarchie de classes qui est presque en héritage
multiple, sur une machine virtuelle qui en héritage simple et
sous-typage multiple.
Prenez comme point de comparaison la section 6.2 de mon support de
cours "Implementing Statically Typed OO Programming Languages".
Ne vous préoccupez pas du caractère fonctionnel de Scala
et concentrez vous sur les 3 mécanismes de base : appel de
méthodes, accès aux attributs et test de sous-typage.
Préparez un résumé portant sur cet aspect du
langage SCALA
L'examen aura lieu dans la semaine du 8 mai (date à
préciser ultérieurement).
Projets
Voici un début de liste de projets individuels :
- Etude expérimentale de l'implémentation de
compilateurs C++
L'objectif est de tester des compilateurs C++ (gcc, disponible partout,
mais aussi Microsoft ou Solaris), pour voir quelles techniques
d'implémentation ils utilisent.
Techniquement, on s'appuiera sur la possibilité de superposer
une structure ou
un tableau C à n'importe quel "objet" C++. A tester :
- avec ou sans VBPTRs
- avec ou sans thunks
- optimisation des sous-objets
vides
- l'implémentation de la covariance
du type de retour
- implémentation de dynamic_cast
: vérifier qu'il y a bien appel de fonction et examiner les
sources du compilateur (si disponible ...) pour voir comment c'est
implémenté.
- Etude expérimentale de l'efficacité de compilateurs
C++
L'objectif est de tester l'efficacité de petits programmes C++
testant les mécanismes de base (appel de méthode,
accès aux attributs, test de sous-typage), en faisant varier les
configurations, par exemple le nombre de super-classes dans le cas du
sous-typage, ainsi que les diverses configurations des types statiques
et des types qui introduisent ou définissent les
propriétés dans le cas des méthodes et des
attributs.
Il faut ici aussi expérimenter sur divers compilateurs.
- Etude expérimentale de plate-formes JAVA ou .NET (suivant
disponibilité) : même chose qu'en C++, en couplant mesure
de performance et analyse de l'implémentation.
Parmi les éléments à tester, l'influence du typage
par des interfaces ou des classes (par ex. le même prorgramme
peut être typé par l'un ou par l'autre).
Idem pour le test de sous-typage.
- Etude expérimentale et comparaison des compilateurs EIFFEL
(SmartEiffel vs EiffelStudio).
Les 2 sont disponibles sur les machines de l'UFR.
- Recherche bibliographique sur le hachage parfait dans
l'implémentations des langages de programmation
(interprètes ou compilateurs) : il faut collecter les
références bibliographiques et examiner à quoi est
appliqué le hachage parfait et comment il est mis en oeuvre
exactement.
- Recherche bibliographique sur l'implémentation du test de
sous-typage et de invokeinterface
en JAVA et DOTNET.
En particulier examiner en détail les techniques à base
de cache et celles à base de hachage.
- Recherche bibliographique sur les techniques
d'implémentation incrémentales (en complément bien
sûr de ce qui a été fait en cours)
- Etude de l'implémentation et des performances de deux
plate formes .NET open-source: Mono et DotGNU.
La plate forme mono est dévelopée par Miguel De Icaza,
initiateur du projet GNOME et employé de Novell. Le page du
projet est la suivante: http://www.mono-project.com
Elle est sous license BSD like.
La plate forme DotGNU elle est sous license GPL. La page du projet est
celle-ci: http://www.dotgnu.org/
(merci à Jean-Remy Falleri)
- Etude de la machine virtuelle JAVA "Corosol" (mêmes
questions que ci-dessus) : http://www-igm.univ-mlv.fr/~cdeleray/
- (à suivre)
- Procédure : m'envoyer un message pour indiquer votre choix
(quand la liste sera complète)
venir éventuellement en discuter avec moi
rendre le projet avant les vacances de fin d'année.
- Remarques pour les bibliographies :
partez des biblio des articles que vous avez et cherchez d'autres
références.
Utilisez google et les autres moteurs de recherche
Pour les fichiers pdf : faites des recherches de chaînes de
caractères pour accélérer la recherche (inutile de
lire un article s'il ne parle pas de ce que vous cherchez)
si vous n'arrivez pas à accéder au texte complet d'un
article (besoin de mot de passe par ex.), venez me voir : j'ai
peut-être les droits d'accès.
- Remarques pour les implémentations C++
attention de bien vous servir de C++ (virtual partout)
Sujets de stage
Je proposerai vraisemblablement 2 sujets de stage, qui tourneront
autour du sujet du module.
- un stage dont l'objectif sera l'implémentation du compilateur
PRM en PRM.
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.
PRM est actuellement compilé de façon ad hoc : il
s'agirait de développer un beau compilateur, écrit en PRM
et basé sur un méta-modèle du langage ainsi que
sur les techniques de compilation que nous étudions (coloration,
analyse de types, optimisations globales à l'édition de
liens, etc.)
- le deuxième stage, à définir, portera
vraisemblablement sur l'étude de techniques
d'implémentation.
- Procédure : si vous êtes intéressés,
même peu, venez en discuter avec Jean Privat et moi.