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 !

Wren, un petit langage de script concurrent rapide basé sur des classes est en cours de conception,
Il souhaite faire de l'ombre aux autres langages de script par sa concision et ses performances

Le , par Olivier Famien

47PARTAGES

5  0 
Les langages de script, on en a à foison. PowerShell, JavaScript, Bash, AppleScript, Python, Ruby, Lua pour ne citer que ceux-là sont autant de langages de script qui sont disponibles et répondent à des besoins spécifiques. À cette pléthore de langages vient s’ajouter un nouveau langage de script nommé Wren. Il est encore à la version 0.4 et donc en cours de conception. Mais apportera-t-il quelque chose de nouveau dans le paysage surchargé des langages de script ?

Selon la description faite par les développeurs du langage, Wren est un petit langage de script concurrent rapide basé sur des classes. Il s’apparente à Smaltalk dans un package de Lua avec un soupçon d’Erlang et enveloppé dans une syntaxe moderne et familière, peut-on lire sur la page officielle du langage. Bien évidemment, chaque équipe de développement d’un langage peut aligner tous les superlatifs qui lui vient à l’esprit pour qualifier son langage. Aussi pour mieux comprendre les caractéristiques mis en avant par les développeurs, ces derniers donnent les détails suivants :

  • Wren est petit, car l’implémentation de la machine virtuelle est inférieure à 4 000 points-virgules. Vous pouvez parcourir le tout en un après-midi. C’est petit, mais pas dense. C’est lisible et commenté avec amour ;
  • Wren est rapide, car avec un compilateur rapide en un seul passage pour un bytecode réduit et une représentation d’objet compacte, Wren peut rivaliser avec d’autres langages dynamiques ;
  • Wren est basé sur des classes : il existe de nombreux langages de script, mais beaucoup ont des modèles d’objets inhabituels ou inexistants. Wren place les classes au premier plan et au centre ;
  • Wren est concurrent : les fibres légères sont au cœur du modèle d’exécution et vous permettent d’organiser votre programme en un ensemble de coroutines communicantes.
  • Wren est un langage de script : il est destiné à être intégré dans des applications. Il n’a aucune dépendance, une petite bibliothèque standard et une API C facile à utiliser. Il se compile proprement en C99, C++98 ou quoi que ce soit de plus récent.


Ci dessous, un aperçu du code Wren :

Code Wren : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
System.print("Hello, world!") 
  
class Wren { 
  flyTo(city) { 
    System.print("Flying to %(city)") 
  } 
} 
  
var adjectives = Fiber.new { 
  ["small", "clean", "fast"].each {|word| Fiber.yield(word) } 
} 
  
while (!adjectives.isDone) System.print(adjectives.call())

Un premier parcours du code montre un code moins verbeux que d’autres langages de script. Toutefois, est-ce un argument de poids pour pousser les développeurs à se ruer vers lui ? Bien évidemment, non. Pour convaincre les programmeurs qui majoritairement sont réticents à apprendre de nouveaux langages, Bob Nystrom, le développeur à l’origine de Wren, ayant également développé Magpie et Finch, et travaillant actuellement sur Dart, explique que Wren a été créé sur les bases de Lua. SI vous aimez Lua et la programmation orientée objet, vous aimerez certainement Wren. En guise d’exemple, Nystrom présente ces deux bouts de code en appliquant le modèle de la programmation orientée objet.

En Lua, ça donne ceci :

Code Lua : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- account.lua 
  
Account = {} 
Account.__index = Account 
  
function Account.create(balance) 
   local acnt = {}             -- our new object 
   setmetatable(acnt,Account)  -- make Account handle lookup 
   acnt.balance = balance      -- initialize our object 
   return acnt 
end 
  
function Account:withdraw(amount) 
   self.balance = self.balance - amount 
end 
  
-- create and use an Account 
account = Account.create(1000) 
account:withdraw(100)

En Wren, le même code donne cela :

Code Wren : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
//account.wren 
 
class Account { 
  construct new(balance) { _balance = balance } 
  withdraw(amount) { _balance = _balance - amount } 
} 
 
// create and use an Account 
var account = Account.new(1000) 
account.withdraw(100)

Il explique que les classes ont la réputation d’être complexes, car la plupart des langages largement utilisés avec elles sont assez complexes : C++, Java, C#, Ruby et Python. Avec Wren, il espère montrer que ce sont ces langages qui sont complexes, et non les classes elles-mêmes. Il ajoute que Smalltalk, le langage qui a inspiré la plupart de ces langages, est célèbre pour sa simplicité. Sa syntaxe tient sur une fiche. Son objectif est donc de garder Wren aussi minimal tout en conservant le pouvoir expressif des classes.

