Sortie de Ruby 3.0 Preview 1

Par:
fredericmazue

lun, 28/09/2020 - 18:51

Le projet Ruby vient d'annoncer la première préversion de Ruby 3.0. Une version qui se fait remarquer par la description des types via RBS et par des fonctionnalités de programmation parallèle.

RBS est un langage pour décrire les types de programmes Ruby. Les vérificateurs de type, y compris le profileur de type et d'autres outils prenant en charge RBS, comprendront beaucoup mieux les programmes Ruby avec les définitions RBS, selon l'équipe Ruby..

RBS décrit la définition des classes et des modules: méthodes définies dans la classe, variables d'instance et leurs types, et relations d'héritage / mix-in. L'objectif de RBS est de prendre en charge les modèles couramment observés dans les programmes Ruby.  Il permet d'écrire des types avancés, notamment des types d'union, une surcharge de méthode et des génériques.

Voici un exemple d'utilisation de RBS donné sur ruby-land.org

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

Vient également Ractor, qui est au stade expérimental pour le moment. Ractor est une abstraction de programmation concurrente conçue pour fournir une fonctionnalité d'exécution parallèle sans problèmes de sécurité des threads. Sécurité des threads signifie que ceux-ci ne peuvent pas partager des objets classiques. Le travail se fait avec des objets Ractor qui communiquent entre eux via un mécanisme de messages.

Vient encore Scheduler, également au stade expérimental. Scheduler est présenté comme pouvant intercepter les opérations bloquantes, ce qui permet d'obtenir une concurrence légère sans modification du code existant. Les classes et méthodes actuellement supportées par Scheduleur sont :

  • Mutex#lock, Mutex#unlock, Mutex#sleep
  • ConditionVariable#wait
  • Queue#pop, SizedQueue#push
  • Thread#join
  • Kernel#sleep
  • IO#wait, IO#read, IO#write et les méthodes relatives telles #wait_readable, #gets, #puts and so on).

A remarquer : IO#select n'est pas supporté.

Les responsables de Ruby soulignent que ces nouvelles fonctionnalités expérimentales sont susceptibles d'être modifiées dans la prochaine mouture du langage.

Site : ruby-lang.org