La mise à jour Ruby 4.0 apporte ZJIT, des fonctionnalités d'isolation et bien plus encore



Le langage de programmation Ruby poursuit sa tradition de fourniture de mises à jour majeures le jour de Noël, en annonçant la sortie de Ruby 4.0.0, qui introduit deux nouvelles fonctionnalités expérimentales massives : le mécanisme d'isolation connu sous le nom de Ruby Box et le compilateur juste-à-temps de nouvelle génération, ZJIT.

Le plus gros changement architectural arrivant avec la version 4.0 est définitivement Ruby Box. Cette nouvelle fonctionnalité expérimentale a une séparation stricte pour les définitions chargées dans la boîte. Si vous avez déjà été confronté à des problèmes de dépendance complexes ou si un patch Rogue Monkey a perturbé votre environnement global, vous savez à quel point l'isolement peut être crucial. Les définitions chargées dans une Ruby Box sont isolées des autres boîtes, ce qui signifie qu'elles peuvent séparer les modifications de variables globales ou de classe, les définitions de classe et même les bibliothèques natives chargées.

L'équipe Ruby suggère d'utiliser des boîtes pour exécuter des cas de test dans lesquels vous pourriez avoir besoin de correctifs singe sans vous soucier de la fuite de ces modifications et de leur incidence sur d'autres tests. Vous pouvez également utiliser cette fonctionnalité comme base pour implémenter des stratégies de déploiement bleu-vert sur un serveur d'applications, en exécutant des boîtes d'applications Web parallèles dans un seul processus Ruby. Il s’agit d’une puissante API de bas niveau, et je m’attends pleinement à voir des outils de gestion de packages de haut niveau l’utiliser largement à l’avenir.

Sur le plan des performances, les développeurs regardent déjà au-delà de YJIT avec l'introduction de ZJIT, un tout nouveau compilateur juste-à-temps. ZJIT est conçu pour être la prochaine étape en matière de performances Ruby, visant un plafond de performances beaucoup plus élevé en utilisant des éléments tels que SSA IR et des unités de compilation plus grandes. L'équipe tente également de faire de ZJIT un compilateur de méthodes plus traditionnel, ce qui devrait encourager davantage de contributions externes d'experts en optimisation.

À l’heure actuelle, ZJIT est encore hautement expérimental. Bien qu'il soit sensiblement plus rapide que l'interpréteur Ruby standard, il n'a pas encore tout à fait rattrapé YJIT. Je dirais que le plus gros problème est que vous ne devriez pas encore compter sur lui pour les charges de travail de production, mais vous pouvez certainement l'expérimenter maintenant si Rust 1.85.0 ou une version plus récente est installé pour le construire. Nous devrons attendre Ruby 4.1 pour voir si ZJIT devient véritablement le champion de la performance que vise l'équipe.

Au-delà des nouvelles fonctionnalités expérimentales, nous constatons des améliorations significatives de la stabilité et des performances de Ractor, le mécanisme d'exécution parallèle de Ruby. Ractor a été introduit comme expérimental dans Ruby 3.0 et l'équipe travaille à supprimer cette balise au cours de l'année prochaine. La mise à jour inclut des optimisations internes majeures conçues pour améliorer le parallélisme. Les Ractors partagent désormais moins de données internes, ce qui réduit les conflits de cache du processeur lors de l'exécution simultanée de plusieurs threads.

Le mécanisme de synchronisation Ractor a également été mis à jour avec l'introduction d'une nouvelle classe appelée Ractor::Port. Cette classe fournit des méthodes explicites comme receive et send pour la communication entre Ractors. Cet ajout entraîne la suppression de méthodes plus anciennes et moins intuitives comme Ractor.yield et Ractor#take. Les développeurs bénéficient également de nouvelles méthodes telles que Ractor#join et Ractor#valuequi reflète le comportement familier des threads lorsqu'ils attendent la fin d'un Ractor. Le nouveau Ractor.shareable_proc facilite également le passage de la logique entre les unités d'exécution parallèles.

Ruby 4.0 apporte également plusieurs mises à jour de qualité de vie au langage principal et aux classes intégrées. Par exemple, le langage autorisera désormais les opérateurs binaires logiques comme && ou || pour continuer la ligne précédente si elle apparaît au début d'une nouvelle ligne, de la même manière que fonctionne l'opérateur point fluide.

Une fonctionnalité que j'aime vraiment est l'amélioration de ErrorHighlight. Lorsqu'un ArgumentError est déclenché, le débogueur affiche désormais des extraits de code pour l'appel de méthode et la définition de la méthode. Cette fonctionnalité est énorme pour le débogage, vous permettant de voir instantanément où le mauvais nombre d'arguments a été transmis et où la méthode a été définie, le tout dans un seul extrait clair.

Les classes principales ont également reçu une mise à jour axée sur la confidentialité. Le Kernel#inspect La méthode recherche désormais une méthode privée appelée instance_variables_to_inspect. De plus, deux composants couramment utilisés, Pathname et Setsont promus de gemmes par défaut à classes de base.

Il s'agit d'une grosse mise à jour, mais c'est ce à quoi il faut s'attendre avec la version 4.0 ; vous pouvez récupérer la dernière archive tar ou zip sur le site officiel dès aujourd'hui.

Source: Rubis



Vous pouvez lire l’article original (en Angais) sur le blogwww.howtogeek.com