En plus d’être concis, Wren se veut également performant. Après avoir exécuté un code à dix reprises avec plusieurs langages sur un MacBook pro 2,3 GHz Intel Core i7 doté de 16 Go de RAM DDR3 à 1 600 MHz et conservé le meilleur temps, Nystrom rapporte les résultats suivants :


Les barres plus courtes traduisent les meilleures performances

Dans la plupart des tests, Wren a la meilleure performance. Selon Nystrom, cela est dû aux décisions de conception qui ont été prises comme le fait que les classes sont définies de manière relativement statique, mais aussi l’implémentation du concept de signature de méthodes, du compilateur en une seule passe et l’usage par l’interpréteur de bytecode des boucles Goto calculés.

Toutefois, Wren n’a pas que de bons côtés. L’utilisateur Xscott fait remarquer que Wren semble assez élégant, mais il fait la même erreur que beaucoup de langages quand il s’agit de surcharger les opérateurs. Si vous mettez l’opérateur binaire comme méthode sur le premier objet, il n’y a pas de moyen simple d’avoir « builtin_object <operator> your_object ». De même, Wren ne fournit pas de nombres complexes, aussi vous n’obtiendrez donc pas une belle syntaxe pour « 1/z » ou quelque chose de ce genre. Et c’est le cas pour la multiplication scalaire avec les vecteurs, les matrices ou les tableaux de style Numpy, etc. Python et d’autres langages ont des solutions de rechange pour contourner ce problème, mais pas Wren. Pour ce dernier, les opérateurs binaires devraient être des fonctions à 2 arguments, pas des méthodes sur l’objet de gauche.

Mais pour l’équipe de Wren, ces reproches ne sont pas des erreurs, mais juste un compromis délibéré, Wren étant fondamentalement conçu pour être un langage très petit, simple, mais flexible. Elle souligne que la distribution unique fonctionne très bien comme pour 90 % des types d’opérations que vous souhaitez effectuer dans les programmes. Il lit très bien syntaxiquement et évite d’avoir à espacer chaque fonction avec son type d’argument comme vous le voyez en C et Scheme (hash-remove !, dict-remove !, set-remove !, etc.). Et il le fait sans avoir besoin de types ou de résolution statique. De plus, il est simple de compiler quelque chose d’assez efficace à l’exécution en utilisant une structure de type vtable. Concernant les opérateurs binaires, ça craint. Mais trouver une meilleure solution pour cela nécessite une solution trop élaborée. Les types statiques et les méthodes multiples représentent un énorme saut de complexité. L’approche de Python est vraiment lente. Pour Wren, un choix a été fait afin de le rendre petit et expressif, ce qui signifie que les opérateurs ne sont pas symétriques et c’est plutôt bien, conclut le mainteneur.

Wren est actuellement en version 0.4, ce qui signifie qu’il va falloir attendre un bout de temps avant de l’utiliser en production.

Source : Wren

Et vous ?

Que pensez-vous de Wren ?

Pourra-t-il s’imposer dans le monde des langages de script s’il parvient à atteindre sa première version stable ?

Selon vous, quels sont ses avantages et ses inconvénients ?

À votre avis, qu’est-ce que Wren devrait intégrer comme atouts pour pouvoir s’imposer dans le monde des langages de script ?

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

Avatar de JihemL
Nouveau Candidat au Club https://www.developpez.com
Le 03/09/2022 à 7:41
Je connais Wren depuis un peu plus d'un an. Je suis tombé dessus suite à des recherches personnelles sur les VM et la création d'interpréteur et/ou compilateurs pour des langages de la famille du Smalltalk (comme squeak, Pharo, etc.).

En fait, Wren est le successeur d'un démonstrateur, un langage jouet un peu évolué pour illustrer le cours et le livre écrits par Nystrom : http://www.craftinginterpreters.com/, un site remarquablement bien fait au demeurant, qui vous apprendra beaucoup de choses sur la création d'une VM, et d'un interpréteur de langage : le Lox.

De là à le présenter comme un langage sérieux ... c'est s'avancer un peu : on voit fleurir tellement de langages qui promettaient beaucoup au début et qui sont ensuite rapidement tombés dans l'oubli du fait d'une syntaxe rendant le code complexe à comprendre et à maintenir, ou parce qu'ils ne répondent pas à certains besoins primordiaux (gestion et manipulation des fichiers et de leur contenu, communiquer facilement avec des programmes externes via TCP/IP, etc.) ! Alors Wren propose bien un interfaçage avec le C, mais pour l'instant il y a tout un travail d'encapsulation des fonctions utiles, de création de librairies wren qui reste à faire. C'est un gros chantier
0  0