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 !

Ruby 3.0.0 est disponible, cette version majeure est annoncée comme étant trois fois plus rapide que Ruby 2
Et introduit plusieurs nouvelles fonctionnalités dont les Ractors, RBS et TypeProf

Le , par Bill Fassinou

18PARTAGES

5  0 
Le 25 décembre dernier, l'équipe de développement de Ruby annonce la sortie officielle de Ruby 3.0.0. Depuis 2015, l'équipe de développement travaillait sur Ruby 3, dont l'objectif principal est la performance. Ruby 3 est annoncé comme étant trois fois plus rapide que Ruby 2. Avec le benchmark d'Optcarrot, qui mesure les performances d'un seul thread basé sur la charge de travail d'émulation de jeu de NES, il a atteint des performances 3 fois plus rapides que Ruby 2.0.


Ruby 3.0 introduit plusieurs nouvelles fonctionnalités. De nombreuses améliorations ont été mises en œuvre dans MJIT. À partir de Ruby 3.0, JIT est censé améliorer les performances des charges de travail limitées ou toute autre application qui passe la majorité du temps à appeler plusieurs méthodes plusieurs fois. Bien que Ruby 3.0 ait considérablement réduit la taille du code JIT-ed, il n'est toujours pas prêt pour l'optimisation des charges de travail comme Rails, qui passent souvent du temps sur tant de méthodes et souffrent donc de problèmes i-cache exacerbés par JIT. Alors, l'équipe de développement promet de travailler sur Ruby 3.1 pour d'autres améliorations sur ce problème.

Ruby 3.0 vient avec Ractor, bien qu'étant expérimental. Il est conçu pour fournir une fonction d'exécution parallèle sans souci de sécurité des fils. Vous pouvez créer plusieurs ractors et les exécuter en parallèle. Ractor vous permet de réaliser des programmes parallèles sans risque pour les threads, car les ractors ne peuvent pas partager des objets normaux. La communication entre les ractors est prise en charge par la transmission de messages.

Pour limiter le partage d'objets, Ractor introduit plusieurs restrictions dans la syntaxe de Ruby (sans plusieurs ractors, il n'y a pas de restriction). La spécification et l'implémentation ne sont pas matures et peuvent être modifiées à l'avenir, de sorte que cette fonctionnalité est marquée comme expérimentale et affiche l'avertissement "experimental feature" lors du premier Ractor.new. Ruby 3.0.0 introduit le "Planificateur de fibres ( Fiber Scheduler en Anglais )". Il est introduit pour intercepter les opérations de blocage. Cela permet une concurrence d'accès légère sans modifier le code existant. Comme on pouvait s'y attendre, la version 3.0 de Ruby vient avec RBS, un langage pour décrire les types de programmes Ruby.

« Les années 2010 ont été une ère de langages de programmation statiquement typés. Ruby cherche l'avenir avec la vérification de type statique, sans déclaration de type, en utilisant une interprétation abstraite. RBS et TypeProf sont la première étape vers le futur. D'autres étapes sont à venir », a déclaré Yukihiro Matsumoto, concepteur du langage de programmation Ruby. Les vérificateurs de type, y compris TypeProf et d'autres outils prenant en charge RBS, comprendront beaucoup mieux les programmes Ruby avec les définitions RBS.

Le but de RBS est de prendre en charge les modèles couramment observés dans les programmes Ruby et il permet d'écrire des types avancés, y compris les types d'union, la surcharge de méthode et les génériques. Ruby 3.0 est livré avec le rbsgem, qui permet d'analyser et de traiter les définitions de type écrites en RBS. Voici un petit exemple de RBS avec des définitions de classe, de module et de constante.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
module ChatApp
  VERSION: String
  class Channel
    attr_reader name: String
    attr_reader messages: Array[Message]
    attr_reader users: Array[User | Bot]              # `|` means union types, `User` or `Bot`.
    def initialize: (String) -> void
    def post: (String, from: User | Bot) -> Message   # Method overloading is supported.
            | (File, from: User | Bot) -> Message
  end
end
En ce qui concerne TypeProf, c'est un outil d'analyse de type fourni dans le package Ruby. Actuellement, TypeProf sert de sorte d'inférence de type. Il lit du code Ruby simple (non annoté de type), analyse quelles méthodes sont définies et comment elles sont utilisées, et génère un prototype de signature de type au format RBS. TypeProf est expérimental ; seul un sous-ensemble du langage Ruby est pris en charge et la détection des erreurs de type est limitée. Mais il continue de croître rapidement pour améliorer la couverture des fonctionnalités du langage, les performances d'analyse et la convivialité.

Source : Ruby 3.0.0

Et vous ?

Que pensez-vous des nouveautés de cette version majeure de Ruby ?

Voir aussi

La première Release Candidate de Ruby 3.0.0 est disponible avec les vérificateurs de type, y compris TypeProf et d'autres outils prenant en charge RBS

RubyMine 2020.3 est disponible avec de nouvelles fonctionnalités pour Ruby 3.0 et Rails, la prise en charge du staging Git et des améliorations pour le débogueur et l'expérience utilisateur

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

RubyMine 2020.2 disponible, l'EDI de JetBrains vient avec la prise en charge de Liquid, le support complet des pull requests GitHub et bien d'autres nouvelles fonctionnalités pour Ruby et Rails

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