Ruby : l'absence de standardisation pointée du doigt

Le langage orienté objet dispose d'une syntaxe simple et efficace qui fait son succès. A l'instar de Python, il tourne sur différentes plates-formes applicatives, dont J2EE et Microsoft .Net.

Ruby est un langage orienté objet. La version de Yukihiro "Matz" Matsumoto, son créateur, est la plus utilisée. Aujourd'hui en version 1.9, ce langage possède un interpréteur officiel implémenté en C, qui tourne sur de nombreux systèmes d'exploitation.

Ruby possède une interface de programmation en langage C lui permettant d'être intégré au sein d'autres logiciels comme Apache ou PostgreSQL. Différents IDE supportent par ailleurs Ruby : Eclipse, Netbeans... La simplicité de sa syntaxe incite à la création d'interpréteurs pour d'autres plates-formes. Il en existe déjà une longue liste. En voici les principaux.

 JRuby est une implémentation entièrement réalisée en Java. Le code Ruby est compilé sous la forme de fichiers .class grâce au compilateur XRuby. Les compilateurs sont écrits dans le langage qu'ils doivent compiler. JRuby tourne sur la JVM (Java Virtual Machine). Il nécessite l'ajout d'un fichier Jar (fichier portant l'extension .war). JRuby permet d'utiliser les librairies Java avec Ruby (par exemple Swing, SWT,...) et inversement. Il est possible d'ajouter des méthodes aux classes Java existantes.

 

Les bibliothèques Ruby les plus populaires fonctionnent actuellement sous JRuby. C'est le cas d'Active Record avec JDBC, une API Java permettant de se connecter à une base de donnée. Ou encore Rails, Rspec, Rake... JRuby est également déployable sur des serveurs d'applications Java EE - comme GlassFish. Néanmoins, l'exécution d'une application en JRuby sera plus lente que celle d'un logiciel en Ruby standard.

 

 Rubinius est le projet d'implémentation de Ruby en Ruby. L'objectif est de développer une machine virtuelle écrite en Garnet, un sous-ensemble du langage Ruby. Basé sur l'architecture Smalltalk-80, ce projet implémente le cœur des librairies Ruby avec certaines fonctionnalités provenant de primitives écrites en C. Le compilateur génère un bytecode distribuable en paquets, similaires aux fichiers Jar.

 

Les nombreuses implémentations de Ruby compliquent un langage qui se veut simple

 

 Cardinal est le projet de développement d'un interpréteur Ruby pour Parrot. Parrot est une machine virtuelle en Perl supportant différents langages dynamiques. Mais ce projet ne bénéficie pas du même dynamisme que les autres implémentations.

 

 Ruby.Net ou RubyCLR permet de développer du code Ruby sous CLR, le moteur d'exécution de .Net. IronRuby est une autre implémentation .Net de Ruby. Elle est construite sur le DLR (Dynamic Language Runtime), une extension du CLR. Concrètement, le code source est transformé par le compilateur Gardens Point en un code intermédiaire pour la plate-forme .Net, baptisé MSIL. Ce code intermédiaire est à son tour compilé lors de la première exécution de l'application grâce au JIT (Just In Time).

 

Il n'y a pas grande différence entre IronRuby et Ruby.Net. IronRuby s'appuie sur la couche de .Net spécialisée dans le traitement des langages dynamiques, tandis que Ruby.Net s'appuie directement sur le CLR. Avec l'arrivée du DLR, les équipes de développement semblent s'orienter vers IronRuby plutôt que Ruby.Net.

 

Devant la multiplication des implémentations de Ruby, John Lam, qui a porté Ruby sur .Net, s'est alarmé. Les interpréteurs donnant chacun des comportements différents, le succès de Ruby risque d'être entravé.

 

John Lam souhaiterait qu'un expert établisse des spécifications communes, comme l'a fait Guy Steele pour le langage Java.