Slide 1

Slide 1 text

Dart One language to rule them all … Sébastien Deleuze - @sdeleuze

Slide 2

Slide 2 text

Worldline   Lyon   ! Architecte logiciel (qui code)   Innovation Labs   ! Projets Open Sources Sébastien Deleuze

Slide 3

Slide 3 text

Un langage structuré et flexible pour les développements Web (mais pas que)   ! Destiné aux navigateurs modernes   ! Pour améliorer la
 maintenabilité et l’efficacité de nos développements Dart, c’est quoi exactement ?

Slide 4

Slide 4 text

Une plateforme Open Source Langage Outillage Machine
 virtuelle Documentation API Framework
 web Compilateur
 Dart / Javascript Dépôt de paquets

Slide 5

Slide 5 text

Comparaison = Orienté Objet = Facile à apprendre = Performance de la JVM != Dette technologique = Les fonctions sont «first class citizens» = API asynchrone != Dart est fourni «battery-included» Modèle de thread Gestion de la concurence

Slide 6

Slide 6 text

Environnements d’exécution Chrome (VM Dart) Autres navigateurs
 (dart2js + VM Javascript)

Slide 7

Slide 7 text

Environnements d’exécution Chrome (VM Dart) Serveur Autres navigateurs
 (VM Javascript) Android PaaS ? ?

Slide 8

Slide 8 text

Langage Orienté objet, typage optionnel et interpolation de chaines import 'dart:math';
 ! class Point {   num x, y;   ! Point(this.x, this.y);   ! num distanceTo(Point other) {   var dx = x - other.x;   var dy = y - other.y;   return sqrt(dx * dx + dy * dy);   }   }   ! main() {   var a = new Point(2, 3);   var b = new Point(3, 4);   print('distance from a to b = ${a.distanceTo(b)}');   }

Slide 9

Slide 9 text

Langage Interfaces implicites class Person {   final _name;   Person(this._name);   String greet(who) => 'Hello, $who. I am $_name.';   }   ! class Bro implements Person {   String greet(who) => 'Hi $who. What’s up?';   }

Slide 10

Slide 10 text

Langage Fonctions // Display 0 2 4 6 in the console main() {
 [0, 1, 2, 3, 4, 5, 6].where((n) => n.isEven).forEach(print);
 } // Display 0 2 4 6 in the console main() { var array = [0, 1, 2, 3, 4, 5, 6]; for(var n in array) { if(n.isEven) { print(n); }
 } } Version longue Version courte

Slide 11

Slide 11 text

Langage Paramètres optionnels et valeurs par défaut String say(String from, String msg, [String channel='email']) {   // ...   }   ! main() {   say('Bob', 'Howdy');   say('Bob', 'Howdy', 'smoke signal');   } enableFlags({bool bold: false, bool hidden: false}) {   // ...   }   ! main() {   enableFlags();   enableFlags(bold: true);   enableFlags(bold: true, hidden: false);   } Paramètres nommés et valeurs par défaut

Slide 12

Slide 12 text

Un langage facile à apprendre I am watching you !

Slide 13

Slide 13 text

Langage Mais aussi - Constructeurs nommés - Mixins - Modèle de thread léger proche d’Erlang - Métadatas - Generics - Reflection

Slide 14

Slide 14 text

API dart:html import 'dart:html';   ! main() {   ! var message = query('#msg');   ! var b = new ButtonElement()   ..classes.add('important')   ..text = 'Bro Code'   ..onClick.listen((e) => message.text = '''A bro does not dare/challenge another bro to do anything they wouldn’t try them self''');   ! document.body.children.add(b);   ! }

Slide 15

Slide 15 text

API dart:io import 'dart:io';   ! main() {   HttpServer.bind('127.0.0.1', 8080).then((server) {   server.listen((HttpRequest request) {   request.response   ..write('A bro cannot give another bro a Teddy bear')   ..close();   });   print('web server started !');   });   }

Slide 16

Slide 16 text

Web components

Slide 17

Slide 17 text

Polymer.dart

Slide 18

Slide 18 text

Performance 0 175 350 525 700 Temps  de  chargement  d'un  programme  de  55000  lignes  (ms) Sans  snapshot Avec  snapshot Démarrage

Slide 19

Slide 19 text

Performance 0 50 100 150 200 250 DeltaBlue Richards Tracer Javascript dart2js Dart  VM Java Exécution

Slide 20

Slide 20 text

Performance Single instruction, multiple data (SIMD) 1.0 5.0 6.0 2.0 10.0 12.0 3.0 12.0 15.0 4.0 20.0 24.0 + = var a = new Float32x4(1.0, 2.0, 3.0, 4.0);
 var b = new Float32x4(5.0, 10.0, 15.0, 20.0);
 var c = a + b;

Slide 21

Slide 21 text

Performance Taille javascript généré 0 45 90 135 180 Taille  de  l'applicaJon  Todo  (Ko) AngularJS Dart AngularJS  +  jQuery

Slide 22

Slide 22 text

Outillage IDE : Dart Editor

Slide 23

Slide 23 text

Outillage IDE : pas obligé d’utiliser Eclipse Spark Support de Dart dans Idea Intellij
 et WebStorm

Slide 24

Slide 24 text

Outillage pub name: myproject
 version: 1.1.0   description: Sample application   author: Sébastien Deleuze   homepage: http://jyuro.org   documentation: http://jyuro.org/doc   dependencies:   route: 0.4.5
 mustache : '>=0.1.5'
 mylib:   git: git://github.com/jyuro/mylib.git   dev_dependencies:   unittest: any

Slide 25

Slide 25 text

Outillage pub.dartlang.org

Slide 26

Slide 26 text

Demos • Projet Dart « Fullstack»   • Three.dart

Slide 27

Slide 27 text

Conclusion Sébastien Deleuze - @sdeleuze Quelques liens :   - http://news.dartlang.org   - http://gplus.to/dartlangfr - http://try.dartlang.org/ - https://github.com/sdeleuze/polymer-dart-blog Dart 1.0 est sorti, testez-le ...