Ruby 2.4.0-rc1 est disponible

Nous sommes heureux d’annoncer la sortie de Ruby 2.4.0-rc1.

Ruby 2.4.0-rc1 est la première release candidate pour la version stable 2.4.0 Le but de cette version est d’obtenir des retours de la communauté : n’hésitez pas à nous envoyer vos remarques.

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 à 2519 fichiers modifiés, 288606 insertions(+) et 83896 suppressions(-) depuis la sortie de Ruby 2.3.0 !

Téléchargement

  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0-rc1.tar.bz2

    SIZE:   12512729 bytes
    SHA1:   a0439652a97a2406b691e8a1e586e2cf08c258ba
    SHA256: 3b156b20f9df0dd62cbeeb8e57e66ea872d2a5b55fabdef1889650122bcc2ea7
    SHA512: b43902ac7794487197df55a45256819d2e7540b77f1ed4eb68def3e0473ee98860a400862075bafadbde74f242e1dfe36a18cd6fe05ac42aae1ea6dddc9978ce
    
  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0-rc1.tar.gz

    SIZE:   14098505 bytes
    SHA1:   6b242f9ec7b908c9aa26e497440684ba06d86927
    SHA256: e41ada7650eed2a5800534d1201ba7c88f1627085659df994f47ab4c5e327745
    SHA512: 26d3c60483ce2d6eaabd7077085102fad6633f18cf5d772bacf6f563670030cb7bba22d54d8b7dfa5eac8b52990371c4a6ad1c095dff6f6b3a7bbe1a8ffb3754
    
  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0-rc1.tar.xz

    SIZE:   9930088 bytes
    SHA1:   7c404e8bec9859f708927f7203d4f42187e678b7
    SHA256: 3f014b3186d10676da6c512d14c65db23ccc4bf200fed9d7c6f9a58fd1e3295b
    SHA512: 22e209e28da1f2394f50c0a7dd5d0d4d4c0c5a6b5b0b02260fad0267a0940b98f0e2b0f36a44f87d1612555cb3022f43cd136a5186c7f87650aa20264408d415
    
  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0-rc1.zip

    SIZE:   15785968 bytes
    SHA1:   7d82386434ccbb1701f2995286bf29c8b9179e01
    SHA256: 14e6910e36618cddffeb22bad5f1052f907dc31ec93d4aa945bca0905d8a52c4
    SHA512: 5dd89320d429e5bd5faf3709be7e5b70f7355304d6324d7ac13a69187e5f1446ad5988c8186bc33f4fea8934288294f9d16fea173f39b2b39967746c4b03d1d4
    

Commentaire de release

Consultez également notre calendrier de sortie :

ReleaseEngineering24