Пользователь
102,0
рейтинг
10 октября 2011 в 14:24

Разработка → Официальная презентация языка Google Dart

Сегодня компания Google официально представила новый язык структурного веб-программирования Dart, который позволит создавать быстрые и высокопроизводительные веб-приложения. При всей своей простоте для написания маленьких скриптов, с помощью Dart можно будет создавать и сложные модульные веб-приложения, использовать библиотеки, дебаггеры, редакторы кода и другой инструментарий.

На официальном сайте представлен технический обзор языка (перевод на русский от azproduction), спецификации (PDF), список библиотек.

Как объяснялось во внутренней переписке компании, Dart позиционируется в качестве замены/альтернативы Javascript, страдающего от «фундаментальных» изъянов, которые невозможно исправить путём эволюционного развития.

Ключевые преимущества Dart
  • Классы и интерфейсы, которые обеспечивают простой и понятный механизм для чётко определённых API. Эти конструкции также обеспечивают инкапсуляцию и повторное использование методов и данных.
  • Дополнительные типы (optional types), благодаря которым можно переходить от самых простых приложений к сложным модульным системам, а также использовать дебаггеры для проверки типов.
  • Поддержка библиотек.
  • Инструментарий. Планируется создать множество дополнительных программ в помощь разработчику.

Dart пока находится на ранней стадии разработки. Создателем языка является известный программист Ларс Бак (Lars Bak), которому помогает группа разработчиков в датском офисе. Дополнительный инструментарий делает команда Брюса Джонсона (Bruce Johnson) в Атланте, а поддержкой уровня Web Inspector для Dart и Harmony занимается Павел Фельдман (Pavel Feldman) с разработчиками из Санкт-Петербурга.

Примеры

Определение интерфейса, класса и подкласса.

interface Shape {
  num perimeter();
}

class Rectangle implements Shape {
  final num height, width; 
  Rectangle(num this.height, num this.width);  // Compact constructor syntax.
  num perimeter() => 2*height + 2*width;       // Short function syntax.
}

class Square extends Rectangle {
  Square(num size) : super(size, size);
}

Вот как один и тот же класс Point можно вводить в простом коде, с параметрами x и y, без дополнительных типов.

class Point {
  var x, y;
  Point(this.x, this.y);
  scale(factor) => new Point(x*factor, y*factor);
  distance() => Math.sqrt(x*x + y*y);
}

main() {
  var a = new Point(2,3).scale(10);
  print(a.distance());
}

И тот же код с использованием дополнительного типа num, что нужно при росте сложности веб-приложения.

class Point {
  num x, y;
  Point(num this.x, num this.y);
  Point scale(num factor) => new Point(x*factor, y*factor);
  num distance() => Math.sqrt(x*x + y*y);
}

void main() {
  Point a = new Point(2,3).scale(10);
  print(a.distance());
}


Использовать Dart можно разными способами:
  • трансляция в JavaScript, что поддерживается некоторыми современными браузерами (Chrome, Safari 5+, Firefox 4+);
  • исполнение кода напрямую в виртуальной машине на серверной стороне;
  • использовать встроенный редактор Dartboard для написания, редактирования и исполнения простых скриптов в окне браузера.


Напомним, что Dart разработан с учётом трёх главных целей:

  • Производительность. Виртуальные машины на Dart не будут иметь тех проблем с производительностью, которые есть у всех машин EcmaScript.
  • Удобство разработки. Будет сохранена динамическая, лёгкая в освоении, не требующая компиляции природа Javascript, которая сделала веб-платформу абсолютным лидером среди программистов-любителей.
  • Поддержка редакторов кода и дополнительных инструментов. Dart спроектирован таким образом, чтобы было легче использовать дополнительные инструменты для больших серьёзных проектов, которые требуют поддержки, в том числе таких функций как рефакторинг и поиск мест вызова функций. В то же время Dart не будет требовать обязательного использования редактора кода для эффективного программирования, так что обычный разработчик вполне может быть доволен работой в текстовом редакторе.

Dart также должен обеспечивать максимальную безопасность там, где эта задача не конфликтует с тремя главными.

Предполагается, что поддержка Dart будет встроена во все браузеры как основной нативный клиентский язык (вместо Javascript), он будет использоваться на серверах фронт-енда, а также в кросс-компиляторах.

