SlideShare a Scribd company logo
Dart: a modern web language
       Nicolas Geoffray
           Google
Who am I?
Nicolas Geoffray, software engineer at Google


Projects

●   VVM - Highly dynamic runtime environment
●   VMKit - Framework for writing VMs
●   I-JVM - Better dependability in OSGi
●   Dart - Structured programming for the web
Motivation



     Improve web development
The web is already pretty awesome


● It is easy to develop small applications
  ○ Code runs everywhere (phones, desktops)
  ○ No installation of applications
  ○ Deployment is almost trivial
● JavaScript is very flexible and supports
  incremental development
The rise of JavaScript

                              Crankshaft




             Credit: http://iq12.com/blog/
Why is the web hard to program for?
●   Writing large well-performing applications is hard
●   Hard to reason about the program structure
●   Startup performance is often really bad
●   Difficult to document intent (lack of types)
●   No support for modules, packages, or libraries
Make it easier
● We want to improve the web platform
  ○ Better support for programming in the large
  ○ Faster application startup (especially on mobile)
  ○ More predictable and better runtime performance
  ○ JavaScript is a powerful tool but it has sharp edges
● Keep up the innovation momentum
  ○ The web is evolving at a fantastic pace!
  ○ The developer tools have to keep up
JavaScript is full of ... surprises
● Lots and lots of implicit type conversions
● Most operations produce weird results when
  passed wrong or uninitialized values instead
  of failing in a recognizable way




                 Keep on truckin'
No argument type checking
var   x = 499;
x +   null;
x +   [];
x +   undefined;
x -   {};
No argument type checking
var   x = 499;
x +   null; // => 499
x +   [];
x +   undefined;
x -   {};
No argument type checking
var   x = 499;
x +   null; // => 499
x +   []; // => "499"
x +   undefined;
x -   {};
No argument type checking
var   x = 499;
x +   null; // => 499
x +   []; // => "499"
x +   undefined; // => NaN
x -   {};
No argument type checking
var   x = 499;
x +   null; // => 499
x +   []; // => "499"
x +   undefined; // => NaN
x -   {}; // => NaN
No array bounds checking
var array = new Array(32);
...
array[32];
array[-1];
array[.1];
array[null];
array[array];
No array bounds checking
var array = new Array(32);
...
array[32]; // => undefined
array[-1]; // => undefined
array[.1]; // => undefined
array[null]; // => undefined
array[array]; // => undefined
No array bounds checking
var array = new Array(32);
...
array[32]; // => void 0
array[-1]; // => void 0
array[.1]; // => void 0
array[null]; // => void 0
array[array]; // => void 0
No spell checking?
var request = new XMLHttpRequest();
...
request.onreadystatechange = function() {
   if (request.readystate == 4) {
     console.log('Request done!');
   }
};
No spell checking?
var request = new XMLHttpRequest();
...
request.onreadystatechange = function() {
   if (request.readyState == 4) {
     console.log('Request done!');
   }
};
JavaScript has improved but ...
● JavaScript has fundamental issues at the
  language level that impact productivity
● Performance has improved but mostly for a
  pretty static subset of JavaScript
● It remains very time consuming to build and
  maintain large web apps
The story of Dart
● A few years ago Lars Bak and Kasper Lund prototyped
    Spot
    ○ A new simple programming language for the web
    ○ Based on their experiences from JavaScript/V8
●   Spot was the prelude for the Dart project
What is Dart?
●   Unsurprising object-oriented programming language
●   Class-based single inheritance with interfaces
●   Familiar syntax with proper lexical scoping
●   Single-threaded with isolate-based concurrency
●   Optional static types
And more!
Dart comes with a lot of developer tools:
● DartEditor: Eclipse based Dart editor
● Dartium: Chromium with embedded Dart VM
● dart2js: Dart-to-JavaScript compiler
● Libraries: io, crypto, i18n, ...
Deployment and execution
                                      Dart source
                                      Dart source




                                                          Dart virtual
                         Dart tools
                                                           machine

                                                    in browser or standalone


                                         Dart
                                       snapshot
        JavaScript

runs in all modern browsers
Let's see it in action
● Let's write simple applications with the
  Eclipse-based Dart Editor
Conventional type checking
● Tries to prove that your program obeys the type system
● Considers it a fatal error if no proof can be constructed
● In Dart, you are innocent until proven guilty...
        List<Apple> apples = tree.pickApples();
        printFruits(apples);

        void printFruits(List<Fruit> fruits) {
          for (Fruit each in fruits) print(each);
        }
