Imba, le nouveau langage se compilant en JavaScript est disponible
Avec un support natif pour les tags et une lisibilité du code compilé

Le , par Olivier Famien, Chroniqueur Actualités
Le grand succès de JavaScript pousse les développeurs à proposer sans cesse des améliorations à ce langage de scripts. Au rang des langages dérivés, nous avons CoffeScript, Dart, TypeScript, LiveScript, Caffeine pour ne citer que ceux-là.

À nouveau, un développeur norvégien du nom de Sindre Aaarsaether vient de mettre sur la toile un nouveau langage se compilant en JavaScript dénommé imba. Ce langage est le fruit de plus de six années de réflexions menées dans le but de faire tourner Ruby dans les navigateurs.

De ces recherches est née CoffeScript, un langage amélioré se compilant en JavaScript et offrant plus de lisibilité et de concision dans le code. Non satisfaits des résultats, les initiateurs du projet entreprennent des travaux en 2012 en créant un fork de CoffeScript. C’est cette fourche qui a donné naissance à imba, le nouveau langage se compilant en JavaScript.

Ce dernier dispose de fonctionnalités pour la définition, l’extension, le sous-classement, l’instanciation et le rendu des nœuds du DOM. Comme avantage mis en avant, il se trouve qu’imba dispose d’un support natif pour les tags et les sélecteurs. De même, le code compilé est très lisible et extrêmement performant. À titre d’exemple, on peut faire une comparaison entre le code écrit avec imba et celui qui a été compilé.

Code imba
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
var number = 42 
var opposite = true 
var string = "the answer is {number}" 
var regex = /answer is (\d+)/ 
 
# Functions: 
var square = do |x| x * x 
 
# Arrays: 
var list = [1, 2, 3, 4, 5] 
 
# Objects: 
var math = 
	square: square 
	cube: do |x| x * math.square(x) 
	rand: do Math.random 
 
# Array comprehensions: 
var cubes = (math.cube num for num in list) 
 
# Implicit calling: 
math.rand.toFixed 2
Code compilé en JavaScript
Code : Sélectionner tout
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
 
