EA2013 Dart

Présentation

 * Enseignants : Georges-Pierre Bonneau, Didier Donsez (EA2013)
 * Auteur : Nicolas Husson 
 * Sujet : Dart

Résumé
Dart est un langage structuré pour le web. Créé en 2011 par Google il a pour but premier de combler les lacunes du javascript. En effet selon Google ces dernières ne peuvent être palliées en améliorant le langage javascript. Comparé à javascript, Dart possède les avantages d'avoir un IDE complet (auto-complétion, debugger, génération de documentation...) ce qui permet d'améliorer la création/maintenance d'applications web complexes. Ce langage étant compilé, les performances sont meilleures que le javascript. De plus, ce dernier ressemble au C#, Java et Javascript en intégrant la possibilité de créer des interfaces et des classes. Ceci possède un double avantage, le premier est une meilleure adoption de la part de la communauté des développeurs, le second est une meilleure structuration du code en général.

Mots clés
Dart, Langage, Web, Google, Javascript

Abstract
Dart is a structured language for the web. Established in 2011 by Google it is primarily aimed at filling gaps in javascript. In fact according to Google the latter can not be remedied by improving the JavaScript language. Compared javascript, Dart has the advantages of having a complete IDE (auto-completion, debugger, documentation generation ...) which improves the creation / complex web applications maintenance. This language is compiled, the performance is better than the javascript. In addition, it looks like C #, Java and Javascript integrating the ability to create interfaces and classes. This has two advantages, the first is a better adoption from the developer community, the second is a better structuring of the code in general.

Keywords
Dart, Language, Web, Google, Javascript

Contexte
De nos jours le développement web permet de réaliser de petites applications de façon relativement simple, qui fonctionnent partout, et qui possède également l’avantage d’être adapter au développement incrémental. Les points négatifs du développement web apparaissent lors de la réalisation d’applications plus “importantes”. En effet, dans ce cas là, la structure devient plus complexe, ce qui implique une perte de productivité du point de vue développeur. De plus, la non présence d’un vrai IDE nuit également à cette productivité.

Dart
Google inventa Dart pour pallier à ces lacunes, mais aussi afin d’offrir de meilleurs performances que le javascript et une meilleure sécurité. “Les objectifs sont de créer un langage structuré mais flexible, familier et naturel donc facile à apprendre pour les programmeurs, délivrant des performances élevés sur tous les navigateurs et les plate-formes modernes, depuis les périphériques mobiles jusqu’aux serveurs d’exécution.” Lars Bark, un des créateurs de Dart. Cette citation de Lars Bark s’appuie sur le fait que Dart : utilise des classes et interfaces (langage structuré) typage statique optionnel (flexible) syntaxe inspiré de Java, C# et Javascript (familier et naturel) langage compilé (performance élevé) compilateur convertissant du dart en javascript (multi-navigateurs)

Ecosystème


Dart possède un IDE darteEditor (basé sur eclipse) disponible sur toutes les plateformes (mac, linux, windows). Le langage Dart peut être utilisé de deux façons différentes: Un gestionnaire de dépendance est également présent (Pub Package Manager). Un générateur de document dartdoc qui tends à ressembler à la documentation générer par java. Un SDK côté serveur permettant de créer une application en dart côté serveur.
 * via la machine virtuelle Dartium client qui permet d’exécuter des fichiers .dart et ainsi pouvoir profiter des performances de dart.
 * via le compilateur dart2js qui permet de porter ses applications sur tous les navigateurs

Performances


En bleu la courbe de performance de dart, en marron javascript et en violet le compilateur dart2js. Ce graphique est le résultat du benchmak Tracer qui test les performances en se basant sur le modèle d’émulation de classes. Les sources de ce benchmark sont disponible ici

Comme on peut le constater dart possède de meilleurs performances que le compilateur dart2js mais également que du javascript (testé avec le moteur v8 de Chrome). Le plus étonnant est le résultat obtenu avec le compilateur. En effet, d’après ce benchmark ce dernier offre de meilleur résultat que le javascript lui même.

Différences/Points communs Javascript Dart
Ce tableau montre les différences et ou points communs des deux langages. Dans le cas où le compilateur dart2js est utilisé, les isolates de Dart seront convertis en Web Workers en javascript, le typage des variables deviendra dynamique pour celles statiques...

Monoprocesseur


Dart est monoprocesseur à l'instar de javascript. Un modèle de concurrence est présent et est appelé isolates. Ce modèle permet une exécution parallèle. La différence entre les threads et les isolates réside par le fait qu'il n'y a pas de mémoire partagée et la communication s'effectue par le biais de messages. L'usage de ce modèle permet de simplifier le développement d'applications parallèles.