Optional static types
●   Static types convey the intent of the programmer
●   Checkable documentation for code and interfaces
●   Avoids awkward variable naming or comment schemes
●   Type annotations have no effect on runtime semantics
Isolates
Isolates are lightweight units of execution:
● Run in their own address space like
   processes
● Nothing is shared - nothing needs
   synchronization
● All communication takes place via
   messaging passing
● Supports concurrent execution
Communication
● ReceivePorts:
  ○ enqueues incoming messages
  ○ can not leave their isolate
  ○ can be created on demand


● SendPorts:
  ○   created by a ReceivePort
  ○   dispatches messages to its ReceivePort
  ○   can be transferred (across Isolate boundaries)
  ○   Unforgeable, transferable capability
Dart virtual machine
● Dart has been designed for performance
  ○ Simplicity gives more performance headroom
  ○ Enforced structure leads to better predictability
  ○ Virtual machine performs better than V8 at launch
● Works embedded in browser or standalone
  ○ Experimental Dart-enabled build of Chromium
  ○ SDK includes preliminary server-side libraries

              $ dart hello.dart
Dart-to-JavaScript
● Compiler is implemented in Dart
  ○ Generates JavaScript that runs in modern browsers
  ○ SSA based optimizations
  ○ Uses tree shaking to cut down on code size

    $ dart2js --out=hello.js hello.dart
Flavour of generated JavaScript
class Point {
  var x, y;
  Point(this.x, this.y);
  toString() => "($x,$y)";
}


Isolate.$defineClass("Point", "Object", ["x", "y"], {
  toString$0: function() {
    return '(' + $.toString(this.x) + ',' +
                 $.toString(this.y) + ')';
  }
});
Performance
Open source
● Dart is available under a BSD license
● Developed in the open (code reviews, build bots, etc.)

Online resources

●   Primary site - http://www.dartlang.org/
●   Code - http://dart.googlecode.com/
●   Libraries - http://api.dartlang.org/
●   Specification - http://www.dartlang.org/docs/spec/
Summary
● Dart is an unsurprising, object-oriented
  language that is instantly familiar to most
● Dart allows you to write code that tools and
  programmers can reason about
● Dart applications runs in all modern
  browsers through translation to JavaScript
Dart allows rapid prototyping and
                                        structured development.
   Dart was designed with
   performance in mind.




                        Thank you!
                                                  Dart is open source and
                                                  instantly familiar to lots of
                                                  programmers.
Dart runs everywhere JavaScript does.

More Related Content

PPTX
Dart the Better JavaScript
PDF
Structured web programming
PPTX
Getting started with typescript
PDF
Getting Started with TypeScript
PPTX
Typescript 101 introduction
PDF
Ruxmon.2013-08.-.CodeBro!
PDF
TypeScript introduction to scalable javascript application
Dart the Better JavaScript
Structured web programming
Getting started with typescript
Getting Started with TypeScript
Typescript 101 introduction
Ruxmon.2013-08.-.CodeBro!
TypeScript introduction to scalable javascript application

What's hot (20)

PDF
Dart, Darrt, Darrrt
PPTX
TypeScript Modules
PDF
PPTX
AngularConf2015
PPTX
Type script - advanced usage and practices
PPTX
TypeScript: Basic Features and Compilation Guide
PDF
TypeScript Best Practices
PDF
Typescript: enjoying large scale browser development
PPTX
TypeScript 101
PDF
SFScon 2020 - Juri Strumpflohner - Beyond Basics - Scaling Development acros...
PPTX
Typescript in 30mins
PDF
Start dart
PPTX
Introduction about type script
PDF
Power Leveling your TypeScript
PPTX
TypeScript - Silver Bullet for the Full-stack Developers
PPTX
Typescript
PPTX
PDF
TypeScript: coding JavaScript without the pain
PPTX
Typescript ppt
PPTX
TypeScript Overview
Dart, Darrt, Darrrt
TypeScript Modules
AngularConf2015
Type script - advanced usage and practices
TypeScript: Basic Features and Compilation Guide
TypeScript Best Practices
Typescript: enjoying large scale browser development
TypeScript 101
SFScon 2020 - Juri Strumpflohner - Beyond Basics - Scaling Development acros...
Typescript in 30mins
Start dart
Introduction about type script
Power Leveling your TypeScript
TypeScript - Silver Bullet for the Full-stack Developers
Typescript
TypeScript: coding JavaScript without the pain
Typescript ppt
TypeScript Overview
Ad

