PRM, prmc Un langage de programmation et un compilateur LIRMM Informatique Doctiss 06 Journée des doctorants de l I2S 13 avril 2006
1 Introduction 2 Le langage PRM Programmation, Raffinement, Modules 3 séparée et globale Le compilateur prmc Performances 4
Problématique principale Problème de communication? Bonjour! 0110010? Deux côtés du développement de logiciels Humain langages de programmation PRM Machine compilation prmc
Langage de programmation Le langage PRM Programmation, Raffinement, Modules Définition large Un système de codage permettant d écrire un programme Plus de 8000 langages de programmation! Plus précisément Syntaxe Vocabulaire + Grammaire Sémantique Abstractions exprimables + Signification Code source Le texte d un programme rédigé dans un langage de programmation
Exemple de code source Le langage PRM Programmation, Raffinement, Modules Factorielle en PRM print("nombre : ") let n := gets.to i let r := 1 while n > 1 do r := r * n n := n - 1 end print(n, "! = ", r)
L homme et la machine Le langage PRM Programmation, Raffinement, Modules Langage de programmation = Interface Mode de pensée humain Langage de programmation Mode de fonctionnement de la machine Idée programmation code source compilation Exécution Développeur (Humain) Ordinateur (Machine)
Le langage PRM Programmation, Raffinement, Modules Un bon langage de programmation Qualités d ingénierie des logiciels Facilite l écriture de programmes de qualité Conformité, Fiabilité, Efficacité, etc. Maintenabilité, Réutilisabilité, etc. Qualités intuitives de représentation Proche du mode de pensée humain Le programmeur s exprime facilement Non corrompu par l implémentation
Le langage PRM Programmation, Raffinement, Modules Historique Simula 1967, Smalltalk 1973 C++ 1980, Eiffel 1985 Ruby 1993, Java 1995, C# 2001 Paradigme actuellement dominant Bon paradigme Qualités d ingénierie des logiciels Qualités intuitives de représentation
Le paradigme objet Le langage PRM Programmation, Raffinement, Modules 4 notions originales Objet Abstraction unique qui encapsule données + traitements Classe Regroupe les objets + factorise les propriétés communes Envoi de message L objet décide de son comportement Héritage Une classe hérite les propriétés des classes qu elle spécialise
Le langage PRM Introduction Le langage PRM Programmation, Raffinement, Modules Caractéristiques principales Langage à objets Statiquement typé (comme C++ ou Java) Aucune concession à l implémentation Concepts et syntaxe Concepts Simples, cohérents et intuitifs Syntaxe Claire, Rigoureuse et concise Facile à apprendre Agréable à utiliser
Le langage PRM Programmation, Raffinement, Modules Comparaison des langages à objets Quelques caractéristiques PRM C++ Eiffel Java Ruby Héritage multiple Oui Oui Oui Non Non Tout est objet Oui Non Oui Non Oui Itérateurs automatiques Oui Non Non Oui Oui Généricité bornée Oui Non Oui Oui Typage covariant Oui Non Oui Non
Modules Introduction Le langage PRM Programmation, Raffinement, Modules Besoin de modularité Un programme est un système complexe (OO.org > 10 000 000 lignes de code) Diviser pour régner Modularité Un programme est décomposé en modules Un module contient des classes Un module correspond à une préoccupation Un module dépend d autres modules Un module importe les classes des modules dont il dépend
Raffinement de classe Le langage PRM Programmation, Raffinement, Modules Besoin Modification de classes sans toucher au code source Code partagé ou indisponible Variations d un programme Principe Un module peut raffiner les classes importées Idée de définition incrémentale L ordre des raffinements est déduit de l ordre des modules
séparée et globale Le compilateur prmc Performances 1 Introduction 2 Le langage PRM Programmation, Raffinement, Modules 3 séparée et globale Le compilateur prmc Performances 4
Introduction séparée et globale Le compilateur prmc Performances Définitions Compiler Traduire le code source d un programme vers le langage machine Exécutable Forme résultante d un programme après compilation Compilateur Programme qui prend en donnée un source et produit un exécutable efficace Plusieurs traductions possibles Langage proche de la machine facile à compiler
séparée (1) séparée et globale Le compilateur prmc Performances Besoin La compilation est un processus complexe (OO.org 8h) Diviser pour régner Principe code source code source source du programme compilation compilation code binaire code binaire édition de liens code binaire exécutable Module compilé indépendamment de l utilisation finale Exécutable construit en liant les modules compilés
séparée (2) séparée et globale Le compilateur prmc Performances Avantages Petite modification de source petite recompilation Module compilé une fois même si celui-ci est partagé Un module compilé est distribuable
globale séparée et globale Le compilateur prmc Performances Idée Profiter de la connaissance globale d un programme pour le compiler efficacement Compiler un programme d un coup Produire du code machine spécifique et efficace Inconvénients N a pas les avantages de la compilation séparée Utilisation marginale dans l industrie
Le compilateur prmc séparée et globale Le compilateur prmc Performances Problématique Respecter l approche modulaire de PRM Être efficace malgré les abstractions de haut niveau Solution Intégrer des techniques d implémentation globales dans un schéma de compilation séparée
séparée et globale Le compilateur prmc Performances Techniques globales en compilation séparée (1) Principe Appliquer les techniques globales dès que la totalité du programme est connu c-à-d à l édition de liens code source code source source du programme compilation compilation code binaire code binaire édition de liens code binaire exécutable
séparée et globale Le compilateur prmc Performances Techniques globales en compilation séparée (2) Problème Le code source n est plus disponible Les modules sont déjà compilés Solution (aperçu) Lors de la compilation de chaque module : Ajouter de méta-informations Prévoir des trous dans le code binaire
Performances Introduction séparée et globale Le compilateur prmc Performances Comparaison de trois compilateurs Temps (s) 11 10 9 8 7 6 5 4 3 2 1 g++ smarteiffel prmc 0 5 10 15 20 25 30 35 Nombre de réponses potentielles par envoi de message
Introduction Work in progress PRM et prmc encore en développement Une version stable pour cet été? Perspectives Langage Traits supplémentaires : multi-méthodes, contrats... Bibliothèque Base de données, cgi, interface graphique... Compilateur Plus de techniques globales...
Questions? http://www.lirmm.fr/ privat/prm