Ce week end se tenait à Paris la cinquième édition de Open World Forum (Le premier forum Open Source en Europe). Comme son nom l’indique c’est un forum mondial sur les solutions Open Source, tant sur le niveau technologique, sociétal qu’économique. Les présentations du forum s’articulaient autour de trois volets :
- Think qui se concentrait sur des réflexions tels que l’Open Data, le Cloud Computing, la Neutralité sur le net, l’internet des objets…
- Code qui traitait du développement logiciel et des plateformes Open Source logicielles (Java, Javascript, Python, Android, Dart , PHP …)
- Experiment qui était dédié à l’expérimentation de logiciels et de matériels.
Le volet Code, étalé sur les trois jours, était découpé en plusieurs sessions regroupées par thèmes :
- Cloud computing : Google App Engine
- Big Data : Hadoop , Talend, Websemantique
- Mobililé : Android
- Web : JavaScript, AngularJ, PHP, HTML 5, Dart
- Java …
L’accueil a été chaleureux. A l’entrée on trouve des revues informatiques offertes par les sponsors (Linux Mag, Programmez, L’Informatique…). Du matériel a été mobilisé pour l’évènement, mon badge a été imprimé sur place juste à mon arrivée. On peut noter également la présence de la ministre délégué de l’économie numérique. Les contenus des sessions étaient riches et variées. Il y a toutefois des corrections à apporter au niveau de la communication. C’est une fois dans la salle qu’on a les détails d’une session, au moment où c’est trop tard de changer pour aller voir une autre plus « intéressante » (Je fais la comparaison avec Devoxx où il y avait plus de transparence à ce niveau). Des changements de salles étaient effectués à la dernière minute sans laisser de trace d’informations.
Session DART
Pour « Moi Développeur Normal » le JavaScript a tout d’un vrai générateur de frustrations. Pas d’IDE efficace, pas d’ Autocompletion, pas de Refactoring. La faiblesse du typage ouvre la porte à tous les effets de bord possibles. Les librairies utilisées pour rendre le langage moins difficile à pratiquer comme JQuery, Dojo ou nodeJS, sont incompatibles entre eux. Quand on en choisit un on est contraint de faire avec jusqu’au bout, au risque d’avoir de mauvaises surprises.
Pour pallier ces insuffisances dans un contexte de projets web complexes Google propose Dart. L’objectif est de rendre les projets web plus structurés avec des IDE plus évolués et un gain de performance à l’exécution par l’optimisation du code. Il peut être utilisé côté serveur comme côté client.
Dart c’est un nouveau langage (orienté objet), une machine virtuelle et des librairies. Il est créé par Google pour surfer sur les lacunes de JavaScript. L’annonce a fait beaucoup de bruits (voir là et/ou là), certaines rumeurs voudraient que ce soit le futur remplaçant de GWT. Google, à travers ses différents spkeakers, soutien que les deux outils continueront à être maintenus. DART devrait être vu comme une alternative de GWT qui est orienté Java.
Le code peut être compilé en JavaSript pour tourner dans tout navigateur compatible JavaScript ou interprété et exécuté directement par une machine virtuelle (souvent embarquée dans un navigateur, exemple Chromium).
Fonctionnement
Les outils :
- Editeurs : DartEditor, plugin eclipse
- Compilateurs : Dartium, dart2js
- Librairies : dart.core, dart.io, dart.math, dart.html, …
La syntaxe :
class Point {
int x, y;
Point(int x, int y){
this.x = x;
this.y = y;
}
public double distance() {
return sqrt(x*x + y*y);
}
}
main() {
Point point = new Point(2,3);
print(point.distance());
}
La syntaxe est inspirée de Java. Mais en plus on a…
… du sucre syntaxique
Point(this.x, this.y); // pour le constructeur
… un style fonctionnel
distance() => sqrt(x*x + y*y);
… un typage static optionnel
Tout comme le JavaScript le typage reste le maillon faible. Les types n’ont aucun impact sur la compilation ou l’exécution du code, il n y a aucune vérification. L’usage des types statics permet uniquement de faciliter l’écriture de code comme c’est écrit dans les specs “ Dart programs may be statically checked. The static checker will report some violations of the type rules, but such violations do not abort compilation or preclude execution.”
var x, y;
Point(var x, var y){
this.x = x;
this.y = y;
}
Multi threading avec Isolate
Dart est monothread. Pour exploiter le multi core Google introduit les Isolate, des composants qui communiquent par message à travers des ports logiques (ReceivePort, SendPort). Chaque Isolate a son propre espace mémoire qui est inaccessible aux autres Isolate.
Il n’y a pas encore de release, mais avec un langage aussi structuré, un éditeur moderne, une VM et une syntaxe familière on est tenté d’aller voir plus.