codefest 2014. Егоров В. — Что за… dart?

80
#dartlang Вячеслав Егоров Что за…

Upload: codefest

Post on 13-Jan-2015

978 views

Category:

Internet


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlangВячеслав Егоров

Что за…

Page 2: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

производительностьJavaScript

Мы работали над V8...

Page 3: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Мы работали над V8...

сложность трюковвстроенных в V8

производительностьJavaScript

Page 4: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Мы работали над V8...

уровень счастьякомпиляторщиков

производительностьJavaScript

Page 5: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Быстрый код - это статический код.

Page 6: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

JS VM потеет: пытается узреть статическое в

динамическом

Page 7: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

JS программисты потеют:пытаются ублажить VM

для скорости

Page 8: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Авторы JS VM тоже потеют

Page 9: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Не потеет только сам JS

Page 10: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

o = { l1: -1, l2: 1, l3: "something"};arr = [];arr[o.ll+o.l2]=o.l3;arr.length // => 0 ???

Page 11: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

o = { l1: -1, l2: 1, l3: "something"};arr = [];arr[o.ll+o.l2]=o.l3;arr.NaN // => “something”

Page 12: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Удивительно для VM = Удивительно

программисту

Page 13: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

THREE.QuadEdgeMesh = function(mesh) { function HalfEdge(/* ... */) { /* ... */ } /* ... */ this.addFace = function () { };};

Page 14: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

THREE.QuadEdgeMesh = function(mesh) { function HalfEdge(/* ... */) { /* ... */ } /* ... */ this.addFace = function () { };};

Медленно :-(

Page 15: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

function HalfEdge(/* ... */) { }

THREE.QuadEdgeMesh = function(mesh) { };

Three.QuadEdgeMesh.prototype.addFace = ...

Быстро :-)

Page 16: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

А почему?

Page 17: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Теперьо Dart

Page 18: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Простой выразительный

язык

Page 19: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Платформа

Page 20: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

● VM○ быcтрый edit-refresh○ отладчик○ server-side

● Анализатор● Редактор● Библиотеки ● Фреймворки

Page 21: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

foo() { return 42;}

Page 22: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

textWidth() { return 42;}

Page 23: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

textWidth(text) { return text.split(‘\n’) .map((ln) => ln.length) .reduce(max);}

Page 24: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

textWidth(text) => text.split(‘\n’) .map((ln) => ln.length) .reduce(max);

Page 25: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

textWidth(text) => text.split(‘\n’) .map((ln) => ln.length) .reduce(max);

Page 26: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

textWidth(text) => text.split(‘\n’) .map((ln) => ln.length) .reduce(max);

Page 27: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

fileWidth(url) => HttpRequest.getString(url) .then(textWidth);

Page 28: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

fileWidth(url) => HttpRequest.getString(url) .then(textWidth);

Page 29: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

fileWidth(url) => HttpRequest.getString(url) .then(textWidth);

Page 30: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

var w = fileWidth(SOME_URL);if (w >= 80) { print("Your file has width $w.");}

Page 31: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

var w = fileWidth(SOME_URL);if (w >= 80) { print("Your file has width $w.");}

Page 32: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

var w = fileWidth(SOME_URL);if (w >= 80) { print("Your file has width $w.");}

Page 33: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

var w = fileWidth(SOME_URL);if (w >= 80) { print("Your file has width $w.");}

Exception: Class '_Future' has no instance method '>='.

Page 34: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

var w = fileWidth(SOME_URL);if (w >= 80) { print("Your file has width $w.");}

$ dartanalyzer codefest2014.dart[hint] There is no such operator '>=' in 'Future' (codefest2014.dart, line 17, col 9)

Page 35: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

fileWidth(SOME_URL).then((w) { if (w >= 80) print("Your file has width $w.");});

Page 36: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Опциональная типизация:● гибкость динамики● удобство статики

+ Предсказуемая семантика

Page 37: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Future<num> fileWidth(String url) => ...

Page 38: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Предсказуемая семантика● ранние ошибки● меньше удивительного

Page 39: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

var self = this;for (var i = 0; i < self.arr.length; i++) { var listener = (function (i) { return function (evt) { self.handleEventAt(i); }; })(i);}

Page 40: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

for (var i = 0; i < arr.length; i++) { var listener = (e) => handleEventAt(i);}

Page 41: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

for (var i = 0; i < arr.length; i++) { var listener = (e) => handleEventAt(i);}

Page 42: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

for (var i = 0; i < arr.length; i++) { var listener = (e) => handleEventAt(i);}

