Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Mikhail Davydov

October 11, 2012
Tweet

More Decks by Mikhail Davydov

Other Decks in Programming

Transcript

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

    View Slide

  2. 2

    View Slide

  3. 3
    Проблемы JavaScript
    1. Длительная инициализация
    2. Любой объект === хэш
    3. Манкипатчинг, eval

    View Slide

  4. 4
    «Особенности» JavaScript
    1. Прототипы и странное наследование
    2. Магия с операторами, this,
    instanceof…
    3. Мало синтаксического сахара
    4. Нет вменяемых модулей

    View Slide

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

    View Slide

  6. Особенности Dart
    6
    1. Структурированный, но гибкий
    2. Знакомый и естественный
    3. Быстрый при старте и работе
    4. Нацелен на все устройства

    View Slide

  7. // Более стукрурированный
    Map items = new Map();
    // Но гибкий
    var items = {};
    // Опциональный тип
    String name = 'Dart';// var name =
    7
    Структурированность
    Интерфейсы: Map, List, Set, Queue...

    View Slide

  8. #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
    Естественные классы

    View Slide

  9. Быстрый старт и работа
    9
    1. Декларативные классы
    2. Нет eval и манкипатчинга
    3. Разделение выполнения и
    инициализации
    4. Разделяемая куча, Images

    View Slide

  10. Мне кажется или
    10
    все очень хорошо?

    View Slide

  11. Queue callbacks = new Queue();
    callbacks = 1000; // IDE Warning
    callbacks.add((x)=>x++); // Error!
    11
    Опциональные типы

    View Slide

  12. Queue callbacks = new Queue();
    // фактически эквивалентно для JS
    /**
    * @type {Queue}
    */
    var callbacks = new Queue();
    12
    Тип == документация

    View Slide

  13. 13
    Привкус Java
    AssertionError, Clock, Expect, FallThroughError,
    Futures, Math, Object, Strings, TypeError,
    Collection, Comparable, Completer, Date ,
    double, Duration , Dynamic, Function, Future...

    View Slide

  14. if (Dart is VBScript)
    return JavaScript;
    14

    View Slide

  15. 15

    View Slide

  16. 16

    View Slide

  17. 17

    View Slide

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

    View Slide

  19. Dart-to-JavaScript?
    19

    View Slide

  20. Проблемы трансляции
    20
    1. Нет обратной совместимости
    2. Лишний код и тормоза
    3. Сложная отладка

    View Slide

  21. Ни что не раздражает
    больше, чем новый язык
    программирования (с)
    21

    View Slide

  22. PROFIT от Dart для JS
    22

    View Slide

  23. 23
    Ленивая инициализация
    LMD — Ленивая декларация модулей
    — Всего 250 байт === быстрый старт
    — Внедряется в Вебчате на Я.Почте
    http://clck.ru/mEML

    View Slide

  24. Object.createCallableObject =
    function (f, proto) {
    for (var prop in proto)
    f[prop] = proto[prop];
    return f;
    }
    24
    Callable Object

    View Slide

  25. 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 LatLon
    25
    Именованные конструкторы

    View Slide

  26. 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 List
    list.push(1); // Без изменений
    26
    Обобщенные списки

    View Slide

  27. 27
    Итого
    + Много возможностей
    - Дистрибуция
    = ???
    + Профит для JavaScript

    View Slide

  28. Вопросы?
    28

    View Slide

  29. Михаил Давыдов
    JavaScript и Node.js разработчик
    [email protected]
    Twitter @azproduction
    Habr http://azproduction.habrahabr.ru
    GitHub https://github.com/azproduction
    29

    View Slide