Posté par naruse le 2016-12-25
Traduit par Jean-Denis Vauguet
Nous sommes heureux d’annoncer la sortie de Ruby 2.4.0.
Il s’agit de la première version stable de la branche 2.4. Elle apporte de nombreuses nouveautés, notamment :
Améliorations de la table de hachage (par Vladimir Makarov)
La structure interne de la table de hachage (st_table) a été retouchée pour supporter l’adressage ouvert (une méthode de résolution de collisions), et de ce fait maintient un ordre d’inclusion. Cette modification substantielle a été conçue par de nombreuses personnes, notamment Yura Sokolov.
Binding#irb: lancement d’une session REPL similaire à binding.pry
Lors de vos phases de deboggage, vous utilisez sans doute souvent p
pour
inspecter le contenu de variables. Avec pry,
il est possible d’écrire binding.pry
pour lancer une session REPL à partir
de n’importe quel endroit, pour exécuter du code Ruby.
r56624
reproduit cette fonctionnalité pour IRB, avec binding.irb
.
Fusion de Fixnum et Bignum dans Integer
Bien que la spec ISO/IEC 30170:2012 ne préjauge pas de l’implémentation de la classe Integer, Ruby a historiquement construit une abstraction basé sur deux classes spécialisées : Fixnum et Bignum. Ruby 2.4 procède à une unification de ces APIs dans la classe « mère » Integer. Toutes les extensions C qui modifieraient Fixnum ou Bignum devront être corrigées.
Pour plus de détails, consultez ce ticket et la présentation de akr.
Support de Unicode dans les transformations de String
L’ensemble de méthode String/Symbol#upcase/downcase/swapcase/capitalize(!)
supporte désormais Unicode. Jusqu’ici, les transformations étaient limitées
à ASCII.
Améliorations des performances
Ruby 2.4 apporte plusieurs améliorations de performances via l’implémentation de méthodes de l’API standard :
Array#max, Array#min
[x, y].max
et [x, y].min
ont été optimisées pour ne pas créer de tableau
temporaire dans certains cas qui le permettent.
Regexp#match?
Ajout de Regexp#match?
, qui exécute une expression régulière sans créer l’objet
de référence arrières (back reference), ni changer $~
, de façon à réduire la
charge d’allocation mémoire.
Autres améliorations
Deboggage
Thread#report_on_exception et Thread.report_on_exception
Ruby ignore les exceptions non traitées par rescue
dans les threads, sauf
quand un autre thread impose le comportement contraire du fait de l’utilisation
de Thread#join. Avec
report_on_exception = true
, vous pouvez désormais contrôler a priori ce
comportement, et ainsi être notifiés quand un thread arbitraire meurt du fait
d’une exception non traitée.
Dites-nous quelle valeur par défaut vous souhaiteriez que Ruby définisse pour
le réglage report_on_exception
, et aussi pour report-on-GC, qui affiche un
rapport quand un thread (non-join
) est recyclé par le ramasse-miette.
La détection d’interblocage de Thread affiche désormais les threads avec leur backtrace et dépendances
Ruby comporte une détection des interblocages (deadlocks) pour les threads mis en attente, mais le rapport de détection ne fournissait pas suffisamment d’information jusqu’ici pour être réellement utile en phase de deboggage. Ruby 2.4 ajoute la backtrace au rapport, ainsi qu’une liste des threads dépendants.
Nous vous invitons à essayer tous ces changements apportés par Ruby 2.4.0-rc1 et à nous faire vos retours !
Autres changements notables depuis la version 2.3
- Support de OpenSSL 1.1.0 (et fin du support des versions 0.9.7 et précédentes)
- ext/tk retiré de la librairie standard (#8539)
- XMLRPC retiré de la librairie standard (#12160)
Consultez le fichier NEWS et le log de commits pour plus de détails.
Ces modifications correspondent en tout et pour tout à 2523 fichiers modifiés, 289129 insertions(+) et 84670 suppressions(-) depuis la sortie de Ruby 2.3.0 !
Joyeux Noël, bonnes vacances et amusez-vous avec cette version 2.4 de Ruby !
Téléchargement
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.bz2
SIZE: 12572424 bytes SHA1: 944d2588308391b20a89642472454d1dfe7b2360 SHA256: 440bbbdc49d08d3650f340dccb35986d9399177ad69a204def56e5d3954600cf SHA512: bef7bb53f63fb74073d071cc125fb67b273ed0779ef43c2d2969089b9ca21fff1bd012281c5b748f7a3c24dd26e71730d7248c05a01cb23ab2089eb4d02115fe
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.gz
SIZE: 14104044 bytes SHA1: d44a3c50a0e742341ed3033d5db79d865151a4f4 SHA256: 152fd0bd15a90b4a18213448f485d4b53e9f7662e1508190aa5b702446b29e3d SHA512: 21c9f596b42dd9cba7a53963a59fed0c2e0c1eb960a4ac7087ea3eaa991ce9252d32639e1edcb75b1d709bc07c4820a6dc336ab427d0643c6e6498e0eacdbc8b
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.xz
SIZE: 9906880 bytes SHA1: 038804bbd0e77508dd2510b729a9f3b325489b2e SHA256: 3a87fef45cba48b9322236be60c455c13fd4220184ce7287600361319bb63690 SHA512: 975a5388592adc038461e0acebb6c0efee242891b2ea8621476401458efe2bc0fdd317d3bf99beb745b0b3808410efdff33862da29c95c027f457943721e3ab6
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.zip
SIZE: 15758757 bytes SHA1: 29e1bab11551011718c35a51827edcb55bd656fc SHA256: 5c2bbfa26fd6a15a2d70961874b0f3a386206fcc5f698e240dd8b0c9f0f18c5e SHA512: 31d932372ce490eeac0a70bc8dcf842909a90435422398d069c05cf01d994936064b8f4e60879e28a8655c1296eb8e180e348cb95e001ed6ca73cda0ff77de23