Top Banner
Dart — Светлая сторона силы? Михаил Давыдов JavaScript разработчик группы разработки Веб-чатов Web Standards Days, Екатеринбург, 28 апреля 2012
29

Dart - светлая сторона силы?

May 26, 2015

Download

Technology

Mikhail Davydov

Доклад про Google Dart c Екатеринбургской встречи Web Standart Days 2012
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dart - светлая сторона силы?

Dart — Светлая сторона силы?Михаил ДавыдовJavaScript разработчик группы разработки Веб-чатов

Web Standards Days, Екатеринбург, 28 апреля 2012

Page 2: Dart - светлая сторона силы?

2

Page 3: Dart - светлая сторона силы?

3

Проблемы JavaScript

1. Длительная инициализация

2. Любой объект === хэш

3. Манкипатчинг, eval

Page 4: Dart - светлая сторона силы?

4

«Особенности» JavaScript

1. Прототипы и странное наследование

2. Магия с операторами, this, instanceof…

3. Мало синтаксического сахара

4. Нет вменяемых модулей

Page 5: Dart - светлая сторона силы?

Задача — устранить проблемы JavaScript

5

Page 6: Dart - светлая сторона силы?

Особенности Dart

6

1. Структурированный, но гибкий

2. Знакомый и естественный

3. Быстрый при старте и работе

4. Нацелен на все устройства

Page 7: Dart - светлая сторона силы?

// Более стукрурированныйMap items = new Map();

// Но гибкийvar items = {};

// Опциональный типString name = 'Dart';// var name =

7

Структурированность

Интерфейсы: Map, List, Set, Queue...

Page 8: Dart - светлая сторона силы?

#library('Geometry');

class Rect { final num h, w; // короткий конструктор Rect(num this.w, num this.h);}

class Square extends Rect { Square(num w): super(w, w);}

8

Естественные классы

Page 9: Dart - светлая сторона силы?

Быстрый старт и работа

9

1. Декларативные классы

2. Нет eval и манкипатчинга

3. Разделение выполнения и инициализации

4. Разделяемая куча, Images

Page 10: Dart - светлая сторона силы?

Мне кажется или

10

все очень хорошо?

Page 11: Dart - светлая сторона силы?

Queue callbacks = new Queue();

callbacks = 1000; // IDE Warning

callbacks.add((x)=>x++); // Error!

11

Опциональные типы

Page 12: Dart - светлая сторона силы?

Queue callbacks = new Queue();

// фактически эквивалентно для JS

/** * @type {Queue} */var callbacks = new Queue();

12

Тип == документация

Page 13: Dart - светлая сторона силы?

13

Привкус Java

AssertionError, Clock, Expect, FallThroughError, Futures, Math, Object, Strings, TypeError, Collection<E>, Comparable, Completer<T>, Date , double, Duration , Dynamic, Function, Future<T>...

Page 14: Dart - светлая сторона силы?

if (Dart is VBScript) return JavaScript;

14

Page 15: Dart - светлая сторона силы?

15

Page 16: Dart - светлая сторона силы?

16

Page 17: Dart - светлая сторона силы?

17

Page 18: Dart - светлая сторона силы?

18

Это маловероятно

Page 19: Dart - светлая сторона силы?

Dart-to-JavaScript?

19

Page 20: Dart - светлая сторона силы?

Проблемы трансляции

20

1. Нет обратной совместимости

2. Лишний код и тормоза

3. Сложная отладка

Page 21: Dart - светлая сторона силы?

Ни что не раздражает больше, чем новый язык

программирования (с)

21

Page 22: Dart - светлая сторона силы?

PROFIT от Dart для JS

22

Page 23: Dart - светлая сторона силы?

23

Ленивая инициализация

LMD — Ленивая декларация модулей

— Всего 250 байт === быстрый старт — Внедряется в Вебчате на Я.Почте

http://clck.ru/mEML

Page 24: Dart - светлая сторона силы?

Object.createCallableObject =

function (f, proto) { for (var prop in proto) f[prop] = proto[prop];

return f;}

24

Callable Object

Page 25: Dart - светлая сторона силы?

var LatLon = function (lat, lon){};LatLon.fromString = function (coords){};

LatLon.fromString.prototype = LatLon.prototype = { distanceTo: function (latLon){}};

new LatLon(1, 2); // instanceof LatLon

new LatLon.fromString('1,2'); // instanceof LatLon25

Именованные конструкторы

Page 26: Dart - светлая сторона силы?

var List = function (type) { if (this instanceof List) return []; var L = function () {this.items = []};

L.prototype.push: function (item) { if (!type || item instanceof type) // or typeof return this.items.push(item); }; return L;};new List(); // Array == []

// С типомvar list = new (List(Function))(); // Generic Listlist.push(1); // Без изменений

26

Обобщенные списки

Page 27: Dart - светлая сторона силы?

27

Итого

+ Много возможностей - Дистрибуция = ???

+ Профит для JavaScript

Page 28: Dart - светлая сторона силы?

Вопросы?

28

Page 29: Dart - светлая сторона силы?

Михаил ДавыдовJavaScript и Node.js разработчик

[email protected]

Twitter @azproduction

Habr http://azproduction.habrahabr.ru

GitHub https://github.com/azproduction

29