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 !

La première préversion de Ruby 3.0.0 est disponible et apporte un nouveau planificateur et RBS,
Un langage permettant de décrire les types de programmes Ruby

Le , par Bill Fassinou

271PARTAGES

6  0 
L’équipe de développement de Ruby, le langage de programmation libre et open source qui met l'accent sur la simplicité et la productivité, a annoncé vendredi la sortie de Ruby 3.0.0-preview-1. Cette nouvelle version introduit de nouvelles fonctionnalités, dont RBS, un langage permettant de décrire les types de programmes Ruby ; Ractor, un modèle d'acteur conçu pour fournir une fonction d'exécution parallèle sans les problèmes de sécurité des threads ; et un nouveau planificateur. Voici ci-dessous les nouveautés clés de Ruby 3.0.0.

RBS

RBS est un langage permettant de décrire les types de programmes Ruby. Les vérificateurs de types, notamment le profileur de type et les autres outils prenant en charge RBS, vont désormais comprendre beaucoup mieux les programmes Ruby avec les définitions RBS. Ainsi, vous pouvez écrire la définition des classes et des modules : les méthodes de la classe, les variables d'instance ainsi que leurs types, et les relations héritage/mixte. L'objectif de RBS est de supporter les modèles les plus courants dans les programmes Ruby et il permet d'écrire des types avancés.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

Cela comprend notamment les types d'union, la surcharge des méthodes et les génériques. Il prend aussi en charge le duck typing avec des types d'interfaces. Ruby 3.0 est livré avec “rbs gem”, qui permet d'analyser et de traiter les définitions de types écrites en RBS.

Ractor (expérimentale)

Ractor est un modèle d’acteur comme l'abstraction simultanée conçu pour fournir une fonction d'exécution parallèle sans les problèmes de sécurité des threads. Vous pouvez créer plusieurs ractors et les exécuter en parallèle. Ractor permet de réaliser des programmes parallèles sans danger pour les threads, car ils ne peuvent pas partager des objets normaux. La communication entre les ractors est prise en charge par le passage de messages. Pour limiter le partage d'objets, Ractor introduit de nombreuses restrictions dans la syntaxe de Ruby.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
require 'prime'

# n.prime? with sent integers in r1, r2 run in parallel
r1, r2 = *(1..2).map do
  Ractor.new do
    n = Ractor.recv
    n.prime?
  end
end

# send parameters
r1.send 2**61 - 1
r2.send 2**61 + 15

# wait for the results of expr1, expr2
p r1.take #=> true
p r2.take #=> true

La spécification et l'implémentation ne sont pas encore matures et sont susceptibles d’être modifiées à l'avenir, donc la fonctionnalité est marquée comme "expérimentale". Quand vous créez un ractor, un avertissement est émis pour vous rappeler que la fonctionnalité est expérimentale.

Planificateur (expérimental)

L’équipe a introduit « Thread#scheduler » pour intercepter les opérations de blocage. Cela permet une concurrence légère sans modifier le code existant. Les classes/méthodes actuellement prises en charge :

  • 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 connexes, notamment #wait_readable, #gets, #puts, etc. ;
  • IO#select n'est pas pris en charge.

Le point d'entrée actuel pour la simultanéité est Fiber.schedule{...}, mais ceci est susceptible de changer d'ici la sortie de la version stable de Ruby 3.0. Pour le moment, il existe un planificateur de test disponible dans Async::Scheduler. Notez que cette fonctionnalité est aussi expérimentale. L’équipe a averti que le nom et la fonction changeront dans la prochaine version d'aperçu.

Autres nouveautés notables

  • une instruction d'affectation vers la droite est ajoutée ;
  • ajout de la définition de la méthode infinie ;
  • ajout d'un modèle de recherche ;
  • hash#excepté est maintenant intégré ;
  • ajout de la vue mémoire comme fonctionnalité expérimentale : c’est un nouvel ensemble d’API C permettant d'échanger une zone de mémoire brute, comme un tableau numérique et une image bitmap, entre des bibliothèques d'extension. Les bibliothèques d'extension peuvent également partager les métadonnées de la zone de mémoire qui se compose de la forme, du format de l'élément, etc. En utilisant ces types de métadonnées, les bibliothèques d'extension peuvent partager de manière appropriée même un tableau multidimensionnel. Cette fonctionnalité est conçue en se référant au protocole de tampon de Python.


Autres changements notables depuis Ruby 2.7

  • les arguments de mots-clés sont séparés des autres arguments ;
  • le code qui affiche un avertissement dans Ruby 2.7 ne fonctionne plus;
  • la transmission d'arguments prend désormais en charge les arguments de tête ;
  • la fonctionnalité de “$SAFE” a été complètement supprimée : il s'agit maintenant d'une variable globale normale ;
  • L'ordre de retour en arrière (backtrace) avait été inversé dans Ruby 2.5, mais il a été annulé. Maintenant, il se comporte comme dans Ruby 2.4 : un message d'erreur et le numéro de ligne où l'exception se produit sont imprimés en premier, et ses appelants sont imprimés plus tard ;
  • certaines bibliothèques standard ont été mises à jour, dont RubyGems, 3.2.0.rc.1, Bundler 2.2.0.rc.1, IRB 1.2.6, Reline 0.1.5 ;
  • les bibliothèques “net-telnet” et “xmlrpc” ne sont plus des gemmes regroupées. Vous devez installer les gemmes correspondantes pour utiliser ces fonctionnalités ;
  • etc.

Source : Ruby 3.0.0-preview-1

Et vous ?

Qu'en pensez-vous ?

Voir aussi

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

Ruby 2.6 est disponible en version stable, avec un nouveau compilateur JIT en mode expérimental et un nouveau module pour analyser du code Ruby

Le livre « Hello Ruby » ambitionne d'apprendre aux enfants les rudiments de la programmation. Que pensez-vous de cette initiative ?

PHP vs Ruby, une comparaison de deux langages phares du Web

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

Avatar de Madmac
Membre éprouvé https://www.developpez.com
Le 01/10/2020 à 5:11
L'article ne décrit pas bien RBS. La seule chose qui est typée sont les arguments de méthode. Et d'après ce que j'ai lu ce sera optionnel.

Comme vous pouvez voir dans l'exemple la déclaration de type des variables de classes n'est pas nécessaire.
0  0