Page 43: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Разработка веб-приложений?

Page 44: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Page 45: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

<counters-list> </counters-list>

Page 46: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

<width-counter></width-counter> <width-counter></width-counter> <width-counter></width-counter> <width-counter></width-counter>

Page 47: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

AngularDart

Page 48: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

MODEL VIEW

WHATEVER

Page 49: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

MODEL VIEW

WHATEVER

Dart objects

DOM

Page 50: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Page 51: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

$ cat pubspec.yamlname: CodeFest2014description: A CodeFest2014 sampledependencies: browser: any angular: any$ pub getDownloading angular 0.9.10...

Page 52: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Библиотеки

Page 53: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

import '../lib1.dart';import 'dart:math' show max;import 'package:js/js.dart' as js;

Page 54: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

● dart:math● dart:async● dart:isolate● dart:typed_data● dart:html● dart:io● dart:mirrors● …

Page 55: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

import 'package:angular/angular.dart';

Page 56: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

class WidthCounter { var url, width = "n/a"; count() => fileWidth(url) .then((v) => width = v) .catchError((e) => width = "n/a");}

Page 57: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Классы:● объекты “заморожены”● одиночное наследование● любой класс это интерфейс● mixins● generics

Page 58: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

@NgComponent( selector: 'width-counter', template: …, publishAs: 'ctrl')class WidthCounter {

Page 59: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

<div> <input type="text" ng-model="ctrl.url" ng-change="ctrl.count()"> is <b>{{ctrl.width}}</b> columns wide.</div>

Page 60: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

@NgComponent( selector: 'counters-list', template: """<width-counter ng-repeat="_ in ctrl.counters"></width-counter><i class="fa fa-plus-square" ng-click="ctrl.addCounter()"></i><i class="fa fa-minus-square" ng-click="ctrl.removeCounter()"></i>""")class CountersList {

Page 61: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

main() { ngBootstrap( module: new Module() ..type(WidthCounter) ..type(CountersList));}

Page 62: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

main() { ngBootstrap( module: new Module() ..type(WidthCounter) ..type(CountersList));}

Page 63: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Injector ngBootstrap({ Module module: null, List<Module> modules: null, dom.Element element: null, String selector: '[ng-app]'})

Page 64: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

main() { ngBootstrap( module: new Module() ..type(WidthCounter) ..type(CountersList));}

Page 65: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

main() { var m = new Module(); m.type(WidthCounter); m.type(CounterList); ngBootstrap(module: m);}

Page 66: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Page 67: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Page 68: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

class Border { var width, color, style;

Border({this.width: 1, this.color: "black", this.style: "solid"});

get css => "${width}px $style $color";}

Page 69: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

class Border { var width, color, style;

Border({this.width: 1, this.color: "black", this.style: "solid"});

get css => "${width}px $style $color";}

Page 70: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

class Border { var width, color, style;

Border({this.width: 1, this.color: "black", this.style: "solid"});

get css => "${width}px $style $color";}

Page 71: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

class Border { var width, color, style;

Border({this.width: 1, this.color: "black", this.style: "solid"});

get css => "${width}px $style $color";}

Page 72: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

addCounter() { counters.add(new Border( color: 'hsla(${rnd.nextInt(360)}, ’ ’75%, 50%, 0.5)'));}

Page 73: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

<width-counter ng-repeat="border in ctrl.counters" with-border="border"> </width-counter>

Page 74: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

<width-counter ng-repeat="border in ctrl.counters" with-border="border"> </width-counter>

Page 75: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

@NgDirective(selector: '[with-border]')class WithBorderDirective { dom.Element el; WithBorderDirective(this.el);

@NgOneWay('with-border') set border (Border val) { el.style.border = val.css; }}

Page 76: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

@NgDirective(selector: '[with-border]')class WithBorderDirective { dom.Element el; WithBorderDirective(this.el);

@NgOneWay('with-border') set border (Border val) { el.style.border = val.css; }}

Page 77: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

@NgDirective(selector: '[with-border]')class WithBorderDirective { dom.Element el; WithBorderDirective(this.el);

@NgOneWay('with-border') set border (Border val) { el.style.border = val.css; }}

Page 78: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

class Border extends Object with Exportable { @export var width, color, style;}

border.toJSON()

Page 79: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Dart компилируется в JavaScript с помощью dart2js

Page 80: CodeFest 2014. Егоров В. — Что за… Dart?

#dartlang

Dart - для современного веба

● Платформа, готовая к использованию● dartlang.org● Компилируется в JavaScript