Ruby 3.0.0 est arrivé dans en version de production le jour de Noël, après la release candidate du 20 décembre. L’exécution parallèle et les capacités de type description sont les principaux apports de cette évolution du langage open source dynamique. L’exécution parallèle arrive sous la forme d’une fonctionnalité expérimentale baptisée Ractor. C’est une abstraction concurrente sur le modèle d’Actor, destinée à fournir une exécution parallèle sans problème de sécurité sur les threads. Les développeurs peuvent créer plusieurs ractors et les exécuter en parallèle de façon sécurisée pour les threads parce que les ractors ne peuvent pas partager d’objets courants. La communication entre les ractors est prise en charge par la transmission de messages. Néanmoins, pour limiter le partage d’objets, Ractor introduit des restrictions dans la syntaxe de Ruby.
La version 3.0.0 de Ruby apporte aussi RBS, présenté comme un langage pour décrire les types de programmes Ruby. Elle est livrée avec le gem rbs qui permet d’analyser et de traiter les définitions de type écrites en RBS. Les vérificateurs de type, dont les profileurs de type et autres outils supportant RBS, comprendront mieux les programmes Ruby ayant des définitions RBS. Ce dernier est conçu pour prendre en charge les modèles qui reviennent le plus couramment dans les programmes Ruby. Les types de programmes avancés peuvent être écrits dont les types d’union, la méthode overloading, ainsi que les génériques. Le duck typing avec les types d’interface est également supporté.
Performances améliorées sur le compilateur MJIT
En dehors de Ractor et RBS, de nombreuses autres capacités sont livrées avec la version 3.0.0 de Ruby dont Fiber#scheduler pour intercepter les opérations bloquantes. Cette fonctionnalité, auparavant identifiée Thread#scheduler, permet une exécution concurrente légère sans changer le code existant.
Autre fonctionnalité expérimentale, Memory view est une API C pour échanger une zone de mémoire brute, telle qu’un tableau de valeurs numériques ou une image bitmap, entre des bibliothèques d’extension. Ces dernières peuvent aussi partager les métadonnées de la zone mémoire, telles que la forme.
Parmi les autres évolutions, le compilateur MJIT (Method-based Just In Time) bénéficie de performances améliorées, les arguments de mots-clés sont séparés des autres arguments, l'intégration built-in de Hash#except, une déclaration d’affectation vers la droite, une définition de méthode sans fin, ainsi que l’ajout d’un modèle de recherche. Les développeurs peuvent télécharger Ruby 3.0.0 sur ruby-lang.org.
Commentaire