UMINR325 -- SILO année 2005-2006



Documents

Supports de cours

(Si vous n'avez pas eu l'un ou l'autre, signalez-le moi)

  1. R. Ducournau and M. Huchard. Programmation par Objets : les concepts fondamentaux. (polycopié de M1) 2000--2005.
  2. R. Ducournau. Implementing statically typed object-oriented programming languages. Rapport de Recherche 02-174, L.I.R.M.M., Montpellier, 2002-05.
  3. R. Ducournau. Perfect hashing as an almost perfect subtype test. Rapport de Recherche 05-xxx, L.I.R.M.M., Montpellier, 2005.
  4. 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

  1. 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.
  2. 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)
  1. Y. Zibin and J. Gil. Two-dimensional Bi-directional Object Layout, Proc. ECOOP'03 (pdf)
  2. Y. Zibin and J. Gil. Efficient Subtyping Tests with PQ-encoding, Proc. OOPSLA'01 (pdf)

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 :
  1. 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 :
  2. 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.
  3. 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.
  4. Etude expérimentale et comparaison des compilateurs EIFFEL (SmartEiffel vs EiffelStudio).
    Les 2 sont disponibles sur les machines de l'UFR.
  5. 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.
  6. 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.
  7. Recherche bibliographique sur les techniques d'implémentation incrémentales (en complément bien sûr de ce qui a été fait en cours)
  8. 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)
  9. Etude de la machine virtuelle JAVA "Corosol" (mêmes questions que ci-dessus) : http://www-igm.univ-mlv.fr/~cdeleray/
  10.  (à suivre)

Sujets de stage

Je proposerai vraisemblablement 2 sujets de stage, qui tourneront autour du sujet du module.
  1. 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.)
  2. le deuxième stage, à définir, portera vraisemblablement sur l'étude de techniques d'implémentation.