Ruby

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Ruby (homonymie).
Ruby
Logo.

Apparu en 1995
Auteur Yukihiro Matsumoto
Développeurs Yukihiro Matsumoto et des contributeurs
Dernière version 2.1.1 (24 février 2014) [+/−]
Paradigmes Objet, impératif, concurrent, fonctionnel
Typage Fort, dynamique
Influencé par Eiffel, Lisp, Smalltalk, Perl, Python, Dylan, Ada et CLU
A influencé langage D[1], Groovy, Perl 6
Implémentations Ruby, YARV, Ruby MRI, JRuby, XRuby, Rubinius, Cardinal, Gardens Point Ruby.NET, IronRuby, MacRuby, android-ruby
Système d'exploitation Multiplate-forme
Licences Licence Ruby et GNU GPL
Site web www.ruby-lang.org

Ruby est un langage de programmation libre. Il est interprété, orienté objet et multi-paradigme. Le langage a été standardisé au Japon en 2011 (JIS X 3017:2011)[2], et en 2012 par l'Organisation internationale de normalisation (ISO 30170:2012)[3].

Historique[modifier | modifier le code]

Yukihiro « Matz » Matsumoto est le créateur de Ruby. Frustré par son expérience en développement Smalltalk et Lisp, il débute la conception d'un nouveau langage en 1993 sous Emacs, puis publie une première version en 1995 sous licence libre. Il enchaîne depuis les nouvelles versions.

Des changements de version majeurs ont eu lieu[4] :

La dernière version stable est la 2.1.0, publiée le 25 décembre 2013[8].

Depuis l'arrivée d'une documentation anglophone, et du framework web Ruby on Rails en 2004, Ruby a connu un certain engouement qui n'a cessé de croître jusqu'en 2007 dans le monde de la programmation[9].

Philosophie[modifier | modifier le code]

Ruby est fortement orienté objet et se rapproche ainsi du paradigme objet de Smalltalk[10] :

Malgré cet aspect exclusivement objet, la programmation procédurale est possible et fréquente. Ruby utilise une syntaxe simple, inspirée par Eiffel et Ada[11].

Le langage est souvent présenté comme évitant au maximum les mauvaises surprises, selon le principe de moindre surprise[12]. Mais puisqu'il n'est pas possible d'éviter la surprise de tous les utilisateurs, Yukihiro Matsumoto précise qu'il cherche surtout à éviter sa propre surprise[13]. Ainsi, plus on connaît le langage, plus on connaît la logique de son auteur, et moins on s'étonne des fonctionnalités qu'on découvre.

Fonctionnalités[modifier | modifier le code]

Les fonctionnalités principales sont :

Implémentations[modifier | modifier le code]

L'interpréteur officiel, Ruby MRI, fonctionne sur de nombreux systèmes d'exploitation : UNIX, Linux, Microsoft Windows, MS-DOS, OS X, OS/2, AmigaOS, etc. Il est publié sous la double licence libre GNU GPL et la licence Ruby[15].

Ruby est fourni avec irb, un interpréteur de commandes interactif pour tester en profondeur le fonctionnement du langage. Il existe une version web d'irb pour tester Ruby dans un navigateur[16].

Depuis le 1er janvier 2007, le développement de Ruby (1.9) est basé sur l'interpréteur YARV écrit par Koichi Sasada[17]. Ce nouvel interpréteur apporte un gain notable en performances[18].

Il existe plusieurs autres interpréteurs Ruby[18] :

JRuby[19] 
Il est écrit en Java et interprète directement du code source écrit en Ruby.
XRuby 
Il convertit du code Ruby en bytecode Java et est plus rapide sur certains tests de performance que la version 1.8.5 de l'interpréteur officiel[20].
Rubinius 
Une machine virtuelle simplifiée, inspirée de Smalltalk-80[21], implémentée en Ruby même.
Cardinal[22] 
Un interpréteur fonctionnant sous Parrot.
Gardens Point Ruby.NET 
Un interpréteur fonctionnant sur le framework .NET[23].
IronRuby 
Un compilateur fonctionnant sur la DLR du framework .NET[24].
Ruby for .Net 
Un compilateur fonctionnant sur la CLR du framework .NET qui a été abandonnée au profit de IronRuby.
MacRuby 
implémentation de Ruby 1.9 spécifique à OS X, fonctionnant par dessus le runtime Objective-C[25], permettant un usage natif des composants Cocoa, contrairement aux bindings RubyCocoa.

À noter qu'il existe aussi une solution non-libre, commercialisée par HipByte basée sur le travail du projet MacRuby, appelé RubyMotion crée par Laurent Sansonetti

La version 2.0 permet de créer des applications graphiques pour OS X et pour IOS.

Interprètes embarqués[modifier | modifier le code]

Ruby possède une interface de programmation en langage C qui lui permet d'être intégré au sein d'autres logiciels. Ruby est notamment utilisable dans :

Le logiciel de création de jeu vidéo RPG Maker intègre dans ses versions XP et VX une bibliothèque nommée RGSS, Ruby Game Scripting System permettant l'usage de scripts en Ruby.

Bibliothèques[modifier | modifier le code]

Il existe de nombreuses bibliothèques de fonctionnalités adjoignables au langage. Le dépôt historique de ces bibliothèques est le Ruby Application Archive (RAA)[26]. Il contient des fonctionnalités supplémentaires pour Ruby comme des bibliothèques de classes et de modules, mais aussi des extensions permettant d'utiliser des bibliothèques tierces.

Le RAA contient également des logiciels écrits en Ruby. Parmi ces logiciels on trouve notamment Rubygems qui est un outil d'empaquetage et d'installation pour les extensions Ruby[27]. Il permet de déployer rapidement des bibliothèques et des programmes Ruby.

Le site web Rubyforge[28] est également un hébergeur important de programmes et de bibliothèques écrites en Ruby.

Exemples[modifier | modifier le code]

Le classique Hello world :

puts "Hello World!"

Utilisation des objets :

# Tout est objet, même les nombres:
-199.abs                                                # 199
"ruby is cool".length                                   # 12
"Rick".index "c"                                        # 2
"Nice Day Isn't It?".downcase.split(//).sort.uniq.join  # " '?acdeinsty"

Utilisation de Mixin et de l'Héritage

module AnimalSkills
  def eat
    puts "I'm eating !"
  end
 
  def move
    puts "I'm moving !"
  end
 
  def express; puts "I'm expressing !" end
end
 
class Animal
  include AnimalSkills # mixin
 
  @@name = 'an animal' # variable de classe
 
  def initialize size, weight, color # initialisation des variables d'instance
    @size = size.to_i
    @weight, @color = weight.to_i, color.to_s
  end
 
  def describe
    puts "I'm #{@@name} !"
    puts "I'm #{@size} meter tall, I weigh #{@weight} kilograms and I'm " << @color
  end
end
 
class Zebra < Animal # héritage
  @@name = 'a zebra' # rédéfinition de la variable de classe
 
  def initialize(size, weight, color = 'black and white') # surcharge
    super # appel de la méthode de la classe mère (Animal)
  end
end
 
z = Zebra.new(1, 50)
 
z.describe # => I'm a zebra ! / I'm 1 meter tall, I weigh 50 kilograms and I'm black and white
z.eat # => I'm eating !

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :

Articles connexes[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Notes et références[modifier | modifier le code]