Histoire de Ruby - History of Ruby
Ceci est une histoire du langage de programmation Ruby .
Conception
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.
Première parution
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 .
Sorties anticipées
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
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.
Rubis 1.9
Ruby 1.9 est sorti le jour de Noël 2007. À 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 les deux clause licence BSD. 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_relativesécurité des importations
Ruby 1.9 est obsolète depuis le 23 février 2015, et il ne recevra plus les correctifs de bogues et de sécurité. Il est conseillé aux utilisateurs de passer à une version plus récente.
Rubis 2.0
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.
Ruby 2.0 était destiné à être entièrement rétrocompatible avec Ruby 1.9.3. Depuis la version officielle 2.0.0 du 24 février 2013, il n'y avait que cinq incompatibilités (mineures) connues.
Ruby 2.0 est obsolète depuis le 24 février 2016, et il ne recevra plus les correctifs de bogues et de sécurité. Il est conseillé aux utilisateurs de passer à une version plus récente.
Rubis 2.1
Ruby 2.1.0 a été publié le jour de Noël en 2013. La version comprend des accélérations, des corrections de bugs et des mises à jour de la bibliothèque.
À partir de la version 2.1.0, la politique de gestion des versions de Ruby s'apparente davantage à la gestion des versions sémantique . Bien que similaire, la politique de gestion des versions de Ruby n'est pas compatible avec la gestion des versions sémantique :
| Rubis | Versionnage sémantique |
|---|---|
| MAJEUR : Augmenté en cas de changement incompatible qui ne peut pas être publié en MINEUR. Réservé aux événements spéciaux. | MAJEUR : augmenté lorsque vous effectuez des modifications d'API incompatibles. |
| MINEUR : augmenté à chaque Noël, peut être incompatible avec l'API. | MINEUR : augmenté lorsque vous ajoutez des fonctionnalités de manière rétrocompatible . |
| TEENY : sécurité ou correction de bug qui maintient la compatibilité API. Peut être augmenté de plus de 10 (comme 2.1.11) et sera publié tous les 2-3 mois. | PATCH : augmenté lorsque vous effectuez des corrections de bogues rétrocompatibles. |
| PATCH : nombre de commits depuis la dernière version MINOR (sera remis à 0 lors de la libération MINOR). | - |
Le contrôle de version sémantique fournit également des étiquettes supplémentaires pour la pré-version et les métadonnées de construction sont disponibles en tant qu'extensions du format MAJOR.MINOR.PATCH, non disponibles chez Ruby.
Ruby 2.1 est obsolète depuis le 1er avril 2017, et il ne recevra plus de correctifs de bogues et de sécurité. Il est conseillé aux utilisateurs de passer à une version plus récente.
Rubis 2.2
Ruby 2.2.0 a été publié le jour de Noël en 2014. La version 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.
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.2 est obsolète depuis le 1er avril 2018, et il ne recevra plus de correctifs de bogues et de sécurité. Il est conseillé aux utilisateurs de passer à une version plus récente.
- Performances du PowerPC64
- Depuis la version 2.2.1, les performances de Ruby MRI sur PowerPC64 ont été améliorées.
Rubis 2.3
Ruby 2.3.0 est sorti le jour de Noël 2015. Voici quelques changements notables :
- 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.barif 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.
La branche 2.3 inclut également de nombreuses améliorations de performances, mises à jour et corrections de bogues, notamment des modifications apportées à l'appel Proc#, à l'utilisation de mots-clés d'exception par Socket et IO, la gestion des noms de threads, les connexions passives Net::FTP par défaut et la suppression de Rake de stdlib.
Rubis 2.4
Ruby 2.4.0 est sorti le jour de Noël 2016. Voici quelques changements notables :
- Binding#irb : démarre 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
La branche 2.4 inclut également des améliorations de performances pour la table de hachage, Array#max, Array#min et l'accès aux variables d'instance.
Rubis 2.5
Ruby 2.5.0 est sorti le jour de Noël 2017. Voici quelques changements notables :
- 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 )
- Chaînage de méthodes avec yield_self
- Soutenir la couverture des succursales et la mesure de la couverture des méthodes
- Transformations de hachage plus faciles 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.
Rubis 2.6
Ruby 2.6.0 est sorti le jour de Noël 2018. Voici quelques changements notables :
- JIT (expérimental)
- RubyVM::AbstractSyntaxTree (expérimental)
Rubis 2.7
Ruby 2.7.0 est sorti le jour de Noël 2019. Voici quelques changements notables :
- Correspondance de motifs (expérimental)
- Amélioration du REPL
- CPG de compactage
- Séparation des arguments de position et de mot-clé
Rubis 3.0
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.
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.7 | 2018-12-25 | 2021-04-05 | 2022-04-05 |
| 2.7 | 2.7.3 | 2019-12-25 | À déterminer | À déterminer |
| 3.0 | 3.0.1 | 2020-12-25 | À déterminer | À déterminer |
|
Légende:
Ancienne version
Ancienne version, toujours maintenue
Dernière version
Version future
|
||||