IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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 !

La version 4.0.0 du langage de programmation Ruby est sortie, introduisant « Ruby Box », une nouvelle fonctionnalité qui permet de séparer les définitions, et « ZJIT », un nouveau compilateur JIT

Le , par Alex

360PARTAGES

6  0 
La version 4.0.0 de Ruby est sortie et introduit « Ruby Box » et « ZJIT ». Ruby Box est une nouvelle fonctionnalité (expérimentale) qui permet de séparer les définitions. ZJIT est un nouveau compilateur juste-à-temps (JIT), développé comme la prochaine génération de YJIT. Ractor, le mécanisme d'exécution parallèle de Ruby, a bénéficié de plusieurs améliorations. En termes de performances, de nombreuses structures de données internes ont été améliorées afin de réduire considérablement les conflits sur un verrou global, ce qui permet un meilleur parallélisme.

Ruby est un langage de programmation polyvalent. Il a été conçu dans un souci de productivité et de simplicité. En Ruby, tout est un objet, y compris les types de données primitifs. Il a été développé au milieu des années 1990 par Yukihiro « Matz » Matsumoto au Japon. Ruby est un langage interprété, de haut niveau et à typage dynamique ; son interpréteur utilise le ramasse-miettes et la compilation juste à temps (JIT). Il prend en charge plusieurs paradigmes de programmation, notamment la programmation procédurale, orientée objet et fonctionnelle. Selon son créateur, Ruby a été influencé par Perl, Smalltalk, Eiffel, Ada, BASIC et Lisp.

La version 4.0.0 de Ruby est sortie et introduit « Ruby Box » et « ZJIT ». Ruby Box est une nouvelle fonctionnalité (expérimentale) qui permet de séparer les définitions. ZJIT est un nouveau compilateur juste-à-temps (JIT), développé comme la prochaine génération de YJIT. ZJIT est plus rapide que l'interpréteur, mais pas encore aussi rapide que YJIT. Cette version apporte également des mises à jour des classes principales.

Ractor, le mécanisme d'exécution parallèle de Ruby, a bénéficié de plusieurs améliorations. En termes de performances, de nombreuses structures de données internes ont été améliorées afin de réduire considérablement les conflits sur un verrou global, ce qui permet un meilleur parallélisme. Les Ractors partagent désormais moins de données internes, ce qui réduit les conflits de cache CPU lors de l'exécution en parallèle.

https://youtu.be/UYm0kfnRTJk

Ruby Box

Ruby Box est une nouvelle fonctionnalité (expérimentale) qui permet de séparer les définitions. Ruby Box est activée lorsque la variable d'environnement RUBY_BOX=1 est spécifiée. La classe est Ruby::Box.

Les définitions chargées dans une boîte sont isolées dans celle-ci. Ruby Box peut isoler/séparer les monkey patches, les modifications des variables globales/de classe, les définitions de classe/module et les bibliothèques natives/ruby chargées des autres boîtes.

Les cas d'utilisation prévus sont les suivants :

- Exécuter des cas de test dans une boîte pour protéger les autres tests lorsque le cas de test utilise des monkey patches pour remplacer quelque chose

- Exécuter des boîtes d'applications web en parallèle pour effectuer un déploiement bleu-vert sur un serveur d'applications dans un processus Ruby

- Exécuter des boîtes d'applications web en parallèle pour évaluer les mises à jour de dépendances pendant une certaine période en vérifiant les différences de réponse à l'aide du code Ruby.

- Utiliser comme API de base (bas niveau) pour implémenter une sorte d'API « package » (haut niveau) (elle n'est pas encore conçue).

ZJIT

ZJIT est un nouveau compilateur juste-à-temps (JIT), développé comme la prochaine génération de YJIT. Vous avez besoin de Rust 1.85.0 ou d'une version plus récente pour compiler Ruby avec le support ZJIT, et ZJIT est activé lorsque --zjit est spécifié.

L'équipe développe un nouveau compilateur pour Ruby afin d'augmenter les performances maximales (taille d'unité de compilation plus importante et SSA IR) et d'encourager davantage de contributions externes (en devenant un compilateur plus traditionnel).

ZJIT est plus rapide que l'interpréteur, mais pas encore aussi rapide que YJIT. Les développeurs sont encouragés à tester ZJIT, mais il n'est pas recommandé de ne pas le déployer en production pour le moment.

Améliorations de Ractor

Ractor, le mécanisme d'exécution parallèle de Ruby, a bénéficié de plusieurs améliorations. Une nouvelle classe, Ractor::Port, a été introduite pour résoudre les problèmes liés à l'envoi et à la réception de messages. De plus, Ractor.shareable_proc facilite le partage d'objets Proc entre les Ractors.

En termes de performances, de nombreuses structures de données internes ont été améliorées afin de réduire considérablement les conflits sur un verrou global, ce qui permet un meilleur parallélisme. Les Ractors partagent désormais moins de données internes, ce qui réduit les conflits de cache CPU lors de l'exécution en parallèle.

Ractor a été introduit pour la première fois dans Ruby 3.0 en tant que fonctionnalité expérimentale, l'objectif est de supprimer son statut « expérimental » l'année prochaine.

Modifications du langage

- *nil n'appelle plus nil.to_a, de la même manière que **nil n'appelle pas nil.to_hash.

- Les opérateurs binaires logiques (||, &&, and et or) au début d'une ligne continuent la ligne précédente, comme le point fluide. Les exemples de code suivants sont équivalents :

Code Ruby : Sélectionner tout
1
2
3
4
  if condition1 
     && condition2 
    ... 
  end


Auparavant :

Code Ruby : Sélectionner tout
1
2
3
  if condition1 && condition2 
    ... 
  end


Code Ruby : Sélectionner tout
1
2
3
4
  if condition1 && 
     condition2 
    ... 
  end


Mises à jour des classes principales

Array

- Array#rfind a été ajouté comme alternative plus efficace à array.reverse_each.find.

- Array#find a été ajouté comme remplacement plus efficace de Enumerable#find.

Binding

- Binding#local_variables n'inclut plus de paramètres numérotés. De plus, Binding#local_variable_get, Binding#local_variable_set et Binding#local_variable_defined? refusent de traiter les paramètres numérotés.

- Binding#implicit_parameters, Binding#implicit_parameter_get et Binding#implicit_parameter_defined? ont été ajoutés pour accéder aux paramètres numérotés et au paramètre « it ».

Enumerator

- Enumerator.produce accepte désormais un argument clé facultatif size pour...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

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