De l'expressivité à l'efficacité : une approche modulaire des langages à objets : le langage PRM et le compilateur prmc
Institution:
Montpellier 2Disciplines:
Directors:
Abstract EN:
This thesis is placed in the context of statically typed languages object-oriented languages as C++ or Eiffel. It is divided into two parts. The first one relates to language specification. It approaches and formalizes the relations between classes and properties while insisting on the problems of the multiple inheritance: a class can redefine methods inherited from classes it specializes. It also proposes the class refinement mechanism which makes it possible to add a posteriori new properties to existing classes. This mechanism, coupled with a concept of module hierarchy, is based on a structural analogy with the relations between classes and properties: a module can refine imported classes from modules on which it depends. Its originality is to take into account multiple dependencies, multiple refinements, and combinations of refinement and specialization. This first part also presents PRM, a language which validates our approach of multiple inheritance, modules, and class refinement. The second part relates to the compilation of object-oriented languages. It proposes an original schema of compilation for object-oriented languages which is separate—the modules are compiled independently of their final uses—and includes global implementation techniques which require the knowledge of the whole program: type analysis, dead code suppression, coloring and binary tree dispatch. These techniques cancel the cost of multiple inheritance and class refinement and strongly reduce the inherent cost of polymorphism of any objectoriented language. The originality of such an approach is the application of global techniques after the compilation of modules. Prmc, the PRM compiler, is then presented, and the schema of compilation we propose is validated by different benchmarks.
Abstract FR:
Cette thèse se place dans le contexte des langages à objets statiquement typés en héritage multiple. Elle est divisée en deux parties. La première concerne la spécification des langages. Elle aborde et formalise les relations entre classes et propriétés en insistant sur la problématique de l'héritage multiple : une classe peut redéfinir les méthodes héritées des classes qu'elle spécialise. Elle propose également le mécanisme du raffinement de class} qui permet d'ajouter a posteriori de nouvelles propriétés à des classes existantes. Ce mécanisme, couplé avec une notion de hiérarchie de modules, est basé sur une analogie structurelle avec les relations entre classes et propriétés : un module peut raffiner les classes importées des modules dont il dépend. Son originalité concerne la prise en compte des dépendances multiples, des raffinements multiples et des combinaisons entre raffinement et spécialisation. Cette première partie présente également PRM, un langage qui valide notre approche de l'héritage multiple, des modules et du raffinement de classes. La seconde partie concerne la compilation des langages à objets. Elle propose un schéma original de compilation pour les langages à objets qui est à la fois séparé (les modules sont compilés indépendamment de leurs utilisations finales) et intègre des techniques d'implémentation globales qui nécessitent la connaissance du programme dans son ensemble : analyse de types, suppression du code mort, coloration et arbres binaires de sélection. Ces techniques annulent le coût lié à l'héritage multiple et au raffinement de classes et réduisent fortement le coût du polymorphisme inhérent à tout langage à objets. L'originalité d'une telle approche réside dans l'application des techniques globales après la compilation des modules. Prmc, le compilateur pour PRM est ensuite présenté et le schéma de compilation proposé est validé par différents benchmarks.