Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Ruby 2.7 est disponible en version stable
Avec l'ajout du filtrage par motif, d'une nouvelle méthode pour compacter le tas et plusieurs améliorations de performance non négligeables

Le , par Olivier Famien

115PARTAGES

9  0 
Comme de coutume, l’équipe de Ruby vient d’offrir son cadeau de Noël avec la version 2.7 du langage de script qui est disponible en version stable. Dans cette nouvelle itération, l’on y trouve de nouvelles fonctionnalités et des améliorations de performance.

Au niveau des nouvelles fonctionnalités, l’on note l’introduction du filtrage par motif (pattern matching en anglais). Cette fonctionnalité consiste à spécifier des modèles auxquels certaines données doivent se conformer, puis à vérifier si c’est le cas et à déconstruire les données en fonction de ces modèles. Il convient de préciser que cette fonctionnalité n’est pas l’apanage du langage de script Ruby. En effet, le Pattern matching est largement utilisé dans les langages de programmation fonctionnelle. Ci-dessous, un cas d’utilisation de cette fonctionnalité qui permet de parcourir un objet donné et d’attribuer sa valeur s’il correspond à un modèle.

Code Ruby : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
require "json"
 
json = <<END
{
  "name": "Alice",
  "age": 30,
  "children": [{ "name": "Bob", "age": 2 }]
}
END
 
case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
  p age #=> 2
end

Le filtrage par motif prend en charge le hachage et permet d’écrire du code plus concis. Toutefois, il est encore au stade expérimental. C’est pourquoi il est conseillé de l’utiliser en dehors des environnements de production.

Comme amélioration significative dans cette nouvelle itération de Ruby, irb, l’outil interactif REPL prend désormais en charge l’édition multilignes. Il est soutenu par reline, la bibliothèque compatible readline implémentée en Ruby. L’outil fournit également une intégration rdoc. Par ailleurs, dans irb, vous pouvez afficher la référence d’une classe, d’un module ou d’une méthode donnée. Enfin, les lignes source affichées par Binding#irbet et inspectant les résultats pour les objets de la classe principale sont maintenant en couleur.


À côté des améliorations, nous avons également un nouveau défragmenteur qui a été ajouté dans Ruby 2.7. En effet, certains programmes Ruby multithread peuvent provoquer une fragmentation de la mémoire ce qui pourrait entraîner une utilisation élevée de la mémoire et une perte de performance. Pour régler ce problème, un nouveau compacteur GC a été ajouté pour défragmenter les espaces mémoire qui seraient fragmentés. Pour se faire, il utilise la méthode GC.compact pour compacter le tas. Cette fonction compacte les objets qui se trouvent dans le tas afin que moins de pages puissent être utilisées et que le tas soit plus facile pour la copie et l’écriture.

En plus de ces améliorations majeures, l’équipe de Ruby déclare que pour cette nouvelle version, la conversion automatique des arguments de mots clés et des arguments de position est obsolète. En outre, la conversion sera supprimée dans Ruby 3. Et pour ce qui concerne Ruby 3, il est signifié déjà que lorsqu’un appel de méthode transmet un Hash au dernier argument, et lorsqu’il ne transmet aucun mot clé, et lorsque la méthode appelée accepte des mots clés, un avertissement est émis. Pour continuer à traiter le hachage en tant que mots clés, il faut ajouter un opérateur à double splat pour éviter l’avertissement et garantir un comportement correct.

Au-delà de ces changements, nous avons également :

  • l’ajout de paramètres numérotés comme paramètres de bloc par défaut ;
  • l’ajout de Enumerable#tally qui compte l’occurrence de chaque élément ;
  • l’ajout de Enumerator::Lazy#eager qui génère un énumérateur non paresseux à partir d’un énumérateur paresseux ;
  • l’autorisation de l’appel d’une méthode privée avec un littéral self comme récepteur ;
  • des améliorations de performance ;
  • des mises à jour de la bibliothèque standard ;
  • et bien d’autres améliorations.

Source : Ruby

Et vous ?

Avez-vous testé Ruby 2.7 ? Quelles sont les fonctionnalités qui vous ont le plus marqués en bien ou en mal ?

Quelles fonctionnalités auriez-vous souhaité avoir dans cette nouvelle version de Ruby ?

Quelles fonctionnalités souhaiteriez-vous voir disparaître dans les prochaines versions de Ruby ?

Voir aussi

Ruby 2.6 est disponible en version stable avec un nouveau compilateur JIT en mode expérimental et un nouveau module pour analyser du code Ruby
Le livre « Hello Ruby » ambitionne d’apprendre aux enfants les rudiments de la programmation, que pensez-vous de cette initiative ?
PHP vs Ruby, une comparaison de deux langages phares du Web
Un développeur estime que Ruby on Rails est dépassé et conseille aux entreprises de se tourner vers Node.js, partagez-vous ce point de vue ?
RoR : la version 6 du framework Ruby a été publiée avec la prise en charge de plusieurs bases de données et d’autres améliorations

Une erreur dans cette actualité ? Signalez-le nous !