Dart для всего веба

Original author: Lars Bak & Kasper Lund
  • Translation


От переводчика: 2 дня назад создатели языка Dart представили обновлённую стратегию развития языка в отношении веба, которая породила противоречивые дискуссии на популярных ресурсах (reddit, google plus). Вот текст этого анонса.

Мы сотрудничаем со множеством команд внутри и вне Google, которые ежедневно используют Dart для создания критически важных бизнес-приложений. Их отзывы совпадают: им нравится работать с Dart, его библиотеками и инструментами, а также они компилируют его в JS во время развёртывания веб приложений. Однако клиенты хотят лучшей интеграции с JS, а также более простой способ отладки и оптимизации приложений во всех современных браузерах. Мы выслушали все пожелания и сегодня представляем более сфокусированную стратегию Dart для веба.

Для улучшения положения наших пользователей и всего веба, а не только Google Chrome, мы фокусируем наши усилия на компиляции Dart в JavaScript. Мы приняли решение не интегрировать виртуальную машину Dart в Chrome. Новая стратегия ведёт нас к предоставлению возможностей для более продуктивного создания веб-приложений на языке Dart. Для пользователей она также упрощает сценарии процесса разработки, так как они смогут сфокусироваться на единственном способе создания, тестирования и развёртывания их Dart-приложений для веба.

Google Ads, один из самых крупных клиентов Dart, уверены в языке и поддерживают эту новую стратегию. Скотт Сильвер, вице-президент по разработке Ads, сказал, «Мы стремимся к созданию наших веб-приложений следующего поколения на языке Dart. То, что мы решили сконцентрироваться на генерации оптимального JS-кода, помогает нам предоставлять отличные приложения всем тем, кто пользуется современными браузерами. Dart значительно увеличил продуктивность наших разработчиков и возможности по быстрому запуску и итерациях проектов. Сейчас у нас 1 миллион строк Dart-кода и их количество быстро растёт». Множество Google-команд, таких как Google Fiber, Google Express, и внутренний отдел продаж Google используют Dart для критически важных бизнес-приложений.

Dart-разработчики вне Google также поддерживают нашу новую стратегию. Когда команде DGLogik, разработчикам приложений для Интернета вещей, потребовалось конвертировать их сложное приложение для визуализации с Flash на HTML5, они выбрали Dart, потому что «внимание команды Dart направлено на все аспекты веб и гарантирует, что мы будем продолжать предоставлять отличные впечатления всем нашим пользователям.» Dennis Khvostionov (прим. пер. не знаю как правильно перевести), CTO компании DGLogik, продолжает, «Без бонусов продуктивности и инструментария Dart нам бы понадобилась команда в 2 раза больше».

Множество разработчиков используют Dart как на клиенте, так и на сервере, тем самым уменьшают время разработки, используя код повторно. Мы остаёмся преданы идее оптимизации и улучшения виртуальной машины для инструментов разработчика, серверов и мобильных приложений.

Мы начали проект Dart, потому что верим, что каждый разработчик заслуживает простоты, продуктивности и производительности разработки. Новая стратегия для веба упрощает создание приложений «с» и «для» современного веба вместе с Dart. Вместе с постоянной верой Google Ads в язык Dart, и нашей новой стратегией для веба, мы смело шагаем в будущее.

— Ларс Бак и Каспер Лунд, создатели языка Dart

