Ruby 2631 31507694 2008-07-11T22:23:25Z TcheBTchev 237454 /* Implémentations */ orthographe {{Voir homonymes}} {{Infobox Langage de programmation | nom = Ruby | logo = [[Image:Ruby-logo-notext.png]] | paradigmes = [[Programmation orientée objet|Objet]], [[Programmation impérative|impératif]], [[Programmation concurrente|concurrent]], [[Programmation fonctionnelle|fonctionnel]] | année = [[1995]] | auteur = [[Yukihiro Matsumoto]] | développeurs = [[Yukihiro Matsumoto]] et des contributeurs | dernière version = 1.8.7<ref>[http://www.ruby-lang.org/fr/downloads/ Télécharger Ruby sur le site officiel]</ref> ({{Date|31|mai|2008|en informatique}}) | typage = [[Typage dynamique|dynamique]] | implémentations = Ruby, [[YARV]], JRuby, XRuby, Rubinius, Cardinal, Gardens Point Ruby.NET | dialectes = | influencé par = [[Perl (langage)|Perl]], [[Smalltalk]], [[Python (langage)|Python]], [[Lisp]], [[Dylan (langage)|Dylan]] et [[CLU (langage)|CLU]] | a influencé = [[Groovy (langage)|Groovy]], [[Perl 6]] | système d'exploitation = [[Multiplate-forme]] | licences = Licence Ruby et [[Licence publique générale GNU|GPL]] | site web = [http://www.ruby-lang.org/ ruby-lang.org] }} [[Ruby]] est un [[langage de programmation]] sous licence [[Logiciel libre|libre]]. Il est [[Interprète (informatique)|interprété]], [[Programmation orientée objet|orienté objet]], et multi-[[paradigme (programmation)|paradigme]]. == Présentation == Ruby est un langage de programmation [[Programmation orientée objet|orienté objet]]. Le nom Ruby n'est pas un [[Acronymie|acronyme]] mais un [[jeu de mots]] sur [[Perl (langage)|Perl]]<ref>[http://www.informit.com/articles/article.asp?p=18225&rl=1 The Ruby Programming Language], article de [[Yukihiro Matsumoto]] publié sur [http://www.informit.com/ informit.com] le 12 juin 2000</ref>. === Historique === [[Yukihiro Matsumoto|Yukihiro "Matz" Matsumoto]] est le créateur de Ruby. Ne trouvant pas dans les langages de programmation déjà existants (dont [[Perl]] et [[Python (langage)|Python]]) de quoi le satisfaire, il commenca l'écriture en [[1993]] et publia une première version en [[1995]]. Depuis, les versions se sont enchaînées, généralement pour [[Noël]]<ref>Voir les dates de publication des versions [ftp://ftp.ruby-lang.org/pub/ruby/1.6/ 1.6] et [ftp://ftp.ruby-lang.org/pub/ruby/1.8/ 1.8]</ref>. Les changements de version majeurs ont eu lieu<ref>[ftp://ftp.ruby-lang.org/pub/ruby/ Site FTP officiel de téléchargement]</ref> : * le {{Date|25|décembre|1998}} pour la version 1.2.0, * le {{Date|13|août|1999}} pour la version 1.4.0, * le {{Date|19|septembre|2000}} pour la version 1.6.0, * le {{Date|4|août|2003}} pour la version 1.8.0, * et le {{Date|25|décembre|2007}} pour la version 1.9.0 (version de développement)<ref name="annonce 1.9">{{en}} [http://groups.google.fr/group/comp.lang.ruby/msg/03761b6ad1b785a7 Annonce de la version 1.9 par matz]</ref>. La dernière version stable est la 1.8.7, publiée le {{Date|31|mai|2008}}<ref name="annonce 1.8.7">{{en}}[http://www.ruby-lang.org/en/news/2008/05/31/ruby-1-8-7-has-been-released/ Annonce et liens de téléchargement sur le site officiel.]</ref>. Depuis l'arrivée d'une documentation anglophone, et du framework web [[Ruby on Rails]], Ruby connaît un certain engouement, qui ne cesse de croître dans le monde de la programmation<ref>[http://www.ruby-lang.org/fr/about/ Explication de la croissance sur le site officiel]</ref>. == Philosophie == Ruby est fortement [[Programmation orientée objet|orienté objet]] et se rapproche ainsi du paradigme objet de [[Smalltalk]]<ref>La principale différence étant que les structures de contrôle (if-then-else, while, etc.) ne sont pas des objets.</ref> : * toute [[donnée]] est un [[Programmation orientée objet|objet]], y compris les [[Type (informatique)|type]]s ; * toute [[Fonction (informatique)|fonction]] est une [[Méthode (informatique)|méthode]] ; * toute [[variable]] est une référence à un [[Programmation orientée objet|objet]]. Malgré cet aspect exclusivement [[Programmation orientée objet|objet]], la [[programmation procédurale]] est possible et fréquente. Ruby utilise une [[syntaxe]] simple, inspirée par [[Eiffel (langage)|Eiffel]] et [[Ada (langage)|Ada]]<ref>[http://hopl.murdoch.edu.au/showlanguage.prx?exp=2458&language=Ruby Ruby sur HOPL], ''the History of Programming Languages''</ref>. Le langage est souvent présenté comme évitant au maximum les mauvaises surprises, selon le [[principe de moindre surprise]]<ref>[http://wiki.rubygarden.org/Ruby/page/show/PoLS Définition du PoLS sur le wiki de Ruby Garden]</ref>. 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<ref>[http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/143691 e-mail ''Re: A different perspective on Ruby'' envoyé par matz le 26 mai 2005 sur ruby-talk]</ref>. 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 == Les fonctionnalités principales sont : * l'[[orienté objet|orientation objet]] omniprésente ; * le [[ramasse-miettes]] chargé de libérer automatiquement la [[Mémoire informatique|mémoire]] ; * le [[système de gestion d'exceptions]] pour gérer les erreurs exceptionnelles ; * la possibilité de modifier les [[classe (informatique)|classes]] pendant l'exécution du [[programme informatique|programme]], qu'elles soient définies par l'utilisateur ou non ; * l'intégration dans sa [[syntaxe]] des [[expression rationnelle|expressions rationnelles]] ; * les blocs qui servent d'[[Itérateur (motif de conception)|itérateur]] et permettent de passer des morceaux de programme en paramètre ; * l'[[héritage (Informatique)|héritage]] simple ; * l'inclusion de [[module (programmation)|modules]] dans les [[classe (informatique)|classes]], une autre manière de concevoir l'[[héritage multiple]] ([[mixin]]) ; * l'écriture d'[[Extension (logiciel)|extensions]] en [[C (langage)|C]] relativement simple ; * les [[Nombre entier|nombres entiers]] de taille illimitée avec conversion automatique lorsque c'est nécessaire<ref>[http://www.devx.com/enterprise/Article/31197 ''Ruby—A Diamond of a Programming Language, Part 2''], article publié sur [http://www.devx.com/ devx.com]</ref> ; * la portée des [[variable]]s définie par leur forme : {{code|var}} est une [[variable locale]], {{code|@var}} est une [[variable d'instance]], {{code|@@var}} est une [[variable de classe]], {{code|$var}} est une [[variable globale]], {{code|Var}} est une [[constante]], etc. ; * les [[thread]]s indépendants du [[système d'exploitation]] ; * la [[Réflexion (informatique)|réflexion]], c'est-à-dire la possibilité pour les programmes et les objets de s'inspecter eux-mêmes et de se modifier. == Implémentations == L'[[interpréteur]] officiel fonctionne sur de nombreux [[système d'exploitation|systèmes d'exploitation]] : [[Unix]], [[Linux]], [[Microsoft Windows]], [[DOS]], [[Mac OS X]], [[OS/2]], [[Amiga]], etc. Il est publié sous la double licence [[logiciels libres|libre]] [[Licence publique générale GNU|GNU GPL]] et la licence Ruby<ref>[http://www.ruby-lang.org/en/LICENSE.txt Texte de la licence sur le site officiel]</ref>. Ruby est fourni avec [[Interactive Ruby|irb]], un [[interpréteur de commandes]] [[Interactivité|interactif]] pour tester en profondeur le fonctionnement du langage. Il existe une version [[web]] d'irb pour tester Ruby dans un navigateur<ref name="tryruby">[http://tryruby.hobix.com/ ''Try Ruby!'' sur hobix.com]</ref>. Depuis le {{1er janvier}} [[2007]], la version de développement de Ruby (1.9) est basée sur l'[[interpréteur]] [[YARV]] écrit par [[Koichi Sasada]]<ref>{{en}}[http://blog.grayproductions.net/articles/the_ruby_vm_episode_i ''The Ruby VM: Episode I''], interview de matz et de ko1 sur la machine virtuelle de Ruby</ref>. Ce nouvel interpréteur apporte un gain notable en performances<ref name="ruby-implementations-shootout">[http://www.antoniocangiano.com/articles/2007/02/19/ruby-implementations-shootout-ruby-vs-yarv-vs-jruby-vs-gardens-point-ruby-net-vs-rubinius-vs-cardinal ''Ruby Implementations Shootout''], comparaison des performances des principaux interpréteurs Ruby</ref>. Il existe plusieurs autres interpréteurs Ruby<ref name="ruby-implementations-shootout"/> : ; JRuby<ref>[http://jruby.sourceforge.net/ Site officiel de JRuby]</ref> : Il est écrit en [[Langage de programmation Java|Java]] et interprète directement du code source écrit en Ruby. ; XRuby : Il convertit du code Ruby en code [[Langage de programmation Java|Java]] et est plus rapide sur certains [[Test de performance|tests de performance]] que la version 1.8.5 de l'interpreteur officiel<ref>{{en}} [http://xruby.blogspot.com/2007/03/xruby-runs-most-benchmark-faster-than.html ''XRuby is faster than Ruby 1.8.5 in most benchmarks'']</ref>. ; Rubinius : Une machine virtuelle simplifiée, inspirée de [[Smalltalk|Smalltalk-80]]<ref>{{en}} [http://on-ruby.blogspot.com/2006/12/rubinius-interview.html Rubinius Interview]</ref>, implémentée en Ruby même. ; Cardinal<ref>[http://cardinal2.rubyforge.org/ Site du projet Cardinal]</ref> : Un interpréteur fonctionnant sous [[Parrot (machine virtuelle)|Parrot]]. ; Gardens Point Ruby.NET : Un interpréteur fonctionnant sur le [[framework .NET]]<ref>{{en}} [http://www.sapphiresteel.com/Ruby-NET-Integrating-the-Gardens Ruby.NET - Integrating the Gardens Point Compiler] par Huw Collingbourne</ref>. ; IronRuby : Un compilateur fonctionnant sur la [[Common Language Runtime|CLR]] du [[framework .NET]]<ref>{{en}} [http://www.ironruby.net/]</ref>. == Interprètes embarqué == Ruby possède une [[interface de programmation]] en [[langage C]] qui lui permet d'être intégré au sein d'autres [[logiciel]]s. Ruby est notamment utilisable dans : * [[Apache HTTP Server|Apache]] avec ''mod_ruby'' pour générer des [[Page web|pages web]] en Ruby * et [[PostgreSQL]] avec ''PL/ruby'' pour faire exécuter des commandes Ruby au serveur de [[base de données]]. Le logiciel de création de jeu vidéo [[RPG Maker]] intègre dans ses versions XP et VX un langage de programmation issu de Ruby et nommé RGSS, ''Ruby Game Scripting System''. == Bibliothèques == Il existe de nombreuses [[Bibliothèque (logicielle)|bibliothèques]] de fonctionnalités adjoignables au langage. Le dépôt historique de ces bibliothèques est le ''Ruby Application Archive'' (RAA)<ref>[http://raa.ruby-lang.org/ Ruby Application Archive]</ref>. 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<ref>[http://www.rubygems.org/ Site officiel de Rubygems]</ref>. Il permet de déployer rapidement des bibliothèques et des programmes Ruby. Le [[site web]] ''Rubyforge''<ref>[http://rubyforge.org/ RubyForge]</ref> est également un hébergeur important de programmes et de bibliothèques écrites en Ruby. == Exemples == Le classique [[Hello world]] : <source lang="ruby"> puts "Hello World!" </source> Utilisation des objets : <source lang="ruby"> # 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" </source> Utilisation de [[Mixin]] et de l'[[Héritage (Informatique)|Héritage]] <source lang="ruby"> 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 = weight.to_i @color = color.to_s end def describe! puts "I'm #{@@name} !" puts "I'm #{@size.to_s} meter tall, #{@weight.to_s} kilogramms weigh and I'm " + @color end end class Zebra < Animal @@name = 'a zebra' # rédéfinition de la variable de classe def initialize(size, weight, color = 'black and white') # surchage 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, 50 kilogramms weigh and I'm black and white z.eat! # => I'm eating ! </source> == Voir aussi == {{wikilivres|Ruby}} === Articles connexes === * [[Ruby on Rails]] * [[Ada (langage)|Ada]] et [[SmallTalk]] === Bibliographie === * {{ Ouvrage | titre = Programming Ruby | auteurs = [[Dave Thomas (programmeur)|Dave Thomas]], [[Andrew Hunt]] | lien langue = {{en}} | année = 2000 | isbn = 0-201-71089-7 | lire en ligne = http://ruby-doc.org/docs/ProgrammingRuby/ }} * {{ Ouvrage | titre = Ruby in a Nutshell | auteur = Yukihiro Matsumoto | lien langue = {{fr}} | année = 2002 | isbn = 2-84177-210-1 | }} * {{ Ouvrage | titre = Programming Ruby: The Pragmatic Programmer's Guide | auteur = [[Dave Thomas (programmeur)|Dave Thomas]], [[Chad Fowler]], [[Andy Hunt]] | lien langue = {{en}} | année = 2004 | isbn = 0-97451-405-5 | }} * {{ Ouvrage | titre = Débuter en Programmation avec Ruby | auteur = Chris Pine | lien langue = {{fr}} | année = 2006 | isbn = 2-74402-078-8 | }} * {{ Ouvrage | titre = Ruby par l'exemple | auteurs = Lucas Carlson, Leonard Richardson | lien langue = {{fr}} | année = 2006 | isbn = 978-2-84177-347-3 | }} * {{ Ouvrage | titre = The Ruby Way, Second Edition: Solutions and Techniques in Ruby Programming (2nd Edition) | auteurs = [[Hal Fulton]] | lien langue = {{en}} | année = 2006 | isbn = 0-67232-884-4 | }} * {{ Ouvrage | titre = Enterprise Integration with Ruby | auteurs = [[Maik Schmidt]] | lien langue = {{en}} | année = 2006 | isbn = 0-97669-406-9 | }} * {{ Ouvrage | titre = Everyday Scripting with Ruby: For Teams, Testers, and You | auteurs = [[Brian Marick]] | lien langue = {{en}} | année = 2007 | isbn = 978-0-97761-661-9 | }} * {{ Ouvrage | titre = Beginning Ruby: From Novice to Professional | auteurs = [[Peter Cooper (programmeur)|Peter Cooper]] | lien langue = {{en}} | année = 2007 | isbn = 978-1-59059-766-8 | }} === Liens externes === * {{fr}} [http://www.ruby-lang.org/fr/ Site officiel] * {{en}} [http://wiki.rubygarden.org/Ruby Le Wiki de RubyGarden] contenant beaucoup d'informations complémentaires sur Ruby * {{fr}} [http://www.rubyfrance.org Association RubyFrance] * Une [[liste de diffusion]] en français existe. Pour la rejoindre il faut envoyer un [[courrier électronique]] à [mailto:ruby-fr-ctl@ruby-lang.org ruby-fr-ctl@ruby-lang.org]. Elle est archivée sur [http://marc.theaimsgroup.com/?l=ruby-fr&r=1&w=2 Mailing list ARChives] et [http://www.nabble.com/ruby-French-f13924.html Nabble] == Notes et références == {{Références | colonnes = 2}} {{Langages de programmation 2}} {{Portail | Informatique | Logiciels libres | programmation informatique}} [[Catégorie:Langage de programmation]] [[Catégorie:Langage orienté objet]] [[Catégorie:Langage de script]] [[Catégorie:Ruby|*]] [[ar:روبي (لغة برمجة)]] [[bat-smg:Ruby]] [[bg:Ruby]] [[bn:রুবি (প্রোগ্রামিং ভাষা)]] [[ca:Ruby]] [[cs:Ruby]] [[da:Ruby (programmeringssprog)]] [[de:Ruby (Programmiersprache)]] [[en:Ruby (programming language)]] [[eo:Ruby (programlingvo)]] [[es:Ruby]] [[eu:Ruby]] [[fa:روبی]] [[fi:Ruby]] [[gl:Ruby]] [[he:Ruby]] [[hr:Ruby (programski jezik)]] [[hu:Ruby]] [[ia:Ruby (linguage de programmation)]] [[id:Ruby (bahasa pemrograman)]] [[it:Ruby]] [[ja:Ruby]] [[ka:რუბი (პროგრამირების ენა)]] [[ko:루비 (프로그래밍 언어)]] [[ku:روبی]] [[lt:Ruby]] [[nl:Ruby (programmeertaal)]] [[nn:Ruby]] [[no:Ruby]] [[pl:Ruby (język programowania)]] [[pt:Ruby (linguagem de programação)]] [[ro:Ruby]] [[ru:Ruby]] [[sr:Програмски језик Руби]] [[sv:Ruby]] [[ta:ரூபி]] [[tg:Руби]] [[th:ภาษารูบี้]] [[tr:Ruby (programlama dili)]] [[uk:Ruby]] [[vi:Ruby (ngôn ngữ lập trình)]] [[zh:Ruby]] [[zh-yue:Ruby程式語言]]