Официальная презентация языка 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, какие возможно.
    Метки:
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

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

                      Интересно что dart преполагают повышенную по сравнению с JavaScript производительность, хотя пока не очень то понятно откуда она возьмется (типизация?). Разрабочикам V8 может конечно и видней, подождем тестов каких-нибудь.
                      • НЛО прилетело и опубликовало эту надпись здесь
                      • +2
                        А мужики-то не знают!
                  • +13
                    ждём jquery на dart
                  • –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.
                          • +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
                                            Первый и второй вывод (Производительность и Удобство разработки) противоречат друг другу:
                                            — не будут иметь тех проблем с производительностью
                                            — не требующая компиляции природа

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