Sortie de Ruby 2.0.0-p0

Nous sommes heureux d'annoncer la sortie de Ruby 2.0.0-p0 !

Cette version est la première release stable de la branche 2.0. Elle intègre de nombreuses nouvelles fonctionnalités et améliorations, pour faire face à la diversification toujours plus importante des cas d'usages de Ruby.

Nous vous souhaitons un happy hacking avec Ruby 2.0.0 !

Téléchargements

Quoi de neuf dans Ruby 2.0.0 ?

Nouvelles fonctionnalités

Petit aperçu des nouveautés…

  • Fonctionnalités principales du langage :
    • les arguments mots-clés, pour plus de flexibilité (API…)
    • Module#prepend, une nouvelle façon « d'augmenter » une classe
    • le litéral %i, pour créer un tableau de symboles avec une syntaxe minimale
    • __dir__, pour accéder directement au nom du dossier contenant le fichier en cours d'exécution
    • UTF-8 devient l'encodage par défaut (fini les commentaires « magiques » !)
  • Au niveau des librairies du Core :
    • Enumerable#lazy et Enumerator::Lazy permettent de gérer des suites potentiellement infinies (lazy streams)
    • Enumerator#size et Range#size, pour déterminer la taille par évaluation retardée (lazy evaluation)
    • #to_h comme nouvelle méthode conventionnelle pour gérer la conversion vers un Hash
    • Onigmo remplace Oniguruma comme moteur d'expressions régulières (c'est un fork)
    • nouvelle API de gestion asynchrone des exceptions
  • Du côté de la chasse aux bugs
    • support de DTrace, ce qui permet notamment de produire des rapports at run-time en production
    • TracePoint, une meilleure API de tracing (pour l'analyse de logs)
  • Améliorations des performances
    • optimisation du ramasse-miettes par "bitmap marking"
    • optimisation de Kernel#require, ce qui permet par exemple à Ruby On Rails de démarrer très rapidement
    • diverses optimisations dans la VM (routage des messages aux méthodes…)
    • optimisation des opérations de calculs sur les flottants (Float)

Par ailleurs, et toujours en mode « expérimental », vous retrouverez dans cette version les Refinements.

Pour prendre connaissance de tous les détails, consultez le fichier NEWS.

Compatibilité

Nous avons pris garde à concevoir la version 2.0.0 de telle façon à ce qu'elle soit compatible avec la 1.9, à quelques détails près (seulement !). Il sera donc plus facile de migrer de la 1.9 à la 2.0 qu'il ne l'avait été pour le passage 1.8 / 1.9. Les incompatibilités principales sont décrites ci-après.

À noter que grâce au travail de nombreux collaborateurs, un certain nombre d'applications telles que Rails ou tDiary sont d'ores et déjà fonctionnelles sur cette version 2.0.0-p0 !

Documentation

Un effort important à également été produit pour améliorer la documentation, ce qui a été une demande régulière de la part de la communauté. Le volume de documentation rdoc pour les modules et les méthodes a ainsi notablement augmenté : 75% de la 2.0.0 est couvert, tandis que la 1.9.3 plafonnait vers les 60%. Par ailleurs, vous pouvez retrouver une description de la syntaxe ruby en appelant:

ri ruby:syntax

Stabilité

Contrairement à la 1.9.0, la version 2.0.0 est une release stable… bien que son numéro micro soit 0. Évidemment, nous incitons tous les mainteneurs de librairies à supporter dès que possible Ruby 2.0.0, ce qui devrait être relativement simple (cf. Compatibilité).

Pour conclure, Ruby 2.0.0 est bel et bien là, prête à vous simplifier une nouvelle fois la vie : adoptez-la !

Notes

Articles

Voici une sélection d'articles parus à l'occasion du lancement de la 2.0.0 :

Les articles suivants sont également intéressants, hormis pour ce qui concerne les Refinements (il y a eu des changements depuis leurs parutions) :

La dernière édition du Rubyist Magazine propose quelques articles très intéressants écrits par les contributeurs des fonctionnalités sur lesquels ils portent :

Ce dernier contenu est malheureusement disponible en japonais uniquement. Nous avons dans l'idée d'en faire des traductions anglaises rapidement.

Incompatibilités

Il y a cinq incompatibilités majeures connues à ce jour, par rapport à la 1.9 :

  • L'encodage par défaut des scripts ruby est désormais UTF-8 [#6679]. Certaines personnes ont mentionné le fait que cela affecte le fonctionnement de programmes existant, par exemple des systèmes de benchmarking qui deviennent très lents [ruby-dev:46547].
  • iconv a finalement été retiré, après avoir été déprécié lors de l'introduction de M17N dans ruby 1.9. Utilisez désormais String#encode et autres.
  • L'ABI (Application Binary Interface) connaît un changement majeur [ruby-core:48984]. A priori, une simple réinstallation des extensions doit faire l'affaire, mais soyez bien attentifs à ne pas copier les fichiers .so ou .bundle depuis une installation 1.9 ("DO NOT COPY .so OR .bundle FILES FROM 1.9"), faute de quoi Ruby ne fonctionnera pas.
  • #lines, #chars, #codepoints et #bytes retournent désormais un Array au lieu d'un Enumerator [#6670]. Cette modification permet d'éviter d'avoir à écrire systématiquement "lines.to_a". Pour retrouver un énumérateur, utilisez #each_line, par exemple.
  • Object#inspect retourne désormais toujours une chaîne de caractères, telle que #<ClassName:0x…>, au lieu de passer la main à #to_s [#2152].

Pour les incompatibilités mineures, voyez [ruby-core:49119].

À propos des Refinements

Nous avons décidé d'intégrer la nouvelle fonctionnalité appelée Refinements dans cette version. Elle étend les possibilités coté modularité des scripts Ruby. Il s'agit toutefois d'une fonctionnalité expérimentale, et sa spécification est susceptible de changer d'ici la prochaine version de Ruby. Néanmoins, nous vous encourageons à la tester, et à nous faire part de vos retours qui nous seront d'une grande aide pour la finaliser.

Remerciements

Un très grand nombre de personnes ont participé à l'élaboration de cette version. Il est rapidement devenu manifeste que même une liste partielle de remerciements serait trop longue à inclure directement dans cette actualité ! Aussi, permettez-moi de vous rediriger vers un lien spécial :

Merci à tous et à toutes !