Sortie du langage de programmation Ruby 3.1

Ruby 3.1.0 est sorti, un langage de programmation orienté objet dynamique très efficace dans le développement de programmes et intégrant les meilleures fonctionnalités de Perl, Java, Python, Smalltalk, Eiffel, Ada et Lisp. Le code du projet est distribué sous les licences BSD (« 2-clause BSDL ») et « Ruby », qui fait référence à la dernière version de la licence GPL et est entièrement compatible avec GPLv3.

Principales améliorations :

  • Un nouveau compilateur JIT expérimental en cours, YJIT, a été ajouté, créé par les développeurs de la plateforme de commerce électronique Shopify dans le cadre d'une initiative visant à améliorer les performances des programmes Ruby qui utilisent le framework Rails et appellent de nombreuses méthodes. La principale différence avec le compilateur MJIT JIT précédemment utilisé, qui est basé sur le traitement de méthodes entières et utilise un compilateur externe en langage C, est que YJIT utilise le Lazy Basic Block Versioning (LBBV) et contient un compilateur JIT intégré. Avec LBBV, JIT compile d'abord uniquement le début de la méthode, et compile le reste quelque temps plus tard, une fois que les types de variables et d'arguments utilisés ont été déterminés lors de l'exécution. Lors de l'utilisation de YJIT, une augmentation de 22 % des performances a été enregistrée lors de l'exécution du test railsbench et une augmentation de 39 % lors du test de rendu liquide. YJIT est actuellement limité à la prise en charge des systèmes d'exploitation de type Unix sur les systèmes dotés d'une architecture x86-64 et est désactivé par défaut (pour l'activer, spécifiez l'indicateur « --yjit » dans la ligne de commande).
  • Amélioration des performances de l'ancien compilateur MJIT JIT. Pour les projets utilisant Rails, la taille maximale du cache par défaut (--jit-max-cache) a été augmentée de 100 à 10000 1000 instructions. Arrêt d'utiliser JIT pour les méthodes contenant plus de XNUMX XNUMX instructions. Pour prendre en charge Zeitwerk of Rails, le code JIT n'est plus supprimé lorsque TracePoint est activé pour les événements de classe.
  • Il comprend un débogueur debug.gem entièrement réécrit, qui prend en charge le débogage à distance, ne ralentit pas l'application déboguée, prend en charge l'intégration avec des interfaces de débogage avancées (VSCode et Chrome), peut être utilisé pour déboguer des applications multithread et multi-processus, fournit une interface d'exécution de code REPL, offre des capacités de traçage avancées, peut enregistrer et rejouer des extraits de code. Le débogueur lib/debug.rb précédemment proposé a été supprimé de la distribution de base.
    Sortie du langage de programmation Ruby 3.1
  • Implémentation d'une mise en évidence visuelle des erreurs dans les rapports de trace de rappel. Le signalement des erreurs est fourni à l'aide du package gem intégré et activé par défaut error_highlight. Pour désactiver le signalement d'erreur, vous pouvez utiliser le paramètre « --disable-error_highlight ». $ ruby ​​​​test.rb test.rb:1:in " " : méthode non définie "time" pour 1:Integer (NoMethodError) 1.time {} ^^^^^ Vouliez-vous dire ? fois
  • Le shell de calculs interactifs IRB (REPL, Read-Eval-Print-Loop) implémente la complétion automatique du code saisi (au fur et à mesure que vous tapez, un indice s'affiche avec des options pour continuer la saisie, entre lesquelles vous pouvez vous déplacer avec la Tab ou Shift+ La touche TAB). Après avoir sélectionné l'option de continuation, une boîte de dialogue s'affiche à proximité qui affiche la documentation associée à l'élément sélectionné. Le raccourci clavier Alt+d peut être utilisé pour accéder à la documentation complète.
    Sortie du langage de programmation Ruby 3.1
  • La syntaxe du langage permet désormais d'ignorer les valeurs des littéraux de hachage et des arguments de mots-clés lors de l'appel de fonctions. Par exemple, au lieu de l'expression "{x: x, y: y}", vous pouvez désormais spécifier "{x:, y:}", et au lieu de "foo(x: x, y: y)" - foo( x:, y: )".
  • Prise en charge stabilisée des correspondances de modèles sur une seule ligne (ary => [x, y, z]), qui ne sont plus signalées comme expérimentales.
  • L'opérateur "^" dans les correspondances de modèles peut désormais contenir des expressions arbitraires, par exemple : Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Dans les correspondances de modèles sur une seule ligne, vous pouvez omettre les parenthèses : [0, 1] => _, x {y : 2} => y : x #=> 1 y #=> 2
  • Le langage d'annotation de type RBS, qui vous permet de déterminer la structure du programme et les types utilisés, a ajouté la prise en charge de la spécification de la limite supérieure des paramètres de type à l'aide du symbole « < », a ajouté la prise en charge des alias de types génériques, a implémenté la prise en charge de collections pour la gestion des gemmes, des performances améliorées et la mise en œuvre de nombreuses nouvelles signatures pour les bibliothèques intégrées et standard.
  • La prise en charge expérimentale des environnements de développement intégrés a été ajoutée à l'analyseur de type statique TypePro, qui génère des annotations RBS basées sur l'analyse de code sans informations de type explicites (par exemple, un module complémentaire a été préparé pour intégrer TypePro à l'éditeur VSCode).
  • L'ordre de traitement de plusieurs affectations a été modifié. Par exemple, auparavant, les composants de l'expression « foo[0], bar[0] = baz, qux » étaient traités dans l'ordre baz, qux, foo, bar, mais maintenant foo, bar, baz, qux.
  • Ajout d'un support expérimental pour l'allocation de mémoire pour les chaînes à l'aide du mécanisme VWA (Variable width allocation).
  • Versions mises à jour des modules gem intégrés et de ceux inclus dans la bibliothèque standard. Les packages net-ftp, net-imap, net-pop, net-smtp, Matrix, Prime et Debug sont intégrés.

Source: opennet.ru

Ajouter un commentaire