Официальная презентация языка 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, какие возможно.
    Support the author
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 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
                  • UFO just landed and posted this here
                      +6
                      Фигасе новости. О_о
                        +1
                        Ну я подумал что немного утрирования тут не помешает :) Тем ни менее GWT с похожим и поначалу многообещающем подходом трансляции кода в JavaScript мейнстримом так и не стал. Посмотрим как сложатся дела у дарта.

                        Интересно что dart преполагают повышенную по сравнению с JavaScript производительность, хотя пока не очень то понятно откуда она возьмется (типизация?). Разрабочикам V8 может конечно и видней, подождем тестов каких-нибудь.
                        • UFO just landed and posted this here
                          +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
                                                  Первый и второй вывод (Производительность и Удобство разработки) противоречат друг другу:
                                                  — не будут иметь тех проблем с производительностью
                                                  — не требующая компиляции природа

                                                  Only users with full accounts can post comments. Log in, please.