angularDart
Le célèbre framework open-source de Google AngularJS qui a pour but de simplifier la syntaxe javascript et de combler les faiblesses de ce dernier en ajoutant des fonctionnalités possède son équivalent pour dart, AngularDart. AngularDart n'est pas un wrapper appelant du javascript mais bel et bien un framework écrit en Dart.

Exemples
Il est possible de tester Google Dart directement sur le web ici. Il est également possible de télécharger l'IDE ici.

Exemples : main { print('Hello World!'); } // Import the math library to get access to the sqrt function. import 'dart:math' as math; // Create a class for Point. class Point { // Final variables cannot be changed once they are assigned. // Create two instance variables. final num x, y;   // A constructor, with syntactic sugar for setting instance variables. Point(this.x, this.y); // A named constructor with an initializer list. Point.origin : x = 0, y = 0; // A method. num distanceTo(Point other) { var dx = x - other.x;       var dy = y - other.y;        return math.sqrt(dx * dx + dy * dy); } } // All Dart programs start with main. main { // Instantiate point objects. var p1 = new Point(10, 10); var p2 = new Point.origin; var distance = p1.distanceTo(p2); print(distance); }
 * Hello world :
 * Une simple classe :

Conclusion
Lancé en 2011, le langage Dart a obtenu un accueil mitigé de la part de la communauté des développeurs. Pour ces-derniers le web reste du HTML/JS et Dart n'apporte rien de révolutionnaire. De plus, en créant Dart, Google participe de façon moins importante à la dernière version ECMAscript (Harmony) qui a pour but d'améliorer et standardiser le langage javascript. Un autre frein à l'adoption de Dart par la communauté est le fait que sa machine virtuelle (qui permet de délivrer de bonnes performances) n'est supporté que par Chrome. En effet la VM de Dart à, apparemment, peu de chances d'être disponible sur Firefox et encore moins sur IE et Safari. Avec ces performances Dart pourrait être utilisé pour faire migrer des jeux gourmands en ressources en application web. Une autre possibilité, serait l'usage de ce langage et Phonegap pour la création d'application mobile cross-platform. En effet, les applications mobiles complexes réalisé à l'aide du framework Phonegap ne sont pas assez performante, Dart pourrait résoudre ce problème.

NodeJs vs Dart?
La communauté de NodeJs semble peu intéressé par Dart comme le montre cette citation tiré du google groups thread NodeJs "We have better things to do then waste time looking at dart. Maybe google should put those resources back onto V8 rather then writing yet another mediocre language that doesn't solve any problems" (nous avons de meilleurs choses à faire plutôt que perdre notre temps à s'occuper de Dart. Peut-être que Google devrait passer plus de temps sur le moteur V8 au lieu d'écrire encore un autre langage médiocre qui ne résout aucun problème)

Que peut apporter Dart au framework cross-plateform web?
Dart permettrait d'apporter aux frameworks cross-plateforme mobile de meilleurs performances, permettant de résoudre le problème des applications mobiles trop "gourmandes" qui doivent être réaliser en code natif. Au moment où j'écris ces lignes, un nouveau framework cross-plateform web utilisant Dart a été réalisé Rikulo.

Liens Utiles
Try dart Visualier l'évolution des performances de dart Exemples de codes Dart Accès à l'IDE Dart Rikulo le framework cross-plateforme web open source Dart

Références
http://www.blog-nouvelles-technologies.fr/archives/10438/lavenir-du-javascript-jetez-y-un-oeil-des-aujourdhui/ https://gist.github.com/paulmillr/1208618 http://www.zdnet.fr/actualites/mais-que-nous-prepare-donc-google-avec-dart-39764845.html http://www.infoworld.com/d/application-development/first-look-google-dart-vs-javascript-179852 http://linuxfr.org/news/dart-va%E2%80%90t%E2%80%90il-remplacer-javascript-comme-langage-dans-les-navigateurs https://www.dartlang.org/ http://openweb.eu.org/articles/introduction_ecmascript http://blog.mistra.fr/dart-le-javascript-killer-made-in-google http://www.blog-nouvelles-technologies.fr/archives/38656/google-lance-la-version-2-0-de-son-outil-de-benchmark-javascript-nomme-octane/ http://news.cnet.com/8301-1023_3-57584979-93/google-dart-will-rescue-browsers-from-javascript/ http://soat.developpez.com/tutoriels/dart/langage-web-feedback-devoxx-france2013/ http://www.antoine-guillemaille.fr/document/dart/avenir.html http://www-igm.univ-mlv.fr/~dr/XPOSE2012/dart/types.html http://synonym.dartlang.org/