var number = 42 
var opposite = true 
var string = ("the answer” is number) 
var regex = /answer is (\d+)/; 
 
// Functions: 
var square = function(x) { return x * x; }; 
 
// Arrays: 
var list = [1, 2, 3, 4, 5]; 
 
// Objects: 
var math = { 
	square: square, 
	cube: function(x) { return x * math.square(x); }, 
	rand: function(x) { return Math.square(); } 
}; 
 
// Array comprehensions: 
For (var cubes = [], i=0 len=list.lenght; i < len; i++) { 
	cubes.push(math.cube(list[i])); 
}; 
 
// Implicit calling: 
math.rand().toFixed(2);
Comme on le constate, le code compilé reste très lisible. Aaarsaether avance que « un de nos principaux objectifs a toujours été de garder le code compilé aussi lisible que possible. Tous les indentations et commentaires devraient être préservés ». Et d’ajouter « nous voulons qu’il soit aussi aisé que possible de passer à Imba et y revenir ».

Pour ce qui est des performances de ce langage en matière de rendu des applications, Aaarsaether soutient que « pour une application semi-complexe comme TodoMVC, il est plus de 20 fois plus rapide que de React avec moins de code, et une bibliothèque beaucoup plus petite ».

Enfin, on peut également noter qu’avec ce langage tout est considéré comme une expression.

Toutefois, bien que la première version n’ait pas encore été libérée, vous pouvez déjà effectuer des tests et poster des commentaires sur GitHub en vue d’accélérer la sortie de la version stable.

Télécharger Imba (zip)

Source : Imba

Et vous ?

Que pensez-vous de ce nouveau langage ?

Allez-vous l’utiliser pour vos applications ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de octal octal - Membre éclairé https://www.developpez.com
le 28/08/2015 à 10:43
La seule vraie nouveauté est la "lisibilité" du code généré. Sinon, avec LLVM, il y avait déjà un backend qui générait du JavaScript. Du coups, tous les frontEnd LLVM (C, C++, ObjC, D, Modula2, ...) sont potentiellement capables d'être compilés en JavaScript. Il me semble d'ailleur que c'est comme cela que les google Labs avaient réussi à porter certains jeux DOS sous Chrome sans passer par un émulateur hardware.
Avatar de SylvainPV SylvainPV - Rédacteur/Modérateur https://www.developpez.com
le 28/08/2015 à 15:45
Basé sur l'indentation, et tout est interprété comme une expression multi-line Fuyez, pauvre fous !
Code imba : Sélectionner tout
1
2
3
4
5
6
var answer = if number == 42 
	'eureka' 
elif 43 > number > 41 
	'closeish' 
else 
	'fat chance'

Si l'objectif est de gagner en lisibilité, d'après moi il va dans la direction opposée. Enfin, c'est un sujet très subjectif... je me contenterai de le rajouter à la liste des centaines de langages compilant en JS qui n'ont jamais décollé.
Avatar de octal octal - Membre éclairé https://www.developpez.com
le 28/08/2015 à 17:10
Citation Envoyé par SylvainPV Voir le message
Basé sur l'indentation, et tout est interprété comme une expression multi-line Fuyez, pauvre fous !
...
Si l'objectif est de gagner en lisibilité, d'après moi il va dans la direction opposée. Enfin, c'est un sujet très subjectif... je me contenterai de le rajouter à la liste des centaines de langages compilant en JS qui n'ont jamais décollé.

Python est bien basé sur l'indentation, et les codes Python sont très lisibles (tout le monde écrit de la même manière).
Avatar de SylvainPV SylvainPV - Rédacteur/Modérateur https://www.developpez.com
le 28/08/2015 à 19:49
Le but de l'indentation étant justement de gagner en lisibilité, ce serait un peu contradictoire. Ma remarque sur la lisibilité ne concernait pas l'indentation mais les expressions multi-ligne.

Par rapport à l'indentation, je soutiens qu'il est essentiel d'avoir un code bien indenté, mais faire un langage où la quantité d'espaces blancs détermine la logique d'un code est une aberration selon moi. Je considère Python comme un excellent langage, et la règle du off-side cille un de ses gros défauts. On ne peut pas mélanger tabulations et espaces pour indenter, ce qui a amené les gens à indenter avec des espaces uniquement. Hérésie !
Avatar de nevada51 nevada51 - Membre du Club https://www.developpez.com
le 30/08/2015 à 18:22
De très bonnes idées, qui ont déjà été explorées, mais manque de typage statique, ça aurait pu être intéressant il y a 3-4 ans.
Avatar de marts marts - Membre averti https://www.developpez.com
le 31/08/2015 à 15:03
Le code compilé est bourré d'erreurs !

Code : Sélectionner tout
var string = ("the answer” is number)
Le guillemet qui ferme est mal positionné, et de plus ce n'est pas le même caractère que celui qui ouvre.

Code : Sélectionner tout
For (var cubes = [], i=0 len=list.lenght; i < len; i++) {
"for" sans majuscule serait mieux.
Il manque une virgule après "i=0".

Est-ce le compilateur ou juste le rédacteur de l'article qui n'est pas au point ?...
Avatar de SylvainPV SylvainPV - Rédacteur/Modérateur https://www.developpez.com
le 31/08/2015 à 17:36
D'après la source, c'est une erreur de retranscription dans l'article. Soyez indulgents, les outils de rédaction sont assez casse-pieds avec les guillemets.
Avatar de Gugelhupf Gugelhupf - Modérateur https://www.developpez.com
le 01/09/2015 à 10:09
Je suis allé à la source, le seul intérêt qu'il pourrait y avoir à Imba selon moi c'est la fusion du langage avec le DOM, pour le reste JS s'en sort très bien.
Contacter le responsable de la rubrique Accueil