Параллельно с «революционным» вариантом, коим является Dart, компания Google будет продвигать и другой вариант решения проблемы — проект Harmony, в рамках которого будут исправлять те недостатки Javacript, какие возможно.
Анатолий Ализар @alizar
карма
744,5
рейтинг 102,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (55)

  • +8
    Хорошее названия для аналога яваскрипта, суть почти раскрыта
    • 0
      Вы имеет ввиду что в основном JavaScript код пишется на удачу, а вдруг заработает? :)
      • 0
        К.О подсказывает что речь о Дарте Вейдере
        • +5
          К.О. устал повторять что он Darth Weider.
          • +28
            Я бы даже сказал Vader.
            • +4
              Забавно, и правда Vader, что это я.
              Я даже погуглил перед написанием, но краудсоринг меня подвёл — Weider оказалось настолько частой ошибкой, что я принял его за правильный вариант.
        • +2
          Он Darth, если что.
          • +1
            Из империи Googol?
        • +1
          Cразу вспоминается это видео
    • 0
      Если можно, поподробней.
  • 0
    Интересно было увидеть что же такой за Dart. Будем надеяться, что у этой штуки есть будущее.
    • +5
      Ну, то, что показали, смотрится вменяемо: типизация переменных (думаю, она быстро станет правилом хорошего тона), компактный синтаксис, фигурные скобки и точки с запятой на месте, привычные/понятные классы, интерполяция переменных и вызова кода в строках, обмен сообщениями… Кстати, так и тянет на многозадачность в стиле эрланга.
    • 0
      Или же его закопают рядом с GWT
      • НЛО прилетело и опубликовало эту надпись здесь
        • +6
          Фигасе новости. О_о
        • +1
          Ну я подумал что немного утрирования тут не помешает :) Тем ни менее GWT с похожим и поначалу многообещающем подходом трансляции кода в JavaScript мейнстримом так и не стал. Посмотрим как сложатся дела у дарта.

          Интересно что dart преполагают повышенную по сравнению с JavaScript производительность, хотя пока не очень то понятно откуда она возьмется (типизация?). Разрабочикам V8 может конечно и видней, подождем тестов каких-нибудь.
          • НЛО прилетело и опубликовало эту надпись здесь
        • +2
          А мужики-то не знают!
  • +13
    ждём jquery на dart
    • +2
      dquery?
  • –8
    В примерах увидел такое:

    main() {
    Element element = document.getElementById('message');
    element.innerHTML = 'Hello from Dart';
    }


    Значит ли это, что Dart не имеет собственных методов работы с DOM и в веб-приложениях для доступа к сущностям нужно использовать JS? А как у него обстоят дела с Ajax'ами и прочими плюшками, необходимыми для веб-программирования? Есть ли Dart-фреймворки вроде jQuery?
    • +4
      >> Значит ли это, что Dart не имеет собственных методов работы с DOM и в веб-приложениях для доступа к сущностям нужно использовать JS?

      С каких пор конструкция
      >> Element element =…
      является частью яваскрипт?

      И к вашему сведению, доступ к дом дереву или ajax-функциям являются частью языка только как набор библиотек, доступный в рамках среды исполнения языка(в данном случае браузер)
      Что мешает для нового языка реализовать соответствующие библиотеки на уровне среды исполнения языка?
      • –5
        Я не о конструкции вида «Element element =…», а о «document.getElementById('message');»
        • +11
          document.getElementById — это не конструкция языка. Это объект и метод DOM, который предоставляется браузером и который и сейчас может использоваться разными языками (в IE это javascript и vbscript, например).
          • +2
            Прошу прощения, это я протупил. :)
        • 0
          Простите мою не осведомленность и неопытность… но Вы как хотите чтобы было?
          • +9
            О, рад, что Вы спросили. Мне, как всегда, не хватает встроенной функции doMagic() :) Как думаете, в этом языке её реализуют?
    • 0
      Думается мне, что это такой же глобальный объект document, созданный на Dart. Просто для совместимости с JS кодом оставили существующие имена методов. И это разумно, на мой взгляд.
      • –4
        Вот именно это я, в общем-то, и спрашивал: чем в данном случае является document и кем он создан. Пока это выглядит как присвоение результатов вызова методов JS-объектов в переменные Dart и последующее обращение к JS-объектам (это я исключительно про приведённый в комментарии пример).

        Что касается совместимости, то она, имхо, лишняя.

        Если язык использует свои конструкции и и типы, пусть бы и синтаксис отделили. Во-первых, это избавило бы от вопросов вроде моего (всё сразу было бы очевидно), во-вторых, в том же jQuery не зря ввели огромное количество полезных методов, поскольку в чистом виде JS бывает монструозен, а новый язык мог бы решить и эту проблему.
        • 0
          Зачем новый синтаксис? Вам не нравится точка как оператор обращения к свойству?

          По библиотекам вроде jQuery:
          Вы про спецификации слышали? Они, как бы, утверждаются не одним лишь гуглом.
          Если и считать это проблемой, то это проблема не языка.
  • –4
    Интересно, что за виртуальная машина на стороне сервера, как замена nodejs? Своей машины в браузерах нет, все работает через трансяцию в JS? Хм, непонятно, сразу закапывать или немного помучать…
  • 0
    Хорошо, что не Darth, а то я бы уверился в то, что Google на тёмной стороне. По существу корпорации очень-очень надо постараться, чтобы хоть куда-нибудь сдвинуть JavaScript.
    • 0
      use force.luke;
  • +30
    Не удержался.
    image
  • +3
    На Lion с xcode 4 из коробки dart vm и прочее собираться не хочет. Требует 10.5 sdk.

    Если кто пробует — в tools/build.py добавьте после 108 строчки:
    '-sdk',
    'macosx10.6',

    тогда получится
  • 0
    Презентовали — молодцы. Но с учетом того, что JS занимает 99% рынка, Google придется сильно постараться

    По сути, без нормальной поддержки языка браузером и включения языка в стандарт HTML (), перехода не случится.
  • +4
    Мегаоптимизация прям. Из трех строчек — 30 килобайт.
    cat hello.dart:

    main() {
        print('Hello, Dart!');
    }

    dartc hello.dart --optimize --out hello.js

    Выдаст почти 30 килобайт javascript кода:
    gist.github.com/1275479
    • +4
      Это же постоянные расходы.
      Т.е. и на 50 килобайт вашего кода он выдаст 80 килобайт Javascript (50+30).
      Разумеется, этот пример ненормален.

      А вот основной выигрыш в удобстве разработки и поддержки.
      • 0
        Да, я уже заметил, спасибо. Теперь пытаюсь понять как это все дебажить нормально.
    • +3
      Судя по коду он генерирует сразу всю core library(читайте весь dart в 30 кб). Это ведь не компиляция, а трансляция(!) об этом и написано. Не думаю что там очень сильный анализатор кода, да и нафиг он нужен в трансляторе. В языка ведь даже версии нет еще. И тем более это не значит что 6 строчек будет 60 кб.
      • +1
        Да да, уже понял, что глупость написал :)
  • +1
    Накой оно надо7 Еще одно скриптовое чудо. Лучше бы Go развивали вот уж действительно быстро и для нагруженных проектов.
    • +2
      Я думаю, дело в том, что предназначение отличается. Go не предназначался (и не предназначается) в качестве замены JavaScript, а, скорее, просто как ещё один серверный язык с хорошей поддержкой многопоточности. А Dart — это язык, который призван лишь дополнить JS теми возможностями (в том числе и возможностями для оптимизации), которых там изначально нет, и которые не могут быть легко добавлены в сам JS. Вряд ли кто-нибудь будет предлагать вам писать на Dart на сервере, хотя, возможно, такие люди найдутся)
      • 0
        Dart как раз предлагается как язык и для сервера, и для клиента. И главная его плюшка как раз в том, что он и там и там будет работать, а это многое упрощает в веб-разработке.
        • 0
          Да, в спецификации (и во многих других местах) действительно делается на это акцент… Но, всё же, у Dart и Go сильно отличаются модели работы, причём у Go (для сервера) мне она нравится намного больше, чем сильно-однопоточный Dart
          • 0
            Ну они же хотят убить двух зайцев одной лопатой. В результате понятное дело что на сервере будет не все, что возможно было бы сделать если бы не требовалась совместимость с клиентом.
  • 0
    судя по синтаксису, Google уже ничего кроме java создать не может.
    • +1
      Вы слишком сильно обобщаете. Там работают тысячи программистов с разными взглядами и разными проектами. К тому же у Гугла есть Closure — функциональный ЯП.
      • 0
        Closure — это Lisp, портированный на, кто бы подумал, джаву.
        • 0
          java !== jvm
          • 0
            я к тому, что Closure — это не язык, созданный гуглом. это уже существующий язык, переложенный на их VM.
    • 0
      Ну дак. Это смесь scala и javascript
  • +1
    Javascript, страдающего от «фундаментальных» изъянов, которые невозможно исправить путём эволюционного развития.

    Маркетинг такой маркетинг. Нечего там исправлять, и ООП там нормальное, и всё что хочешь. Зачем из всего делать Java?
  • –1
    Первый и второй вывод (Производительность и Удобство разработки) противоречат друг другу:
    — не будут иметь тех проблем с производительностью
    — не требующая компиляции природа

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.