11.07.2015 Views

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

SHOW MORE
SHOW LESS
  • 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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!