P.S. Это мой первый перевод. Прошу писать в личку обо всех недочётах. Буду активно исправлять.
P.P.S. Выражаю благодарность пользователям SLY_G, alizar и lany за рецензирование статьи.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 41

    +1
    НЕ ВЕРЮ!
      +3
      То они AtScript создают и тут же бросают, то Angular на TypeScript переписывают, то с Dart сдувают пыль…
        +4
        AtScript — это всего лишь подмножество TypeScript. После принятия Microsoft предложенных правок Google больше не понадобилось использовать AtScript.

        Dart особо и не пылился никогда. Каждые 2 месяца — релиз.
          0
          Наоборот, AtScript — надмножество Typescript.
        +29
        Статья в одно предложение:
        Мы приняли решение не интегрировать виртуальную машину Dart в Chrome.
          +11
          «Dart не нужен»
            +1
            Мне не понятно одно — если AtScript удалось вмержить в typescript, почему то, что не хватает в TS, а есть в dart также не добавить в TS и все? Зачем еще один язык, тем более транслируемый?
              +1
              Нужно начать с того, что AtScript планировался как надмножество TypeScript и появился, естественно, позже него. Dart же появился раньше TypeScript и это 2 полноценных языка, которые развивались параллельно. Я не понимаю что вы собрались мёрджить.
                +9
                Если вы посмотрите на Dart, то обнаружите, что он не только добавляет, но и убирает.

                Семантически Dart достаточно отличается от JavaScript объектной моделью. Вместо концепции «любой объект это словарь с прототипом», в Dart обычные классы с фиксированной структурой. В JavaScript вы читаете свойство, которого нет, и получаете undefined, в Dart вы получаете исключение. В JS вы складываете null + 1 получаете 1 (или undefined + 1 получаете NaN), в Dart вы получаете опять же исключение (и нет никакого undefined). Иными словами то «что не хватает в TS, а есть в dart также» — это в некотром смысле отрицательная величина, потому что Dart упрощает семантику и убирает те части JS, которые скажем так мешают вам поймать ошибку в коде как можно раньше.

                Конечно же, Dart не только убирает, но и довавляет. Например, в Dart можно переопределить операторы + или допустим [], или каждый класс может иметь метод noSuchMethod, который позволяет динамически регировать на вызов несуществующих методов и менять поведение объекта (можно, например, легко написать proxy объект на основе этого метода).

                Плюс Dart это не только язык, это еще и платформа с библиотеками спроектированными так, чтобы хорошо работать с его семантикой. В TypeScript библиотек вообще нет, люди просто .d.ts декларациями к тому, что есть в JavaScript.
                  0
                  Да, это интересно. Спасибо за развернутый ответ, надо будет посмотреть на dart внимательней. А все эти вещи выполняются в рантайме? Вопрос следует из слухов о огромном рантайме, который тянет за собой даже helloword.
                    +3
                    Часть этих вещей выполняется во время исполнения, компилятор dart2js выкидывает, что может. Если их не исполнять, то другой язык получается.

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

                    Голому Hello World особо «рантайма» не нужно, там только прибавляется кусочек который (лениво) инстанцирует классы.

                    Основная часть того, что воспринимается как runtime на самом деле в реальных проектах приходит из dart:html. Это библиотека, которая оборачивает DOM и реализует всякие полезные методы, чтобы вы могли писать

                    document.querySelectorAll(".xyz").map((el) => el.value) или el.onClick.listen((e) { /* ... */ })

                    вместо голого JSовго [].slice.call(document.querySelectorAll(".xyz")).map(function (el) { return el.value }) и el.addEventListener("click", function () {}), т.е. в некотором смысле dart:html это такая специально заточеная для Dart jQuery.

                    Компилятор старается выкинуть все что можно, но он же не знает, что там querySelector вернет — поэтому остается всякий потенциально неиспользуемый код. Сравнивать этот «рантайм» нужно, конечно же, не с голым JS, а с размером всех тех либ которые вы будете использовать в своем коде (jQuery там или lodash).
                      0
                      > document.querySelectorAll(".xyz").map((el) => el.value)

                      Собственно, в ES6 именно так и можно писать.
                        +1
                        Скорее «почти так», чем «именно так»: Array.from(document.querySelectorAll(".xyz"), el => el.value), потому что NodeList не является Array и как следствие не «умеет» map.
                          0
                          И что, для этого нужен отдельный язык вроде дарта?
                            0
                            Достаточно странный вопрос, я где-то сказал, что «для этого»? Вменяемые библиотеки (включая работу с DOM) — это просто одно из его достоинств, а отнюдь не причина существования.

                            В таком ключе и я мог бы спросить: а что для этого нужно полифиллить Array.from и вообще компилировать мой код каким-нибудь babel.js? Оказывается да, нужно таки. Потому что ES6 в настоящий момент тоже язык отдельный от того, что поддерживается браузерами.
                0
                Dennis Khvostionov -> Денис Хвостёнов
                  0
                  Я просто заметил, что там удвоенный «n». Может всё-таки Дэнис?
                    0
                    Скорее «Хвостионов». Такая фамилия, в отличие от вашего варианта, в гугле встречается.
                      0
                      «Деннис Хвостёнов» тоже в гугле встречается. Как правильно 100% знает носитель фамилии.
                    –6
                    Мне кажеться, разумным было бы внедрять диалект лисп как транслируемый язык.
                    Я несколько раз представлял себе как было бы круто если когда-то случайно все решили, что в браузерах будет Scheme.

                    github.com/clojure/clojurescript вот тот js-фреймворк который возьмет это за основу а не этот TS будет крут и охеренен.

                    а еще есть вот такая прикольная штука.

                    www.cappuccino-project.org/
                      0
                      Народ JS-то не может освоить, а вы лисп предлагаете:) Лиспов, компилирующихся в JS, хватает, начиная с указанного вами clojure. Выбирайте, пишите на нем, пропагандируйте, пишите статьи, создайте библиотеку уровня хотя бы React.js — глядишь, люди и потянутся.

                      capuccino может и прикольная штука, только я за 5+ лет его существования не то что проектов, ни строчка кода на нем не видел.

                      А чем вам TS не угодил? Нормальное надмножество JS с необязательной утиной типизацией и читабельным кодом на выходе.
                        –2
                        Вообще говоря, связка cljs+core.async+datascript(написанный на cljs client-side datomic)+react(rum, reagent, sablono, тыщи их) наиболее похожа на серебрянную пулю среди всего нынешнего фронтенда.
                          0
                          А есть пример?
                          +3
                          В цитатник. Причем названия технологий можно подставить любые.
                          +1
                          Да просто в js все впорядке со стилем программирования.

                          И все эти надмножества пытаются запихнуть туда идею классического «интерфейсного» так назовем наследования, что в целом порождает на мой взгляд неверного представления о js в целом.

                            0
                            В случае TypeScript это просто желание отловить ошибки как можно раньше + задокументировать код. Сейчас копаюсь в одном приложении, передается куча разных объектов и массивов этих объектов — откуда они взялись, что это за объекты, что в этих объектах должно быть, какие свойства и методы — ни черта не понятно. Были бы типы аннотированы, было бы понятней. JSDoc помогает, но его тоже еще написать надо.
                            +1
                            На CojureScript реализован интерфейс для работы с React.js достаточно популярный. Библиотека называется om.
                              0
                              Угу. Причем люди нормально так потянулись — с подачи Om, например, чуваки из React сделали immutable.js и теперь пропагандируют иммутабельную модель
                            0
                            Мсье знает толк… ;)
                            +1
                            mraleph, Вы не знаете, эта новость как-то связана с Oilpan? Dart не будут интегрировать в стандартной сборке, но другие варианты какие-нибудь останутся (за исключением Dartium)?
                              +1
                              Никак не связанна. Oilpan вообще особо никак не связан был с Dart (хотя и существовали некоторые теоретические предположения о том, что он может облегчить интеграцию Dart и Blink в вопросах GC).

                              Dart не будут интегрировать в стандартной сборке, но другие варианты какие-нибудь останутся (за исключением Dartium)?


                              Не совсем понятен вопрос. Существует всего один Chrome, поэтому не ясно о каких вариантах идет речь.

                              Dartium останется, потому что пока это единственный способ гарантировать быстрый edit-refresh цикл разработки.
                                0
                                Ясно, спасибо. Просто постоянно тиражировалось мнение, что Dart добавят как-только Oilpan будет полностью завершен.

                                Под вторым вопросом я имел в виду — в виде плагина, или еще какой-либо простой путь доустановки Dart-а в уже существующую стандартную установку Chrome. Ладно, время покажет.
                                  0
                                  В виде плагина его не добавишь, потому что PPAPI не дает сделать легковесную тесную интеграцию с DOM.
                                0
                                Вот тут есть статус, но видимо его ещё не обновили: www.chromestatus.com/feature/6682831673622528
                                –13
                                а еще видать прошла мода на CoffeScript раньше то все только о нем и пищали.

                                теперь typescript…

                                таких г… языков клепают много, хорошо что слава кофейного уже на закате. Жаль что ангуляо свернул с правильной дорожки.
                                  +4
                                  Обратная совместимость — она такая, когда ей нужно только пользоваться — она превосходна, а когда самому поддерживать — отвратительна.
                                  Гугл как бы подтвердили, что с JS никто не сможет соперничать, даже они. Грустно.
                                    –3
                                    Представление о гугле как о какой-то монолитной компании весьма условно. Понятно, что Дарт — чья-то частная инициатива. Другие гуглоиды к ней относятся по-разному. Встреченные мной в W3C гуглоиды дарт-инициативу игнорируют, ну или просто ржут над ней.
                                    –1
                                    я правильно понимаю, что Вам грустно от того, что js хороший язык?

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