Ruby (langage de programmation) - Ruby (programming language)
Paradigme | Multi-paradigme : fonctionnel , impératif , orienté objet , réflexif |
---|---|
Conçu par | Yukihiro Matsumoto |
Développeur | Yukihiro Matsumoto, et al. |
Première apparition | 1995 |
Version stable | |
Discipline de frappe | Canard , dynamique , fort |
Portée | Lexical, parfois dynamique |
Langage d'implémentation | C |
Système d'exploitation | Multiplateforme |
Licence | Licence Rubis |
Extensions de nom de fichier | .rb |
Site Internet | www |
Les principales mises en œuvre | |
Ruby IRM , TruffleRuby , YARV , Rubinius , MagLev , JRuby , MacRuby , RubyMotion , Mruby , IronRuby | |
Influencé par | |
Ada , Basique , C++ , CLU , Dylan , Eiffel , Lisp , Lua , Perl , Python , Smalltalk | |
Influencé | |
Clojure , CoffeeScript , Crystal , D , Elixir , Groovy , Ioke , Julia , Mirah , Nu , Ring, Rust , Swift | |
|
Ruby est un langage de programmation interprété , de haut niveau et à usage général . Il a été conçu et développé au milieu des années 1990 par Yukihiro "Matz" Matsumoto au Japon .
Ruby est typé dynamiquement et utilise le ramasse-miettes et la compilation juste-à-temps . Il prend en charge plusieurs paradigmes de programmation , y compris la programmation procédurale , orientée objet et fonctionnelle . Selon le créateur, Ruby a été influencé par Perl , Smalltalk , Eiffel , Ada , BASIC et Lisp .
Histoire
Concept précoce
Matsumoto a dit que Ruby a été conçu en 1993. Dans un article publié en 1999 sur la liste de diffusion ruby-talk , il décrit certaines de ses premières idées sur le langage :
Je discutais avec mon collègue de la possibilité d'un langage de script orienté objet. Je connaissais Perl (Perl4, pas Perl5), mais je ne l'aimais pas vraiment, parce qu'il avait l'odeur d'un langage jouet (c'est toujours le cas). Le langage orienté objet semblait très prometteur. Je connaissais Python à l' époque. Mais je n'aimais pas ça, parce que je ne pensais pas que c'était un vrai langage orienté objet – les fonctionnalités OO semblaient être un ajout au langage. En tant que maniaque du langage et fan d'OO depuis 15 ans, je voulais vraiment un véritable langage de script orienté objet et facile à utiliser. J'ai cherché mais je n'en ai pas trouvé. J'ai donc décidé de le faire.
Matsumoto décrit la conception de Ruby comme étant à la base un simple langage Lisp , avec un système objet comme celui de Smalltalk, des blocs inspirés de fonctions d'ordre supérieur et une utilité pratique comme celle de Perl.
Le nom "Ruby" est né lors d'une session de discussion en ligne entre Matsumoto et Keiju Ishitsuka le 24 février 1993, avant qu'un code n'ait été écrit pour la langue. Initialement deux noms ont été proposés : " Coral " et " Ruby ". Matsumoto a choisi ce dernier dans un e-mail ultérieur à Ishitsuka. Matsumoto a noté plus tard un facteur dans le choix du nom "Ruby" - c'était la pierre de naissance d'un de ses collègues.
Sorties anticipées
La première version publique de Ruby 0.95 a été annoncée sur les groupes de discussion nationaux japonais le 21 décembre 1995. Par la suite, trois autres versions de Ruby ont été publiées en deux jours. La sortie a coïncidé avec le lancement de la liste de diffusion ruby-list en japonais , qui était la première liste de diffusion pour la nouvelle langue.
Déjà présentes à ce stade de développement, de nombreuses fonctionnalités familières dans les versions ultérieures de Ruby, notamment la conception orientée objet , les classes avec héritage, les mixins , les itérateurs , les fermetures , la gestion des exceptions et le ramasse - miettes .
Suite à la sortie de Ruby 0.95 en 1995, plusieurs versions stables de Ruby ont été publiées dans les années suivantes :
- Ruby 1.0 : 25 décembre 1996
- Ruby 1.2 : décembre 1998
- Rubis 1.4 : août 1999
- Ruby 1.6 : septembre 2000
En 1997, le premier article sur Ruby a été publié sur le Web. La même année, Matsumoto a été embauché par netlab.jp pour travailler sur Ruby en tant que développeur à temps plein.
En 1998, Ruby Application Archive a été lancé par Matsumoto, avec une simple page d'accueil en anglais pour Ruby.
En 1999, la première liste de diffusion en anglais ruby-talk a commencé, ce qui a signalé un intérêt croissant pour la langue en dehors du Japon. Cette même année, Matsumoto et Keiju Ishitsuka ont écrit le premier livre sur Ruby, The Object-oriented Scripting Language Ruby (オブジェクト指向スクリプト言語 Ruby), qui a été publié au Japon en octobre 1999. Il sera suivi au début des années 2000 par environ 20 livres sur Ruby publiés en japonais.
En 2000, Ruby était plus populaire que Python au Japon. En septembre 2000, le premier livre en anglais Programming Ruby a été imprimé, qui a ensuite été librement diffusé au public, élargissant encore l'adoption de Ruby parmi les anglophones. Au début de 2002, la liste de diffusion ruby-talk en anglais recevait plus de messages que la liste ruby en japonais , démontrant la popularité croissante de Ruby dans le monde non-japonais.
Rubis 1.8 et 1.9
Ruby 1.8 a été initialement publié en août 2003, était stable pendant longtemps et a été retiré en juin 2013. Bien qu'obsolète, il existe toujours du code basé dessus. Ruby 1.8 n'est que partiellement compatible avec Ruby 1.9.
Ruby 1.8 a fait l'objet de plusieurs normes de l'industrie. Les spécifications linguistiques de Ruby ont été développées par le Centre de promotion des normes ouvertes de l'Agence de promotion de la technologie de l'information (une agence gouvernementale japonaise) pour soumission au Comité japonais des normes industrielles (JISC), puis à l' Organisation internationale de normalisation (ISO). Il a été accepté en tant que norme industrielle japonaise (JIS X 3017) en 2011 et norme internationale ( ISO/IEC 30170 ) en 2012.
Vers 2005, l'intérêt pour le langage Ruby a augmenté en tandem avec Ruby on Rails , un framework web écrit en Ruby. Rails est souvent crédité de la notoriété croissante de Ruby.
À compter de Ruby 1.9.3, sorti le 31 octobre 2011, Ruby est passé d'une double licence sous la licence Ruby et la GPL à une double licence sous la licence Ruby et la licence BSD à deux clauses. L'adoption de la version 1.9 a été ralentie par les modifications apportées par rapport à la version 1.8 qui nécessitaient la réécriture de nombreux joyaux tiers populaires . Ruby 1.9 introduit de nombreux changements importants par rapport à la série 1.8. Les exemples comprennent:
- variables locales de bloc (variables locales au bloc dans lequel elles sont déclarées)
- une syntaxe lambda supplémentaire :
f = ->(a,b) { puts a + b }
- une syntaxe littérale de hachage supplémentaire utilisant des deux-points pour les clés de symbole :
{symbol_key: "value"} == {:symbol_key => "value"}
- les encodages de caractères par chaîne sont pris en charge
- nouvelle API de socket ( support IPv6 )
-
require_relative
sécurité des importations
Rubis 2
Ruby 2.0 était destiné à être entièrement rétrocompatible avec Ruby 1.9.3. Lors de la sortie officielle de la version 2.0.0 le 24 février 2013, il n'y avait que cinq incompatibilités (mineures) connues. Ruby 2.0 a ajouté plusieurs nouvelles fonctionnalités, notamment :
- arguments de mot-clé de méthode,
- une nouvelle méthode,
Module#prepend
, pour étendre une classe, - un nouveau littéral pour créer un tableau de symboles,
- nouvelle API pour l' évaluation paresseuse des énumérables, et
- une nouvelle convention d'utilisation de #to_h pour convertir des objets en hachages.
À partir de la version 2.1.0, la politique de gestion des versions de Ruby a changé pour être plus similaire à la gestion des versions sémantique .
Ruby 2.2.0 inclut des accélérations, des corrections de bugs et des mises à jour de bibliothèque et supprime certaines API obsolètes. Plus particulièrement, Ruby 2.2.0 introduit des changements dans la gestion de la mémoire – un ramasse-miettes incrémentiel, la prise en charge de la récupération de place des symboles et la possibilité de compiler directement avec jemalloc. Il contient également une prise en charge expérimentale de l'utilisation de vfork (2) avec system() et spawn(), ainsi qu'une prise en charge supplémentaire de la spécification Unicode 7.0. Depuis la version 2.2.1, les performances de Ruby MRI sur PowerPC64 ont été améliorées. Les fonctionnalités qui ont été rendues obsolètes ou supprimées incluent callcc, la bibliothèque DL, Digest::HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger::Application ainsi que diverses fonctions API C.
Ruby 2.3.0 inclut de nombreuses améliorations de performances, mises à jour et corrections de bogues, notamment des modifications apportées à Proc#call, à l'utilisation de mots clés d'exception Socket et IO, à la gestion des noms de threads, aux connexions passives Net::FTP par défaut et à la suppression de Rake de stdlib. Parmi les autres changements notables, citons :
- La possibilité de marquer tous les littéraux de chaîne comme gelés par défaut avec une augmentation conséquente des performances des opérations de chaîne.
- Comparaison de hachage pour permettre une vérification directe des paires clé/valeur au lieu de simplement des clés.
- Un nouvel opérateur de navigation sûr
&.
qui peut faciliter la manipulation de nil (par exemple, au lieu de , nous pouvons utiliser ).if obj && obj.foo && obj.foo.bar
if obj&.foo&.bar
- La gem did_you_mean est maintenant fournie par défaut et requise au démarrage pour suggérer automatiquement des correspondances de noms similaires sur une NameError ou une NoMethodError .
-
Hash#dig et Array#dig pour extraire facilement des valeurs profondément imbriquées (par exemple, étant donné , la valeur Foo Baz peut désormais être récupérée par ).
profile = { social: { wikipedia: { name: 'Foo Baz' } } }
profile.dig(:social, :wikipedia, :name)
-
.grep_v(regexp)
qui correspondra à tous les exemples négatifs d'une expression régulière donnée en plus d'autres nouvelles fonctionnalités.
Ruby 2.4.0 inclut des améliorations de performances pour la table de hachage, Array#max, Array#min et l'accès aux variables d'instance. Parmi les autres changements notables, citons :
- Binding#irb : démarrez une session REPL similaire à binding.pry
- Unifier Fixnum et Bignum dans la classe Integer
- String prend en charge les mappages de casse Unicode, pas seulement ASCII
- Une nouvelle méthode, Regexp#match?, qui est une version booléenne plus rapide de Regexp#match
- La détection des blocages de threads affiche désormais les threads avec leur backtrace et leur dépendance
Quelques changements notables dans Ruby 2.5.0 incluent les instructions de sauvetage et d' assurance utilisent automatiquement un bloc do-end environnant (moins besoin de blocs de début de fin supplémentaires ), le chaînage de méthodes avec yield_self , la prise en charge de la couverture de branche et de la mesure de couverture de méthode, et plus facile Transformations de hachage avec Hash#slice et Hash#transform_keys En plus de cela, de nombreuses améliorations de performances comme un passage de bloc plus rapide (3 fois plus rapide), des mutex plus rapides, des modèles ERB plus rapides et des améliorations sur certaines méthodes de concaténation.
Quelques changements notables dans Ruby 2.6.0 incluent un compilateur expérimental juste-à-temps (JIT) et RubyVM::AbstractSyntaxTree (expérimental).
Quelques changements notables dans Ruby 2.7.0 incluent la correspondance de modèle (expérimental), les améliorations REPL, un GC de compactage et la séparation des arguments de position et de mot-clé.
Rubis 3
Ruby 3.0.0 est sorti le jour de Noël en 2020. Il est connu sous le nom de Ruby 3x3. L'un de ses principaux objectifs était de faire passer l'interpréteur à un compilateur juste à temps, pour rendre les programmes plus rapides.
Ruby 3.1 devrait sortir le jour de Noël en 2021.
Tableau des versions
Version | Dernière version minuscule | Date de sortie initiale | Fin de la phase d'accompagnement | Fin de la phase de maintenance de la sécurité |
---|---|---|---|---|
1,0 | N / A | 1996-12-25 | N / A | N / A |
1,8 | 1.8.7-p375 | 2003-08-04 | 2012-06 | 2014-07-01 |
1.9 | 1.9.3-p551 | 2007-12-25 | 2014-02-23 | 2015-02-23 |
2.0 | 2.0.0-p648 | 2013-02-24 | 2015-02-24 | 2016-02-24 |
2.1 | 2.1.10 | 2013-12-25 | 2016-03-30 | 2017-03-31 |
2.2 | 2.2.10 | 2014-12-25 | 2017-03-28 | 2018-03-31 |
2.3 | 2.3.8 | 2015-12-25 | 2018-06-20 | 2019-03-31 |
2.4 | 2.4.10 | 2016-12-25 | 2019-04-01 | 2020-04-01 |
2.5 | 2.5.9 | 2017-12-25 | 2021-04-05 | 2021-04-05 |
2.6 | 2.6.8 | 2018-12-25 | 2021-04-05 | 2022-04-05 |
2.7 | 2.7.4 | 2019-12-25 | À déterminer | À déterminer |
3.0 | 3.0.2 | 2020-12-25 | À déterminer | À déterminer |
3.1 | 3.1.0 | 2021-12-25 | À déterminer | À déterminer |
Légende:
Ancienne version
Ancienne version, toujours maintenue
Dernière version
Version future
|
Sémantique et philosophie
Matsumoto a déclaré que Ruby est conçu pour la productivité et le plaisir des programmeurs, en suivant les principes d'une bonne conception d' interface utilisateur . Lors d'un Google Tech Talk en 2008, Matsumoto a ajouté : « J'espère voir Ruby aider tous les programmeurs du monde à être productifs, à apprécier la programmation et à être heureux. C'est l'objectif principal du langage Ruby. Il souligne que la conception des systèmes doit mettre l'accent sur les besoins humains plutôt que informatiques :
Souvent, les gens, en particulier les informaticiens, se concentrent sur les machines. Ils pensent : « En faisant cela, la machine fonctionnera rapidement. En faisant cela, la machine fonctionnera plus efficacement. En faisant cela, la machine fera quelque chose quelque chose quelque chose. Ils se concentrent sur les machines. Mais en fait, nous devons nous concentrer sur les humains, sur la façon dont les humains se soucient de programmer ou d'exploiter l'application des machines. Nous sommes les maîtres. Ce sont les esclaves.
Matsumoto a déclaré que son objectif principal de conception était de créer un langage qu'il aimait lui-même utiliser, en minimisant le travail du programmeur et la confusion possible. Il a dit qu'il n'avait pas appliqué le principe du moindre étonnement (POLA) à la conception de Ruby ; dans une discussion en mai 2005 sur le newsgroup comp.lang.ruby, Matsumoto a tenté de distancer Ruby de POLA, expliquant que parce que tout choix de conception surprendrait quelqu'un, il utilise un critère personnel pour évaluer la surprise. Si cette norme personnelle reste cohérente, il y aurait peu de surprises pour ceux qui connaissent la norme.
Matsumoto l'a défini ainsi dans une interview :
Chacun a un parcours individuel. Quelqu'un peut venir de Python, quelqu'un d'autre peut venir de Perl, et ils peuvent être surpris par différents aspects du langage. Ensuite, ils s'approchent de moi et me disent : « J'ai été surpris par cette caractéristique du langage, alors Ruby viole le principe de la moindre surprise ». Attendre. Attendre. Le principe de moindre surprise n'est pas que pour vous. Le principe de moindre surprise signifie principe du moins ma surprise. Et cela signifie le principe de la moindre surprise après avoir très bien appris Ruby. Par exemple, j'étais un programmeur C++ avant de commencer à concevoir Ruby. J'ai programmé en C++ exclusivement pendant deux ou trois ans. Et après deux ans de programmation C++, cela me surprend toujours.
Ruby est orienté objet : chaque valeur est un objet, y compris les classes et les instances de types que de nombreux autres langages désignent comme des primitives (comme les entiers , les booléens et " null "). Les variables contiennent toujours des références à des objets. Chaque fonction est une méthode et les méthodes sont toujours appelées sur un objet. Les méthodes définies au niveau supérieur deviennent des méthodes de la classe Object. Comme cette classe est un ancêtre de toutes les autres classes, de telles méthodes peuvent être appelées sur n'importe quel objet. Elles sont également visibles dans tous les périmètres, servant effectivement de procédures « globales ». Ruby prend en charge l' héritage avec des méthodes de répartition dynamique , de mixins et de singleton (appartenant à et défini pour une seule instance plutôt que d'être défini sur la classe). Bien que Ruby ne prenne pas en charge l' héritage multiple , les classes peuvent importer des modules en tant que mixins.
Ruby a été décrit comme un langage de programmation multi-paradigmes : il permet la programmation procédurale (définir des fonctions/variables en dehors des classes les fait partie de la racine, 'self' Object), avec une orientation objet (tout est un objet) ou une programmation fonctionnelle (il a des fonctions anonymes , des fermetures et des continuations ; les instructions ont toutes des valeurs et les fonctions renvoient la dernière évaluation). Il prend en charge l' introspection , la réflexion et la métaprogrammation , ainsi que la prise en charge des threads basés sur des interprètes . Ruby propose un typage dynamique et prend en charge le polymorphisme paramétrique .
Selon la FAQ Ruby, la syntaxe est similaire à Perl et la sémantique est similaire à Smalltalk , mais elle diffère grandement de Python .
Caractéristiques
- Complètement orienté objet avec héritage , mixins et métaclasses
- Dactylographie dynamique et dactylographie de canard
- Tout est une expression (même les déclarations ) et tout est exécuté impérativement (même les déclarations )
- Syntaxe succincte et flexible qui minimise le bruit syntaxique et sert de base aux langages spécifiques à un domaine
- Réflexion dynamique et altération des objets pour faciliter la métaprogrammation
- Fermetures lexicales , itérateurs et générateurs , avec une syntaxe de bloc
- Notation littérale pour les tableaux , les hachages , les expressions régulières et les symboles
- Intégrer du code dans des chaînes ( interpolation )
- Arguments par défaut
- Quatre niveaux de portée variable ( global , classe , instance et local ) indiqués par des sceaux ou leur absence
- Collecte des ordures
- Des suites de première classe
- Règles de coercition booléenne strictes (tout est vrai sauf
false
etnil
) - Gestion des exceptions
- Surcharge de l'opérateur
- Prise en charge intégrée des nombres rationnels , des nombres complexes et de l'arithmétique de précision arbitraire
- Comportement d'expédition personnalisé (via
method_missing
etconst_missing
) - Autochtones fils et de coopération fibres (fibres sont un 1,9 / YARV métrage)
- Prise en charge d' Unicode et de plusieurs encodages de caractères .
- API de plug-in native en C
- Interactif Ruby Shell (un REPL )
- Gestion centralisée des packages via RubyGems
- Implémenté sur toutes les principales plateformes
- Grande bibliothèque standard, comprenant des modules pour YAML , JSON , XML , CGI , OpenSSL , HTTP , FTP , RSS , curses , zlib et Tk
- Compilation juste à temps
- L' Interactive Ruby Shell ,
irb
, un interpréteur de ligne de commande interactif qui peut être utilisé pour tester le code rapidement
Syntaxe
La syntaxe de Ruby est globalement similaire à celle de Perl et Python . Les définitions de classe et de méthode sont signalées par des mots-clés, tandis que les blocs de code peuvent être définis par des mots-clés ou des accolades. Contrairement à Perl, les variables ne sont pas obligatoirement préfixées par un sigil . Lorsqu'il est utilisé, le sigil modifie la sémantique de la portée de la variable. Pour des raisons pratiques, il n'y a pas de distinction entre les expressions et les déclarations . Les sauts de ligne sont significatifs et considérés comme la fin d'une instruction ; un point-virgule peut être utilisé de manière équivalente. Contrairement à Python, l'indentation n'est pas significative.
L'une des différences par rapport à Python et Perl est que Ruby garde toutes ses variables d'instance complètement privées pour la classe et ne les expose que via des méthodes d'accès ( attr_writer
, attr_reader
, etc.). Contrairement aux méthodes "getter" et "setter" d'autres langages comme C++ ou Java , les méthodes d'accès en Ruby peuvent être créées avec une seule ligne de code via la métaprogrammation ; cependant, les méthodes d'accès peuvent également être créées à la manière traditionnelle de C++ et Java. Comme l'invocation de ces méthodes ne nécessite pas l'utilisation de parenthèses, il est trivial de changer une variable d'instance en une fonction complète, sans modifier une seule ligne de code d'appel ou avoir à effectuer une refactorisation pour obtenir des fonctionnalités similaires à C# et à la propriété VB.NET membres.
Les descripteurs de propriétés de Python sont similaires, mais présentent un compromis dans le processus de développement. Si l'on commence en Python en utilisant une variable d'instance exposée publiquement, et modifie plus tard l'implémentation pour utiliser une variable d'instance privée exposée via un descripteur de propriété, le code interne à la classe peut devoir être ajusté pour utiliser la variable privée plutôt que la propriété publique . La conception de Ruby oblige toutes les variables d'instance à être privées, mais fournit également un moyen simple de déclarer set
et de get
méthodes. Ceci est conforme à l'idée qu'en Ruby, on n'accède jamais directement aux membres internes d'une classe depuis l'extérieur de la classe ; on passe plutôt un message à la classe et on reçoit une réponse.
Implémentations
Interprète Ruby de Matz
L' interpréteur Ruby original est souvent appelé interprète Ruby de Matz ou IRM. Cette implémentation est écrite en C et utilise sa propre machine virtuelle spécifique à Ruby .
L' implémentation standardisée et retirée de Ruby 1.8 a été écrite en C , en tant que langage interprété en une seule passe .
À partir de Ruby 1.9 et en continuant avec Ruby 2.x et versions ultérieures , l'interpréteur Ruby officiel a été YARV ("Yet Another Ruby VM"), et cette implémentation a remplacé la machine virtuelle plus lente utilisée dans les versions précédentes de MRI.
Implémentations alternatives
Depuis 2018, il existe un certain nombre d'implémentations alternatives de Ruby, notamment JRuby , Rubinius et mruby . Chacun prend une approche différente, avec JRuby et Rubinius fournissant compilation juste à temps et mruby fournissant également la compilation en avance sur le temps .
Ruby a trois implémentations alternatives majeures :
- JRuby , une implémentation mixte Java et Ruby qui s'exécute sur la machine virtuelle Java . JRuby cible actuellement Ruby 2.5.
- TruffleRuby , une implémentation Java utilisant le framework d'implémentation du langage Truffle avec GraalVM
- Rubinius , une machine virtuelle de bytecode C++ qui utilise LLVM pour compiler en code machine lors de l'exécution. Le compilateur de bytecode et la plupart des classes de base sont écrits en pur Ruby. Rubinius cible actuellement Ruby 2.3.1.
Les autres implémentations Ruby incluent :
- Maglev , une Smalltalk mise en œuvre qui fonctionne sur les systèmes GemTalk de GemStone / S VM
- mruby , une implémentation conçue pour être intégrée dans du code C, dans la même veine que Lua . Il est actuellement développé par Yukihiro Matsumoto et d'autres
- RGSS , ou Ruby Game Scripting System, une implémentation propriétaire utilisée par la série de logiciels RPG Maker pour la conception de jeux et la modification du moteur RPG Maker
- julializer , un transpiler (partiel) de Ruby à Julia . Il peut être utilisé pour une grande accélération sur, par exemple, les implémentations Ruby ou JRuby (peut être utile uniquement pour le code numérique).
- Topaz , une implémentation Ruby écrite en Python
- Opal , un interpréteur Web qui compile Ruby en JavaScript
D'autres implémentations Ruby maintenant disparues étaient :
- MacRuby , une implémentation de Mac OS X sur l' environnement d' exécution Objective-C . Son homologue iOS s'appelle RubyMotion
- IronRuby une implémentation sur le .NET Framework
- Cardinal, une implémentation pour la machine virtuelle Parrot
- Ruby Enterprise Edition , souvent abrégé en ree , une implémentation optimisée pour gérer les projets Ruby on Rails à grande échelle
- HotRuby , une implémentation JavaScript et ActionScript du langage de programmation Ruby
La maturité des implémentations Ruby a tendance à être mesurée par leur capacité à exécuter le framework Ruby on Rails (Rails), car il est complexe à implémenter et utilise de nombreuses fonctionnalités spécifiques à Ruby. Le moment où une implémentation particulière atteint cet objectif est appelé « la singularité Rails ». L'implémentation de référence, JRuby et Rubinius sont tous capables d'exécuter Rails sans modification dans un environnement de production.
Prise en charge de la plate-forme
Matsumoto a initialement développé Ruby sur le Sony NEWS-OS 3.x basé sur BSD 4.3 , mais a ensuite migré son travail vers SunOS 4.x, et enfin vers Linux .
En 1999, Ruby était connu pour fonctionner sur de nombreux systèmes d'exploitation différents , notamment NEWS-OS, SunOS, AIX , SVR4 , Solaris , NEC UP-UX , NeXTSTEP , BSD, Linux, Mac OS , DOS , Windows et BeOS .
Les versions et implémentations modernes de Ruby sont disponibles sur de nombreux systèmes d'exploitation, tels que Linux, BSD, Solaris, AIX, macOS , Windows, Windows Phone , Windows CE , Symbian OS , BeOS, OpenVMS et IBM i .
Le langage de programmation Ruby est pris en charge sur un certain nombre de plates-formes d'hébergement cloud telles que Jelastic , Heroku , Google Cloud Platform et autres.
Dépôts et bibliothèques
RubyGems est le gestionnaire de paquets de Ruby. Un paquet Ruby est appelé un "gem" et peut être installé via la ligne de commande. La plupart des gems sont des bibliothèques, bien qu'il en existe quelques-unes qui sont des applications, telles que les IDE . Il y a plus de 10 000 gemmes Ruby hébergées sur RubyGems.org .
De nombreuses bibliothèques Ruby nouvelles et existantes sont hébergées sur GitHub , un service qui offre un hébergement de référentiel de contrôle de version pour Git .
L'archive d'application Ruby, qui hébergeait des applications, de la documentation et des bibliothèques pour la programmation Ruby, a été maintenue jusqu'en 2013, date à laquelle sa fonction a été transférée à RubyGems.
Voir également
- Comparaison des langages de programmation
- Projet Metasploit
- Pourquoi (poignant) Guide de Ruby
- XRuby
- Crystal (langage de programmation)
Les références
Lectures complémentaires
- Noir, David ; Leo, Joseph (15 mars 2019), The Well-Grounded Rubyist (troisième éd.), Manning Publications , p. 584, ISBN 978-1617295218
- Metz, Sandi (22 août 2018), Practical Object-Oriented Design : An Agile Primer Using Ruby (deuxième éd.), Addison-Wesley Professional , p. 288, ISBN 978-0-13-445647-8
- Cooper, Peter (12 juillet 2016), Beginning Ruby: From Novice to Professional (troisième éd.), Apress , p. 492, ISBN 978-1484212790
- Carlson, Lucas ; Richardson, Leonard (3 avril 2015), Ruby Cookbook: Recipes for Object-Oriented Scripting (deuxième éd.), O'Reilly Media , p. 963, ISBN 978-1449373719
- Fulton, Hal; Arko, André (2 mars 2015), The Ruby Way: Solutions and Techniques in Ruby Programming (Troisième éd.), Addison-Wesley Professional , p. 816, ISBN 978-0-321-71463-3
- Thomas, Dave ; Fowler, Tchad ; Hunt, Andy (7 juillet 2013), Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide (quatrième édition), Pragmatic Bookshelf , p. 888, ISBN 978-1937785499
- McAnally, Jeremy ; Arkin, Assaf (28 mars 2009), Ruby in Practice (première édition), Manning Publications , p. 360, ISBN 978-1933988474
- Flanagan, David ; Matsumoto, Yukihiro (25 janvier 2008), The Ruby Programming Language (première édition), O'Reilly Media , p. 446 , ISBN 978-0-596-51617-8
- Baird, Kevin (8 juin 2007), Ruby by Example: Concepts and Code (première édition), No Starch Press , p. 326, ISBN 978-1593271480
- Fitzgerald, Michael (14 mai 2007), Learning Ruby (première édition), O'Reilly Media , p. 255 , ISBN 978-0-596-52986-4