Similar to OWF12/PAUG Conf Days Dart a new html5 technology, nicolas geoffray, software engineer at google (20)

PPTX
Dart programming language
PPTX
Dart, unicorns and rainbows
PDF
Dart By Example 1st Edition Davy Mitchell
PPTX
Dart structured web apps
PDF
Dart the better Javascript 2015
PDF
Dart By Example 1st Edition Davy Mitchell
PDF
Dart By Example 1st Edition Davy Mitchell 2024 scribd download
PPT
No JS and DartCon
PDF
Introduction to Dart
PPTX
Dart_Programming_language_and_Flutter_Framework.pptx
PPTX
330f15_AnsariJonesWilder_Dart.pptx
PPTX
Dart presentation
PDF
Dart
PPTX
Dart Programming.pptx
PPTX
Dartprogramming
PDF
Dart Programming Language - Singsys Blog
PPTX
Presentaion on Dart and Flutter Development.pptx
PDF
Introduction to Flutter - truly crossplatform, amazingly fast
PPTX
Dart London hackathon
Dart programming language
Dart, unicorns and rainbows
Dart By Example 1st Edition Davy Mitchell
Dart structured web apps
Dart the better Javascript 2015
Dart By Example 1st Edition Davy Mitchell
Dart By Example 1st Edition Davy Mitchell 2024 scribd download
No JS and DartCon
Introduction to Dart
Dart_Programming_language_and_Flutter_Framework.pptx
330f15_AnsariJonesWilder_Dart.pptx
Dart presentation
Dart
Dart Programming.pptx
Dartprogramming
Dart Programming Language - Singsys Blog
Presentaion on Dart and Flutter Development.pptx
Introduction to Flutter - truly crossplatform, amazingly fast
Dart London hackathon
Ad

More from Paris Open Source Summit (20)

PDF
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
PDF
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
PDF
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
PDF
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
PDF
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
PDF
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
PDF
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
PDF
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
PPTX
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
PDF
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
PDF
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
PDF
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
PDF
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
PDF
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
PDF
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
PDF
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
PDF
#OSSPARIS19 - Table ronde : souveraineté des données
PDF
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
PDF
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
PDF
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...

OWF12/PAUG Conf Days Dart a new html5 technology, nicolas geoffray, software engineer at google

  • 1. Dart: a modern web language Nicolas Geoffray Google
  • 2. Who am I? Nicolas Geoffray, software engineer at Google Projects ● VVM - Highly dynamic runtime environment ● VMKit - Framework for writing VMs ● I-JVM - Better dependability in OSGi ● Dart - Structured programming for the web
  • 3. Motivation Improve web development
  • 4. The web is already pretty awesome ● It is easy to develop small applications ○ Code runs everywhere (phones, desktops) ○ No installation of applications ○ Deployment is almost trivial ● JavaScript is very flexible and supports incremental development
  • 5. The rise of JavaScript Crankshaft Credit: http://iq12.com/blog/
  • 6. Why is the web hard to program for? ● Writing large well-performing applications is hard ● Hard to reason about the program structure ● Startup performance is often really bad ● Difficult to document intent (lack of types) ● No support for modules, packages, or libraries
  • 7. Make it easier ● We want to improve the web platform ○ Better support for programming in the large ○ Faster application startup (especially on mobile) ○ More predictable and better runtime performance ○ JavaScript is a powerful tool but it has sharp edges ● Keep up the innovation momentum ○ The web is evolving at a fantastic pace! ○ The developer tools have to keep up
  • 8. JavaScript is full of ... surprises ● Lots and lots of implicit type conversions ● Most operations produce weird results when passed wrong or uninitialized values instead of failing in a recognizable way Keep on truckin'
  • 9. No argument type checking var x = 499; x + null; x + []; x + undefined; x - {};
  • 10. No argument type checking var x = 499; x + null; // => 499 x + []; x + undefined; x - {};
  • 11. No argument type checking var x = 499; x + null; // => 499 x + []; // => "499" x + undefined; x - {};
  • 12. No argument type checking var x = 499; x + null; // => 499 x + []; // => "499" x + undefined; // => NaN x - {};
  • 13. No argument type checking var x = 499; x + null; // => 499 x + []; // => "499" x + undefined; // => NaN x - {}; // => NaN
  • 14. No array bounds checking var array = new Array(32); ... array[32]; array[-1]; array[.1]; array[null]; array[array];
  • 15. No array bounds checking var array = new Array(32); ... array[32]; // => undefined array[-1]; // => undefined array[.1]; // => undefined array[null]; // => undefined array[array]; // => undefined
  • 16. No array bounds checking var array = new Array(32); ... array[32]; // => void 0 array[-1]; // => void 0 array[.1]; // => void 0 array[null]; // => void 0 array[array]; // => void 0
  • 17. No spell checking? var request = new XMLHttpRequest(); ... request.onreadystatechange = function() { if (request.readystate == 4) { console.log('Request done!'); } };
  • 18. No spell checking? var request = new XMLHttpRequest(); ... request.onreadystatechange = function() { if (request.readyState == 4) { console.log('Request done!'); } };
  • 19. JavaScript has improved but ... ● JavaScript has fundamental issues at the language level that impact productivity ● Performance has improved but mostly for a pretty static subset of JavaScript ● It remains very time consuming to build and maintain large web apps
  • 20. The story of Dart ● A few years ago Lars Bak and Kasper Lund prototyped Spot ○ A new simple programming language for the web ○ Based on their experiences from JavaScript/V8 ● Spot was the prelude for the Dart project
  • 21. What is Dart? ● Unsurprising object-oriented programming language ● Class-based single inheritance with interfaces ● Familiar syntax with proper lexical scoping ● Single-threaded with isolate-based concurrency ● Optional static types
  • 22. And more! Dart comes with a lot of developer tools: ● DartEditor: Eclipse based Dart editor ● Dartium: Chromium with embedded Dart VM ● dart2js: Dart-to-JavaScript compiler ● Libraries: io, crypto, i18n, ...
  • 23. Deployment and execution Dart source Dart source Dart virtual Dart tools machine in browser or standalone Dart snapshot JavaScript runs in all modern browsers
  • 24. Let's see it in action ● Let's write simple applications with the Eclipse-based Dart Editor
  • 25. Conventional type checking ● Tries to prove that your program obeys the type system ● Considers it a fatal error if no proof can be constructed ● In Dart, you are innocent until proven guilty... List<Apple> apples = tree.pickApples(); printFruits(apples); void printFruits(List<Fruit> fruits) { for (Fruit each in fruits) print(each); }
  • 26. Optional static types ● Static types convey the intent of the programmer ● Checkable documentation for code and interfaces ● Avoids awkward variable naming or comment schemes ● Type annotations have no effect on runtime semantics
  • 27. Isolates Isolates are lightweight units of execution: ● Run in their own address space like processes ● Nothing is shared - nothing needs synchronization ● All communication takes place via messaging passing ● Supports concurrent execution
  • 28. Communication ● ReceivePorts: ○ enqueues incoming messages ○ can not leave their isolate ○ can be created on demand ● SendPorts: ○ created by a ReceivePort ○ dispatches messages to its ReceivePort ○ can be transferred (across Isolate boundaries) ○ Unforgeable, transferable capability
  • 29. Dart virtual machine ● Dart has been designed for performance ○ Simplicity gives more performance headroom ○ Enforced structure leads to better predictability ○ Virtual machine performs better than V8 at launch ● Works embedded in browser or standalone ○ Experimental Dart-enabled build of Chromium ○ SDK includes preliminary server-side libraries $ dart hello.dart
  • 30. Dart-to-JavaScript ● Compiler is implemented in Dart ○ Generates JavaScript that runs in modern browsers ○ SSA based optimizations ○ Uses tree shaking to cut down on code size $ dart2js --out=hello.js hello.dart
  • 31. Flavour of generated JavaScript class Point { var x, y; Point(this.x, this.y); toString() => "($x,$y)"; } Isolate.$defineClass("Point", "Object", ["x", "y"], { toString$0: function() { return '(' + $.toString(this.x) + ',' + $.toString(this.y) + ')'; } });
  • 33. Open source ● Dart is available under a BSD license ● Developed in the open (code reviews, build bots, etc.) Online resources ● Primary site - http://www.dartlang.org/ ● Code - http://dart.googlecode.com/ ● Libraries - http://api.dartlang.org/ ● Specification - http://www.dartlang.org/docs/spec/
  • 34. Summary ● Dart is an unsurprising, object-oriented language that is instantly familiar to most ● Dart allows you to write code that tools and programmers can reason about ● Dart applications runs in all modern browsers through translation to JavaScript
  • 35. Dart allows rapid prototyping and structured development. Dart was designed with performance in mind. Thank you! Dart is open source and instantly familiar to lots of programmers. Dart runs everywhere JavaScript does.