and why you should care … but probably don’t … yetgotocon.com/dl/2014/gotonight aar...
TRANSCRIPT
![Page 1: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/1.jpg)
#dartlang
Kasper Lund
GOTO NightsSeptember, 2014
… and why you should care… but probably don’t… yet
![Page 2: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/2.jpg)
#dartlang
Who am I?
Kasper Lund, software engineer at GoogleCo-founder of the Dart project
Key projectsV8: High-performance JavaScript engineDart: Structured programming for the web
![Page 3: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/3.jpg)
#dartlang
What is it, really?
![Page 4: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/4.jpg)
#dartlang
TL;DR
Programming languageIntegrated development toolsRich core libraries
![Page 5: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/5.jpg)
#dartlang
TL;DR
Programming languageIntegrated development toolsRich core libraries
![Page 6: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/6.jpg)
#dartlang
1.6 1.0Dart is a scalable web app platform
![Page 7: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/7.jpg)
#dartlang
Dart runs everywhere!
Runs on native Dart VM - or translated to JavaScript
Runs on native Dart VM
![Page 8: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/8.jpg)
#dartlang
Language
![Page 9: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/9.jpg)
#dartlang
The Dart language
Unsurprising and object-oriented Class-based single inheritanceFamiliar syntax with lexical scopingOptional static type annotations
![Page 10: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/10.jpg)
#dartlang
Dart for JavaScript programmersmain() { var greeting = “Hello, World”; print(greeting);}
Dart is flexible
Let’s change this to appeal a bit more to Java programmers
![Page 11: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/11.jpg)
#dartlang
Dart for Java programmersvoid main() { String greeting = “Hello, World”; print(greeting);} What? No classes?
![Page 12: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/12.jpg)
#dartlang
Dart for Java programmersvoid main() { Person person = new Person(“Kasper”); print(“Hello $person”);}
class Person { String name; Person(this.name); toString() => name;}
![Page 13: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/13.jpg)
#dartlang
Dart for JavaScript programmersmain() { var person = new Person(“Kasper”); print(“Hello $person”);}
class Person { var name; Person(this.name); toString() => ;}
Proper lexical scoping
No reason to write this.name here!
Fail early and predictably
Typos lead to recognizable compile-time and runtime errors
naemname
![Page 14: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/14.jpg)
#dartlang
![Page 15: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/15.jpg)
#dartlang
Tools
![Page 16: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/16.jpg)
#dartlang
The Dart toolsWorking with codeAnalyzerEditorFormatterPackage manager (pub)
Executing code Virtual machineDart-to-JavaScript compiler (dart2js)
Understanding codeCoverage trackerProfilerDebugger
![Page 17: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/17.jpg)
#dartlang
Let’s see that in action!Demonstration of the Dart editor
![Page 18: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/18.jpg)
#dartlang
Toolability
What makes a language toolable?
1. The language must have enough structure to allow efficient static analysis
2. The language must allow developers to understand and trust the analysis results
![Page 19: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/19.jpg)
#dartlang
Libraries
![Page 20: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/20.jpg)
#dartlang
The Dart libraries
![Page 21: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/21.jpg)
#dartlang
Core libraries - dart:core
Classes: bool, int, double, String
value.clamp(0, 255).toRadixString(16)
input.trim().padLeft(8, padding: “0”)
Named optional parameter
![Page 22: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/22.jpg)
#dartlang
Core libraries - dart:core
Classes: List, Map, Set
Map<int, String> cache = …;
cache.keys
.where((key) => key.isEven)
.map((key) => cache[key])
.forEach(print);
All the intermediate collections are lazy and
of type Iterable
![Page 23: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/23.jpg)
#dartlang
Core libraries - dart:async
Classes: Future, Stream
HttpRequest.getString(“localhost:8080”)
.then(print);
input.onKeyUp
.map((event) => event.target.value)
.distinct()
.forEach(print);
![Page 24: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/24.jpg)
#dartlang
Higher level libraries
Polymer.dart
![Page 25: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/25.jpg)
#dartlang
pub.dartlang.org
© thejetsetter.co.uk
![Page 26: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/26.jpg)
#dartlang
Dart everywhere!Demo of client- and server-side code
![Page 27: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/27.jpg)
#dartlang
Language(part deux)
![Page 28: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/28.jpg)
#dartlang
New language features
EnumerationsGenerators and async functionsDeferred loading
![Page 29: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/29.jpg)
#dartlang
New language features
Enumerations enumGenerators and async functionsDeferred loading
![Page 30: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/30.jpg)
#dartlang
The four types of functions
T Iterable<T>
Future<T> Stream<T>
one many
sync
async
![Page 31: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/31.jpg)
#dartlang
Repeatedly waitingfinal context = querySelector("canvas").context2D;
bool running = true; // Set to false to stop animation.
main() {
void tick(time) {
context.clearRect(0, 0, 500, 500);
context.fillRect(time % 450, 20, 50, 50);
if (running) window.animationFrame.then(tick);
}
window.animationFrame.then(tick);
}
![Page 32: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/32.jpg)
#dartlang
Repeatedly awaiting!final context = querySelector("canvas").context2D;
bool running = true; // Set to false to stop animation.
main() async {
while (running) {
var time = await window.animationFrame;
context.clearRect(0, 0, 500, 500);
context.fillRect(time % 450, 20, 50, 50);
}
}
This doesn’t work in Dart today
![Page 33: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/33.jpg)
#dartlang
Our libraries are ready!
![Page 34: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/34.jpg)
#dartlang
The four types of functions
T Iterable<T>
Future<T> Stream<T>
one many
sync
async
![Page 35: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/35.jpg)
#dartlang
The four types of functions
T Iterable<T>
(..) async { … } Stream<T>
one many
sync
async
![Page 36: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/36.jpg)
#dartlang
The four types of functions
(..) { … } (..) sync* { … }
(..) async { … } (..) async* { … }
yield
await
Iterable<int> range(int n) sync* { for (int i = 0; i < n; i++) { yield i; }}
![Page 37: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/37.jpg)
#dartlang
Sometimes it pays off to be
lazy...
Deferred loading
![Page 38: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/38.jpg)
#dartlang
Deferred loadingimport “analytics.dart” deferred as analytics;
main() {
startAnalytics(); // Doesn’t block.
startApplication();
}
startAnalytics() async {
await analytics.loadLibrary();
analytics.enableControls();
}
![Page 39: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/39.jpg)
#dartlang
Productivity
![Page 40: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/40.jpg)
#dartlang
The Dart productivity factors
Expressive languageGreat toolsRich libraries
… but is that really the entire story?
![Page 41: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/41.jpg)
#dartlang
Unsurprising semantics
![Page 42: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/42.jpg)
#dartlang
Constructors are just functionsfunction Point(x, y) {
this.x = x;
this.y = y;
}
var point = Point(2, 3);
assert(point == undefined);
assert(x == 2 && y == 3);
Forgot to write new
So we get two new global variables!
![Page 43: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/43.jpg)
#dartlang
Accessing non-existing propertiesvar request = new XMLHttpRequest();
...
request.onreadystatechange = function() {
if (request.readystate == 4) {
console.log('Request done: ' + request.responseText);
}
};
Did you mean readyState?
![Page 44: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/44.jpg)
#dartlang
Subtle details
If you find yourself always worrying about subtle details in your code …
… you are distracted … you are less productive… you are ready to try Dart!
![Page 45: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/45.jpg)
#dartlang
Performance
![Page 46: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/46.jpg)
#dartlang
Benchmarks.dart.dart.js.js
![Page 47: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/47.jpg)
#dartlang
Try that with a larger code base...
Code base: dart2jsFeatures: Parser, SSA-based optimizer, etc.Implementation: 110K lines of Dart code
dart2js.dart.jsdart2js.dart
Dart (1.6.0): dart2js.dart
User time (seconds): 17.85 System time (seconds): 0.95 Percent of CPU this job got: 102% Memory usage (MB): 153
V8 (3.26.31.10): dart2js.dart.js
User time (seconds): 49.25 System time (seconds): 1.79 Percent of CPU this job got: 120% Memory usage (MB): 484
![Page 48: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/48.jpg)
#dartlang
Conclusions
![Page 49: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/49.jpg)
#dartlang
Dart is ...
unsurprising
object-oriented
reasonable
familiar
productiveopen-source… and ready to be used today!
![Page 50: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/50.jpg)
#dartlang
Your new platform for the web?
Dart is a stable platform you can use today It is easy to get started - just visit dartlang.org
![Page 51: and why you should care … but probably don’t … yetgotocon.com/dl/2014/GOTONight Aar 080914.pdf · The Dart tools Working with code Analyzer Editor Formatter Package manager](https://reader034.vdocuments.mx/reader034/viewer/2022042418/5f34fd681cb6b101ce671403/html5/thumbnails/51.jpg)
#dartlang
Thank you!