PRM, prmc Un langage de programmation et un compilateur
PRM, prmc Un langage de programmation et un compilateur
PRM, prmc Un langage de programmation et un compilateur
- No tags were found...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>PRM</strong>, <strong>prmc</strong><strong>Un</strong> <strong>langage</strong> <strong>de</strong> <strong>programmation</strong> <strong>et</strong> <strong>un</strong> <strong>compilateur</strong>Jean PrivatLIRMM161 rue Ada34392 Montpellier Ce<strong>de</strong>x 5 - Franceprivat@lirmm.frRésumé— Ce papier présente <strong>un</strong> <strong>langage</strong> <strong>de</strong> <strong>programmation</strong>(<strong>PRM</strong>) <strong>et</strong> son <strong>compilateur</strong> (<strong>prmc</strong>) en prenant comme points<strong>de</strong> vues l’interaction entre humains <strong>et</strong> ordinateurs, <strong>et</strong> laqualité <strong>de</strong>s logiciels.Mots-clés— <strong>PRM</strong>, <strong>langage</strong> <strong>de</strong> <strong>programmation</strong>, obj<strong>et</strong>s,compilation séparée.I. IntroductionBonjour !0110010 ?A. Langages <strong>de</strong> <strong>programmation</strong>Les <strong>langage</strong>s <strong>de</strong> <strong>programmation</strong> (ou <strong>langage</strong>s informatiques)sont <strong>de</strong>s <strong>langage</strong>s artificiels perm<strong>et</strong>tant d’écrire <strong>de</strong>sprogrammes informatiques. Le co<strong>de</strong> source (ou simplementco<strong>de</strong>) désigne le ✭ texte ✮ d’<strong>un</strong> programme ✭ rédigé ✮ dans<strong>un</strong> <strong>langage</strong> <strong>de</strong> <strong>programmation</strong>.<strong>Un</strong> <strong>langage</strong> <strong>de</strong> <strong>programmation</strong> est constitué d’<strong>un</strong>esyntaxe (le vocabulaire <strong>et</strong> la grammaire) <strong>et</strong> d’<strong>un</strong>esémantique (les abstractions exprimables <strong>et</strong> leur signification).Toutefois, il est nécessaire <strong>de</strong> comprendre qu’<strong>un</strong> <strong>langage</strong> <strong>de</strong><strong>programmation</strong> ne sert pas à discuter avec <strong>un</strong> ordinateurmais plutôt à lui donner <strong>de</strong>s ordres 2 .Fig. 1. Problème <strong>de</strong> comm<strong>un</strong>ication ?Idée Co<strong>de</strong> source ExécutionLa bouta<strong>de</strong> <strong>de</strong> la figure 1 caricature le problèmefondamental sous-jacent à <strong>de</strong> nombreuses recherches eninformatique : comment faire pour que l’humain <strong>et</strong>l’ordinateur puissent interagir ?Le travail que j’ai mené pendant ma thèse concerne<strong>de</strong>ux fac<strong>et</strong>tes <strong>de</strong> ce problème <strong>de</strong> comm<strong>un</strong>ication dans lecadre du développement <strong>de</strong> logiciels. Plus précisément, montravail se situe <strong>de</strong> part (côté humain) <strong>et</strong> d’autre (côtémachine) <strong>de</strong>s <strong>langage</strong>s <strong>de</strong> <strong>programmation</strong> 1 . Côté humain,j’ai travaillé sur les traits <strong>de</strong>s <strong>langage</strong>s <strong>et</strong> proposé leraffinement <strong>de</strong> classes, <strong>un</strong>e extension du modèle à obj<strong>et</strong>s.Côté machine, j’ai travaillé sur la compilation <strong>de</strong>s <strong>langage</strong>s<strong>et</strong> proposé <strong>un</strong> schéma <strong>de</strong> compilation séparé qui perm<strong>et</strong>ted’obtenir l’efficacité <strong>de</strong>s <strong>compilateur</strong>s globaux tout enconservant les avantages <strong>de</strong> la compilation séparée. Afin,<strong>de</strong> m<strong>et</strong>tre en oeuvre les résultats <strong>de</strong> ma recherche, j’aid’<strong>un</strong>e part spécifié <strong>PRM</strong>, <strong>un</strong> <strong>langage</strong> <strong>de</strong> <strong>programmation</strong>qui intègre le raffinement <strong>et</strong> d’autre part implémenté <strong>prmc</strong>,<strong>un</strong> <strong>compilateur</strong> <strong>PRM</strong> efficace <strong>et</strong> séparé.II. Quelques notions <strong>de</strong> baseAfin <strong>de</strong> comprendre le paragraphe précé<strong>de</strong>nt <strong>et</strong> plusparticulièrement les mots en italique, nous allons tenter<strong>de</strong> présenter quelques notions <strong>de</strong> base. Dans <strong>un</strong> premiertemps nous parlerons <strong>de</strong> <strong>langage</strong>s <strong>de</strong> <strong>programmation</strong>, puis<strong>de</strong> la qualité <strong>de</strong>s logiciels. Nous présenterons ensuite les<strong>langage</strong>s à obj<strong>et</strong>s, <strong>un</strong>e famille <strong>de</strong> <strong>langage</strong>s qui perm<strong>et</strong>d’avoir <strong>un</strong>e meilleure qualité <strong>de</strong>s logiciels. Nous termineronsen présentant le mécanisme <strong>de</strong> la compilation.1 Plus précisément encore, <strong>de</strong>s <strong>langage</strong>s <strong>de</strong> <strong>programmation</strong> orientésobj<strong>et</strong>s, statiquement typés <strong>et</strong> en héritage multiple.Programmeur « Écriture »« Lecture »Fig. 2. Programmeur, <strong>langage</strong> <strong>et</strong> ordinateurOrdinateurSi l’on reprend la métaphore <strong>de</strong> la figure 1, on peutdire que les développeurs <strong>de</strong> logiciels informatiques (ouprogrammeurs 3 ) comm<strong>un</strong>iquent avec les ordinateur enutilisant <strong>de</strong>s <strong>langage</strong>s <strong>de</strong> <strong>programmation</strong> (figure 2). C<strong>et</strong>tecomm<strong>un</strong>ication présente <strong>de</strong>ux aspects :Écriture. <strong>Un</strong> programmeur humain doit pouvoir exprimerses ✭ ordres ✮. Le <strong>langage</strong> doit donc être intelligiblepar le programmeur. En général, plus le <strong>langage</strong> estnaturellement intelligible, plus celui-ci est éloigné <strong>de</strong>sinstructions primitives <strong>de</strong>s machines physiques.Lecture. L’ordinateur doit pouvoir ✭ comprendre ✮ le co<strong>de</strong>source. Contrairement aux humains, les machines n’ont pasla capacité d’ ✭ interpréter ✮, elle ne peuvent que lire le co<strong>de</strong>source ✭ à la l<strong>et</strong>tre ✮. Il est donc nécessaire que le <strong>langage</strong>ne soit pas ambigu.Il existe <strong>de</strong> nombreux <strong>langage</strong>s <strong>de</strong> <strong>programmation</strong>sdifférents. Ils se distinguent les <strong>un</strong>s <strong>de</strong>s autres par leursyntaxe bien sûr, mais également par leurs domainesd’utilisation ou les concepts qu’ils manipulent. La figure 3montre <strong>de</strong>ux programmes calculant la factorielle. Lepremier est écrit en Basic <strong>et</strong> le second en C 4 .2 Les <strong>langage</strong>s <strong>de</strong> <strong>programmation</strong> partagent <strong>de</strong> nombreusescaractéristiques avec les <strong>langage</strong>s militaires.3 Évitez le terme ✭✭ programmateur ✮✮ qui ne concerne généralementque les lave-linges <strong>et</strong> l’arrosage automatique.4 Le Basic est <strong>un</strong> <strong>langage</strong> <strong>de</strong> <strong>programmation</strong> développé en 1964
INPUT "Nombre: ", NR = 1FOR A = 1 TO NR = R * ANEXT APRINT N; "! = "; R#inclu<strong>de</strong> int main(void){int a, n, r=1;printf("Nombre: ");scanf("%d", &n);for(a=1; a
prenant en donnée le co<strong>de</strong> source d’<strong>un</strong> programme <strong>et</strong> enproduisant en sortie <strong>un</strong> exécutable.Remarque : en général, <strong>un</strong> <strong>compilateur</strong> ne fonctionne quepour <strong>un</strong> seul <strong>langage</strong> <strong>et</strong> pour <strong>un</strong>e seule plate-forme. Ainsi,<strong>un</strong> <strong>compilateur</strong> C ne saura pas compiler <strong>un</strong> programmeécrit en Basic. De la même manière, l’exécutable produitpar <strong>un</strong> <strong>compilateur</strong> pour microprocesseurs Intel 8086 nepourra pas être exécuté par <strong>un</strong>e machine Apple m<strong>un</strong>ie d’<strong>un</strong>microprocesseur Motorola.D.2 Compilation efficaceParmi les facteurs <strong>de</strong> qualité <strong>de</strong>s logiciels, nous avonsla performance. Or, pour <strong>un</strong> co<strong>de</strong> source donné, plusieurstraductions vers le <strong>langage</strong> machine sont possibles,certaines étant plus performantes que d’autres. <strong>Un</strong><strong>compilateur</strong> est d’autant plus efficace qu’il produit du co<strong>de</strong>machine performant.Toutefois, plus le <strong>langage</strong> <strong>de</strong> <strong>programmation</strong> estéloigné du <strong>langage</strong> machine, plus les techniques <strong>de</strong>compilation perm<strong>et</strong>tant <strong>de</strong> produire du co<strong>de</strong> efficace<strong>de</strong>viennent difficile à trouver. Ainsi, il est malheureusementfréquent que les créateurs <strong>de</strong> <strong>langage</strong>s <strong>de</strong> <strong>programmation</strong>prennent en compte les contraintes <strong>de</strong> compilation pourspécifier leur <strong>langage</strong> ce qui entraîne inévitablement<strong>un</strong> appauvrissement du <strong>langage</strong> (moins d’expressivité)voire <strong>un</strong>e complexification (création <strong>de</strong> nombreux casparticuliers).D.3 Compilation séparée <strong>et</strong> globaleco<strong>de</strong>sourceco<strong>de</strong>sourcesource duprogrammecompilationcompilationco<strong>de</strong>binaireco<strong>de</strong>binaireédition<strong>de</strong> liensFig. 5. La compilation séparéeco<strong>de</strong>binaireexécutableLa compilation est <strong>un</strong> processus complexe <strong>et</strong>, pour <strong>de</strong>nombreuses raisons pratiques, <strong>un</strong> programme n’est jamaiscompilé d’<strong>un</strong> coup. On préfère compiler <strong>un</strong> programme parp<strong>et</strong>its bouts puis produire <strong>un</strong> exécutable en liant ensembleles p<strong>et</strong>its bouts compilés : on appelle ça la compilationséparée (voir figure 5). Les avantages d’<strong>un</strong>e telle façon <strong>de</strong>faire sont nombreux : si l’on modifie <strong>un</strong> programme, seul lebout <strong>de</strong> co<strong>de</strong> modifié a besoin d’être recompilé ; <strong>un</strong>e seulecompilation d’<strong>un</strong> bout <strong>de</strong> co<strong>de</strong> est nécessaire même si celuiciest partagé par plusieurs programmes (cela arrive trèsfréquemment) ; <strong>un</strong> bout <strong>de</strong> co<strong>de</strong> compilé séparément peutêtre vendu tel quel à d’autres programmeurs (le ven<strong>de</strong>urqui le souhaite peut ainsi gar<strong>de</strong>r le co<strong>de</strong> source secr<strong>et</strong>).S’il existe <strong>un</strong>e ✭ compilation séparée ✮, c’est qu’il existe<strong>un</strong>e ✭ compilation globale ✮. Celle-ci consiste à compilerd’<strong>un</strong> coup <strong>un</strong> programme en entier. L’avantage <strong>de</strong> lacompilation globale consiste à profiter <strong>de</strong> la connaissance<strong>de</strong> la totalité du co<strong>de</strong> source pour faire <strong>de</strong>s analyses plusprofon<strong>de</strong>s <strong>et</strong> ainsi tenter <strong>de</strong> produire du co<strong>de</strong> machine plusefficace. Malheureusement, la compilation globale n’offrepas la souplesse <strong>de</strong> la compilation séparée, à tel point quedans l’industrie, l’utilisation <strong>de</strong> <strong>compilateur</strong>s globaux estmarginale.III. <strong>PRM</strong>, le <strong>langage</strong><strong>PRM</strong>, pour ✭ Programmation, raffinement <strong>et</strong> modules ✮,est le <strong>langage</strong> <strong>de</strong> <strong>programmation</strong> que nous avons développé.C’est <strong>un</strong> <strong>langage</strong> <strong>de</strong> <strong>programmation</strong> orienté obj<strong>et</strong> <strong>et</strong>statiquement typé. Il se place donc dans la même familleque C++, Java, C# ou Eiffel 6 (les autres <strong>langage</strong>s que nouscitons ne faisant pas partie <strong>de</strong> c<strong>et</strong>te famille). Toutefois,contrairement à ces quatre <strong>langage</strong>s, <strong>PRM</strong> se distingue<strong>de</strong> <strong>de</strong>ux manières : sa simplicité, puisque les conceptsmanipulés par le <strong>langage</strong>, ainsi que la syntaxe qui endécoule, ont été spécifiés <strong>de</strong> façon à être le plus clair possible(en particulier parce que nous n’avons pas pris en comptedans la spécification du <strong>langage</strong> les éventuels problèmes <strong>de</strong>compilation), <strong>et</strong> son expressivité, puisque celui-ci contiententre autre <strong>de</strong>s traits <strong>de</strong> <strong>langage</strong>s avancés qui n’existent quedans quelques <strong>langage</strong>s voire sont complètement inédits !La syntaxe du <strong>langage</strong> est fortement inspirée <strong>de</strong> celle<strong>de</strong>s <strong>langage</strong>s à typage dynamique <strong>et</strong> <strong>de</strong>s <strong>langage</strong>s <strong>de</strong> script(en particulier Ruby 7 ). Ces <strong>langage</strong>s sont généralementréputés pour leur facilité d’apprentissage <strong>et</strong> d’utilisation.Toutefois, <strong>PRM</strong> revendique Pascal comme l’<strong>un</strong> <strong>de</strong> seslointains ancêtres 8 . Au final <strong>PRM</strong> est sans doute <strong>un</strong> trèsbon <strong>langage</strong> pour débuter la <strong>programmation</strong>, d’ailleursmalgré sa je<strong>un</strong>esse il est déjà utilisé en tant que <strong>langage</strong>d’apprentissage à l’IUT <strong>de</strong> Béziers.Bien que les concepts <strong>de</strong> base du <strong>langage</strong> soient (à<strong>de</strong>ssein) peu nombreux, celui-ci en intègre certains qui sontplus ou moins rares :– héritage multiple (existe en Eiffel <strong>et</strong> en C++) :les classes peuvent hériter <strong>de</strong> plusieurs classes. Celaperm<strong>et</strong> par exemple d’exprimer que les poul<strong>et</strong>s sont àla fois <strong>de</strong>s oiseaux <strong>et</strong> <strong>de</strong>s animaux <strong>de</strong> basse-cour.– les types primitifs sont <strong>de</strong>s classes (existe en Eiffel <strong>et</strong>Ruby) : les autres <strong>langage</strong>s traitent <strong>de</strong> façon différenteles types primitifs (comme les entiers) <strong>de</strong>s classes cequi amène parfois à <strong>de</strong>s complications inutiles pour leprogrammeur.– généricité bornée (existe en Eiffel <strong>et</strong> dans la <strong>de</strong>rnièreversion <strong>de</strong> Java, existe aussi <strong>de</strong> façon non bornée enC++) : c’est <strong>un</strong> concept qui perm<strong>et</strong> d’augmenter leniveau d’abstraction du co<strong>de</strong> source.– redéfinition covariante (existe en Eiffel mais pasexactement pour les mêmes raisons) : cela perm<strong>et</strong> parexemple d’exprimer <strong>de</strong>s choses comme ✭ les animauxmangent <strong>de</strong> la nourriture <strong>et</strong> les vaches mangent <strong>de</strong>l’herbe ✮ 9 .– itérateurs automatiques (existe en Ruby <strong>et</strong> dans la<strong>de</strong>rnière version <strong>de</strong> Java) : cela perm<strong>et</strong> <strong>de</strong> manipuler6 Bjarne Stroustrup a développé C++ au cours <strong>de</strong>s années 1980 entant qu’extension du <strong>langage</strong> C. Java est <strong>un</strong> <strong>langage</strong> conçu en 1995chez S<strong>un</strong> Microsystems par James Gosling <strong>et</strong> Patrick Naughton. C#,créé par la société Microsoft, est <strong>un</strong> <strong>langage</strong> proche <strong>de</strong> Java. Eiffel,développé par Bertrand Meyer à partir <strong>de</strong> 1985, est <strong>un</strong> <strong>langage</strong> qui seconcentre sur la qualité logicielle.7 Yukihiro Matsumoto a commencé l’écriture <strong>de</strong> Ruby en 1993 avec<strong>un</strong> objectif <strong>de</strong> cohérence <strong>et</strong> d’intelligibilité.8 Pascal est <strong>un</strong> <strong>langage</strong> crée par Niklaus Wirth en 1970 à l’<strong>un</strong>iversité<strong>de</strong> Zurich. Il a été conçu pour servir à l’enseignement <strong>de</strong> la<strong>programmation</strong> <strong>de</strong> manière rigoureuse mais simple.9 Toute la subtilité d’<strong>un</strong>e telle banalité consiste à remarquer qu’ilexiste malgré tout <strong>un</strong> sophisme : les animaux mangent <strong>de</strong> lanourriture, or les vaches sont <strong>de</strong>s animaux, donc les vaches mangent <strong>de</strong>la nourriture, or les saucisses sont <strong>de</strong> la nourriture, donc on pourraitnourrir les vaches avec <strong>de</strong>s saucisses.
simplement les collections d’éléments, quelque soit l<strong>et</strong>ype <strong>de</strong> la collection ou <strong>de</strong>s éléments. On peut alorsexprimer simplement <strong>de</strong>s choses comme ✭ pour chaquelapin du clapier, donner <strong>un</strong>e carotte ✮ ou ✭ pour chaqueclient abonné, envoyer <strong>un</strong>e facture ✮.Les <strong>de</strong>ux principaux concepts inédits sont l’héritagemultiple sémantique idéal <strong>et</strong> le raffinement <strong>de</strong> classes.Les différentes spécifications <strong>de</strong> l’héritage multiple dansles <strong>langage</strong>s existants posent tellement <strong>de</strong> problèmes(peu intelligibles, voire parfois franchement ambiguës) quecertaines documentations vont jusqu’à conseiller <strong>de</strong> ne pasfaire d’héritage multiple. Notre spécification <strong>de</strong> l’héritagemultiple se base exclusivement sur <strong>un</strong>e approche naturelle<strong>de</strong> la spécialisation (c’est-à-dire sans prise en comptes<strong>de</strong>s problématiques <strong>de</strong> compilation). Au final, l’héritagemultiple <strong>de</strong> <strong>PRM</strong> est plus simple (à comprendre <strong>et</strong> àutiliser) <strong>et</strong> gère plus naturellement les divers conflitsd’héritage.Le raffinement <strong>de</strong> classes [1] perm<strong>et</strong> <strong>un</strong>e meilleuresouplesse <strong>de</strong>s logiciels. L’idée <strong>de</strong> base consiste à pouvoirfaire évoluer (raffiner) <strong>un</strong>e classe d’<strong>un</strong> programme sansavoir à modifier le morceau <strong>de</strong> co<strong>de</strong> source dans lequel estdéfinie la classe. Ne pas avoir à toucher <strong>un</strong> morceau <strong>de</strong> co<strong>de</strong>source existant est <strong>un</strong> réel avantage dans certains cas :– le morceau <strong>de</strong> co<strong>de</strong> source est partagé par plusieursprogrammes donc la modification <strong>de</strong> ce morceau <strong>de</strong>co<strong>de</strong> aurait <strong>un</strong> impact sur tous les programmes (cequi n’est pas forcément souhaité) ;– le morceau <strong>de</strong> co<strong>de</strong> source est inaccessible (on nous avendu, sans les sources, <strong>un</strong> bout <strong>de</strong> co<strong>de</strong> déjà compilé) ;– on veut <strong>de</strong>ux versions du programme, <strong>un</strong>e sansl’évolution, <strong>un</strong>e avec l’évolution. Il est donc nécessaire<strong>de</strong> pouvoir conserver le morceau <strong>de</strong> co<strong>de</strong> non modifié.D’autres approches ont été proposées pour répondreaux mêmes besoins (parmi lesquelles la <strong>programmation</strong>orientée aspect). Toutefois, notre proposition a l’avantage<strong>de</strong> s’intégrer parfaitement à notre spécification <strong>de</strong> l’héritagemultiple <strong>et</strong> perm<strong>et</strong> <strong>de</strong> conserver le <strong>langage</strong> simple <strong>et</strong>intelligible.IV. <strong>prmc</strong>, le <strong>compilateur</strong><strong>prmc</strong>, pour ✭ <strong>PRM</strong> Compiler ✮, est le <strong>compilateur</strong> quenous sommes en train <strong>de</strong> développer pour le <strong>langage</strong> <strong>PRM</strong>.Notre objectif est ici <strong>de</strong> m<strong>et</strong>tre en œuvre les techniques <strong>de</strong>compilation que nous avons développées (qui sont toutefoisapplicables à tout <strong>langage</strong> à obj<strong>et</strong>s <strong>et</strong> statiquement typé).A. Principe <strong>de</strong> compilationComme nous l’avons dit précé<strong>de</strong>mment, plus <strong>un</strong> <strong>langage</strong>est intelligible, plus celui-ci est éloigné du fonctionnement<strong>de</strong> la machine, <strong>et</strong> plus celui-ci est difficile à compilerefficacement. Comment les <strong>langage</strong>s <strong>et</strong> <strong>compilateur</strong>s fontilspour résoudre ce problème ? Trois voies existent : le<strong>langage</strong> peut faire <strong>de</strong>s concessions à l’intelligibilité (c’estle choix <strong>de</strong> C++ par exemple, choix que nous réprouvonscar nous pensons qu’<strong>un</strong> <strong>langage</strong> n’a pas à être corrompupar <strong>de</strong>s considérations bassement matérielles) ; le <strong>langage</strong>peut faire <strong>de</strong>s concessions à la performance (c’est le choix<strong>de</strong>s <strong>langage</strong>s <strong>de</strong> script comme Ruby, choix honorable s’il enest) ; le <strong>langage</strong> peut faire <strong>de</strong>s concessions à la souplesse<strong>de</strong> la compilation. C<strong>et</strong>te troisième voie consiste à ajouter<strong>de</strong>s contraintes au processus <strong>de</strong> compilation comme parexemple utiliser <strong>un</strong> <strong>compilateur</strong> global (c’est le choix <strong>de</strong>SmartEiffel, <strong>un</strong> <strong>compilateur</strong> pour Eiffel).Nous proposons <strong>un</strong>e quatrième voie : utiliser <strong>un</strong> schéma<strong>de</strong> compilation séparée mais qui intègre <strong>de</strong>s techniquesglobales jusque là réservés au <strong>compilateur</strong>s globaux. L’idée<strong>de</strong> base consiste à repousser jusqu’au <strong>de</strong>rnier momentl’application <strong>de</strong> ces techniques, ce <strong>de</strong>rnier moment étant àl’édition <strong>de</strong> liens (le moment où les bouts <strong>de</strong> co<strong>de</strong> compiléssont liés ensemble, voir figure 5). Toutefois, il nous a fallurésoudre <strong>un</strong> problème <strong>de</strong> taille : lors <strong>de</strong> l’édition <strong>de</strong> liens,le co<strong>de</strong> source du programme a déjà été compilé <strong>et</strong> il n’estplus possible <strong>de</strong> revenir sur la traduction puisque le co<strong>de</strong>source n’est plus disponible à ce moment là. La solution àce problème est détaillée dans [2].B. PerformancesLe <strong>compilateur</strong> <strong>prmc</strong> tient ses promesses d’efficacitécomme le prouvent les différents tests que nous avonseffectués.Temps (s)111098765432g++smarteiffel<strong>prmc</strong>10 5 10 15 20 25 30 35Nombre <strong>de</strong> réponses potentielles par envoi <strong>de</strong> messageFig. 6. Performances <strong>de</strong> trois <strong>compilateur</strong>sEn particulier, la figure 6 compare l’implémentation <strong>de</strong>l’envoi <strong>de</strong> message vis-à-vis <strong>de</strong> trois <strong>compilateur</strong>s : g++ (<strong>un</strong><strong>compilateur</strong> séparé pour C++), SmartEiffel (le <strong>compilateur</strong>global Eiffel) <strong>et</strong> <strong>prmc</strong>. En abscisse nous faisons varier lacomplexité <strong>de</strong>s envois <strong>de</strong> messages (le nombre <strong>de</strong> classesdifférentes <strong>de</strong>s receveurs potentielles) <strong>et</strong> en ordonnée nousnotons le temps mesuré. Résultat, on remarque que <strong>prmc</strong>est aussi efficace que le <strong>compilateur</strong> global (<strong>et</strong> même plusefficace dans les envois <strong>de</strong> messages les plus complexes !)V. PerspectivesBien qu’utilisable, le <strong>langage</strong> <strong>PRM</strong> <strong>et</strong> son <strong>compilateur</strong><strong>prmc</strong> sont actuellement en développement. Nous espéronsobtenir <strong>un</strong>e première version stable <strong>et</strong> utilisable par tout<strong>un</strong> chac<strong>un</strong> c<strong>et</strong> été.Pour en savoir plus (ou pourquoi pas participer àl’élaboration), vous pouvez consulter le site web :http://www.lirmm.fr/ ∼ privat/prmRéférences[1] J. Privat <strong>et</strong> R. Ducournau. Raffinement <strong>de</strong> classes dans les<strong>langage</strong>s à obj<strong>et</strong>s statiquement typés. M. Huchard, S. Ducasse,<strong>et</strong> O. Nierstrasz, editors, Actes LMO’05 in L’Obj<strong>et</strong> vol. 11, pages17–32. Hermès, 2005.[2] J. Privat <strong>et</strong> R. Ducournau. Link-time static analysis for efficientseparate compilation of object-oriented languages. M. Ernst <strong>et</strong>T. Jensen, editors, Program Analysis for Software Tools andEngineering, pages 29–36, 2005.