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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby Discussion :

Ruby 3.0.0 est disponible, cette version majeure est annoncée comme étant 3 fois plus rapide que Ruby 2


Sujet :

Ruby

  1. #1
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    Juin 2016
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Dirigeant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 3 160
    Points : 66 259
    Points
    66 259
    Par défaut Ruby 3.0.0 est disponible, cette version majeure est annoncée comme étant 3 fois plus rapide que Ruby 2
    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

    L'équipe de développement du langage de programmation Ruby annonce la disponibilité de la première version admissible de Ruby 3.0.0. C'est une version qui introduit un certain nombre de nouvelles fonctionnalités et améliorations de performances. Au niveau des nouvelles fonctionnalités, l'équipe de développement apporte de nouveautés pour RBS, un langage pour décrire les types de programmes 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.

    Vous pouvez noter la définition des classes et des modules : les méthodes définies dans une classe, variables d'instance et leurs types, et relations d'héritage / mix-in. 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 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 - Visualiser dans une fenêtre à part
    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
    La RC1 de Ruby 3.0.0 vient avec TypeProf. Il s'agit d'un outil d'analyse de type inclus dans le paquet Ruby. Actuellement, TypeProf sert en quelque sorte d'inférence de type. Il lit le code Ruby simple (non annoté), analyse les méthodes définies et leur utilisation, et génère un prototype de signature de type au format RBS. Il est possible de lancer TypeProf en enregistrant l'entrée sous "test.rb" et en invoquant une commande appelée "typeprof test.rb".

    Voici ci-dessous une démo de TypeProf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # test.rb
    class User
      def initialize(name:, age:)
        @name, @age = name, age
      end
      attr_reader :name, :age
    end
    User.new(name: "John", age: 20)
    En sortie, on a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ typeprof test.rb
    # Classes
    class User
      attr_reader name : String
      attr_reader age : Integer
      def initialize : (name: String, age: Integer) -> [String, Integer]
    end
    L'équipe de développement avertit néanmoins que TypeProf est expérimental et n'est pas encore aussi mature ; seul un sous-ensemble du langage Ruby est supporté, et la détection des erreurs de frappe est limitée. Mais il continue à se développer rapidement pour améliorer la couverture des fonctionnalités du langage, les performances d'analyse et la convivialité.

    Une autre nouvelle fonctionnalité expérimentale est le Ractor. 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 RC1 introduit le "Planificateur de fibres ( Fiber Scheduler en Anglais )". Cela permet une concurrence légère sans modifier le code existant. Voici les Classes/méthodes actuellement prises en charge :

    • Mutex#lock, Mutex#unlock, Mutex#sleep
    • ConditionVariable#wait
    • Queue#pop, SizedQueue#push
    • Thread#join
    • Kernel#sleep
    • Process.wait
    • IO#wait, IO#read, IO#write and related methods (e.g. #wait_readable, #gets, #puts and so on).
    • IO#select n'est pas supporté.


    Parmi les autres nouvelles fonctionnalités notables, on note que la correspondance de motifs sur une ligne est repensée (expérimental). => est ajouté. Il peut être utilisé comme une affectation à droite. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    0 => a
      p a #=> 0
     
      {b: 0, c: 1} => {b:}
      p b #=> 0
    in est changé pour retourner true ou false. Le motif de recherche est ajouté (expérimental). Une définition de méthode sans fin est ajoutée. Hash#except est maintenant intégré. La vue mémoire est ajoutée en tant que fonctionnalité expérimentale. Il s'agit d'un nouvel ensemble C-API pour échanger une zone de mémoire brute, telle qu'un tableau numérique et une image bitmap, entre des bibliothèques d'extension. Les bibliothèques d'extensions peuvent également partager les métadonnées de la zone mémoire qui se compose de la forme, du format d'élément, etc. En utilisant ces types de métadonnées, les bibliothèques d'extensions peuvent partager même un tableau multidimensionnel de manière appropriée. Cette fonctionnalité est conçue en faisant référence au protocole de tampon de Python.

    En ce qui concerne les améliorations des performances, de nombreuses améliorations ont été mises en œuvre dans MJIT. Le collage de code long sur IRB est 53 fois plus rapide que celui fourni avec Ruby 2.7.0. Par exemple, le temps requis pour coller l'exemple de code ci-dessous passe de 11,7 secondes à 0,22 seconde, selon l'équipe de développement du langage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    start = Time.now
     
    def each_top_level_statement
      initialize_input
      catch(:TERM_INPUT) do
        loop do
          begin
            prompt
            unless l = lex
              throw :TERM_INPUT if @line == ''
            else
              @line_no += l.count("\n")
              next if l == "\n"
              @line.concat l
              if @code_block_open or @ltype or @continue or @indent > 0
                next
              end
            end
            if @line != "\n"
              @line.force_encoding(@io.encoding)
              yield @line, @exp_line_no
            end
            break if @io.eof?
            @line = ''
            @exp_line_no = @line_no
     
            @indent = 0
          rescue TerminateLineInput
            initialize_input
            prompt
          end
        end
      end
    end
     
    puts "Duration: #{Time.now - start} seconds"
    # end
    Source : Ruby 3.0.0 RC1

    Et vous ?

    Que pensez-vous des nouveautés dans cette version ?

    Voir aussi

    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
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Membre extrêmement actif
    Avatar de Madmac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 685
    Points : 1 376
    Points
    1 376
    Billets dans le blog
    7
    Par défaut
    Un gain de performance est toujours agréable. Mais j'ai découvert que RBS est avant-tout un outil de développement et qu'il n'introduit pas de vérification de type additionnel pendant l'exécution du programme. Contrairement à ce que je craignais. Cela va ralentir seulement la compilation.

  3. #3
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    Juin 2016
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Dirigeant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 3 160
    Points : 66 259
    Points
    66 259
    Par défaut Ruby 3.0.0 est disponible, cette version majeure est annoncée comme étant 3 fois plus rapide que Ruby 2
    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 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.

    Nom : z1.png
Affichages : 22319
Taille : 36,9 Ko

    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 - Visualiser dans une fenêtre à part
    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
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/12/2020, 12h27
  2. Réponses: 11
    Dernier message: 22/02/2017, 13h42
  3. La première « release candidate » de Ogre 1.9 est disponible !
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 23/04/2013, 19h28
  4. Réponses: 60
    Dernier message: 03/03/2013, 02h31
  5. Réponses: 0
    Dernier message: 18/08/2010, 20h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo