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

What's hot (20)

PDF
Dart, Darrt, Darrrt
Jana Moudrá
 
PPTX
TypeScript Modules
Noam Kfir
 
PDF
Dart
Jana Moudrá
 
PPTX
AngularConf2015
Alessandro Giorgetti
 
PPTX
Type script - advanced usage and practices
Iwan van der Kleijn
 
PPTX
TypeScript: Basic Features and Compilation Guide
Nascenia IT
 
PDF
TypeScript Best Practices
felixbillon
 
PDF
Typescript: enjoying large scale browser development
Joost de Vries
 
PPTX
TypeScript 101
rachelterman
 
PDF
SFScon 2020 - Juri Strumpflohner - Beyond Basics - Scaling Development acros...
South Tyrol Free Software Conference
 
PPTX
Typescript in 30mins
Udaya Kumar
 
PDF
Start dart
Hiroshi Mimori
 
PPTX
Introduction about type script
Binh Quan Duc
 
PDF
Power Leveling your TypeScript
Offirmo
 
PPTX
TypeScript - Silver Bullet for the Full-stack Developers
Rutenis Turcinas
 
PPTX
Typescript
Nikhil Thomas
 
PPTX
TypeScript
Udaiappa Ramachandran
 
PDF
TypeScript: coding JavaScript without the pain
Sander Mak (@Sander_Mak)
 
PPTX
Typescript ppt
akhilsreyas
 
PPTX
TypeScript Overview
Aniruddha Chakrabarti
 
Dart, Darrt, Darrrt
Jana Moudrá
 
TypeScript Modules
Noam Kfir
 
AngularConf2015
Alessandro Giorgetti
 
Type script - advanced usage and practices
Iwan van der Kleijn
 
TypeScript: Basic Features and Compilation Guide
Nascenia IT
 
TypeScript Best Practices
felixbillon
 
Typescript: enjoying large scale browser development
Joost de Vries
 
TypeScript 101
rachelterman
 
SFScon 2020 - Juri Strumpflohner - Beyond Basics - Scaling Development acros...
South Tyrol Free Software Conference
 
Typescript in 30mins
Udaya Kumar
 
Start dart
Hiroshi Mimori
 
Introduction about type script
Binh Quan Duc
 
Power Leveling your TypeScript
Offirmo
 
TypeScript - Silver Bullet for the Full-stack Developers
Rutenis Turcinas
 
Typescript
Nikhil Thomas
 
TypeScript: coding JavaScript without the pain
Sander Mak (@Sander_Mak)
 
Typescript ppt
akhilsreyas
 
TypeScript Overview
Aniruddha Chakrabarti
 

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

PPTX
Dart
Pritam Tirpude
 
PDF
Declarative Infrastructure Tools
Yulia Shcherbachova
 
PDF
Dart Jump Start
Haim Michael
 
PPTX
Dart presentation
Lucas Leal
 
PPTX
Go Is Your Next Language — Sergii Shapoval
GlobalLogic Ukraine
 
PDF
Developing Cross platform apps in flutter (Android, iOS, Web)
Priyanka Tyagi
 
PDF
[KubeCon NA 2018] Telepresence Deep Dive Session - Rafael Schloming & Luke Sh...
Ambassador Labs
 
PPTX
Andriy Shalaenko - GO security tips
OWASP Kyiv
 
PDF
Developing cross platform apps in Flutter (Android, iOS, and Web)
Priyanka Tyagi
 
PDF
Pipeline as code for your infrastructure as Code
Kris Buytaert
 
PDF
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
Sang Don Kim
 
PDF
TypeScript, Dart, CoffeeScript and JavaScript Comparison
Haim Michael
 
PDF
The State of the Veil Framework
VeilFramework
 
PDF
Building a Pluggable, Cloud-native Event-driven Serverless Architecture - Rea...
Dan Farrelly
 
PDF
Higher Level Malware
CTruncer
 
PDF
DevOpsDays Taipei 2019 - Mastering IaC the DevOps Way
smalltown
 
PPTX
Bringing your app to the web with Dart - Chris Buckett (Entity Group)
jaxLondonConference
 
PDF
Developing with-devstack
Deepak Garg
 
PDF
mloc.js 2014 - JavaScript and the browser as a platform for game development
David Galeano
 
Declarative Infrastructure Tools
Yulia Shcherbachova
 
Dart Jump Start
Haim Michael
 
Dart presentation
Lucas Leal
 
Go Is Your Next Language — Sergii Shapoval
GlobalLogic Ukraine
 
Developing Cross platform apps in flutter (Android, iOS, Web)
Priyanka Tyagi
 
[KubeCon NA 2018] Telepresence Deep Dive Session - Rafael Schloming & Luke Sh...
Ambassador Labs
 
Andriy Shalaenko - GO security tips
OWASP Kyiv
 
Developing cross platform apps in Flutter (Android, iOS, and Web)
Priyanka Tyagi
 
Pipeline as code for your infrastructure as Code
Kris Buytaert
 
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
Sang Don Kim
 
TypeScript, Dart, CoffeeScript and JavaScript Comparison
Haim Michael
 
The State of the Veil Framework
VeilFramework
 
Building a Pluggable, Cloud-native Event-driven Serverless Architecture - Rea...
Dan Farrelly
 
Higher Level Malware
CTruncer
 
DevOpsDays Taipei 2019 - Mastering IaC the DevOps Way
smalltown
 
Bringing your app to the web with Dart - Chris Buckett (Entity Group)
jaxLondonConference
 
Developing with-devstack
Deepak Garg
 
mloc.js 2014 - JavaScript and the browser as a platform for game development
David Galeano
 
Ad

More from Paris Open Source Summit (20)

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

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.