Google работает над (не таким уж) новым языком программирования и платформой для Веба — Dart… Но может быть, это отличная технология, ведущая в никуда?

22 комментария
Google работает над (не таким уж) новым языком программирования и платформой для Веба — Dart… Но может быть, это отличная технология, ведущая в никуда?

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

В апреле этого года я с удовольствием посетил лекцию Криса Баккета, на которой он знакомил аудиторию с новейшей платформой для веб-программирования от Google — Dart. К тому моменту Крис уже успел проработать над Dart около полутора лет, постоянно комментируя этот процесс в своем блоге, а также написал книгу «Dart in Action». В принципе, он является одним из ведущих специалистов по Dart (если не самым авторитетным) из всех, кто не работает в Google.  

Если вы хотите поближе познакомиться с этим языком, настоятельно рекомендую посмотреть видео с этой лекцией, которую вы найдете здесь. Слайды выложены по этой ссылке (с просмотром в браузере Chrome могут возникать проблемы).

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

В целом я был очень впечатлен. Язык программирования Dart кажется мне очень красивым, в нем имеется обширная и хорошо продуманная библиотечная поддержка, а также ряд отличных готовых инструментов. Я с удивлением обнаружил, что язык даже снабжен собственной IDE — Dart Editor. Создается впечатление, что эта интегрированная среда разработки основана на очень минималистской (спасибо!) сборке Eclipse*. 

Язык может работать либо на собственной виртуальной машине, либо кросс-компилироваться (по всей видимости, исключительно эффективно) в JavaScript, который работает во всех современных браузерах.

К сожалению, вот и первая большая закавыка: а что такое «современный браузер»?

Я спросил Криса, и он ответил, что имеет в виду IE9 или выше, а также последние версии Firefox, Chrome, iOS и Opera. Таким образом, язык не будет работать в IE8 и более старых браузерах. Это объясняется тем, что разработчики из Google стремились предоставить пользователям все самые современные функции.

Теперь я понимаю это; я даже склоняюсь к мысли, что так действительно следовало поступить, но приходится признать, что здесь имеется очевидная проблема.

Незадолго до написания этой статьи я покопался в Интернете и попытался выяснить, какие доли на рынке в настоящее время занимают разные браузеры. Наткнулся на интереснейшую диаграмму:


Ого! Получается, 32% пользователей Интернета до сих пор работают с IE 6, 7 или 8**? Это ведь фактически треть от всей аудитории. Ведь ни один здравомыслящий владелец сайта не откажется от целой трети трафика, верно? 

Разумеется, эти показатели отражают усредненную картину, учитывая сотни и даже тысячи сайтов со всего Веба, и могут быть нерепрезентативны для вашего сайта, где распределение трафика по разным браузерам может быть совершенно иным. Итак, давайте уточним ситуацию и познакомимся с данными с сайта Red Gate (по состоянию на 11 апреля 2013 года):
 

Здесь складывается иная картина: старые браузеры в общей сложности дают ничтожные 10% нашего трафика. Отлично! Почему бы просто не отказаться от поддержки этих браузеров?

Нет, так не выйдет, и вот почему…

Суммы, которые мы зарабатываем за счет пользователей, приходящих к нам через старые браузеры, значительно превышают наши затраты на поддержку версий сайта для этих браузеров. Это верно даже для IE 7, чья аудитория на нашем сайте составляет каких-то 1,2%: мы получаем от этих пользователей гораздо больше денег, чем тратим на поддержку их допотопных, барахлящих старых браузеров, которые действительно давно следовало бы заменить. Вывод: процентные показатели в данном случае могут быть обманчивы, и необходимо также учитывать абсолютное количество пользователей.

Конечно, доля старых браузеров устойчиво снижается, но я не думаю, что они так уж скоро сойдут со сцены. Около 11% наших пользователей до сих пор работают с Windows XP, поэтому вряд ли они в скором времени перейдут на IE выше восьмой версии (правда, кто-то из них может переключиться на Chrome или Firefox). По некоторым источникам, доля IE 8 на рынке снижается примерно на 0,5% в месяц, но я отношусь к этой цифре немного скептически. Даже если она не завышена, то придется ждать еще не менее 2 лет, пока количество пользователей IE 8 снизится до коммерчески незначительной величины.  

Похожая ситуация складывается и с операционными системами. Чего стоит тот факт, что Windows XP уже целых 12 лет, но многие пользователи считают, что она «достаточно хороша». Windows 7 потенциально может лишь усугубить эту ситуацию, но, к счастью, Microsoft пошла на решительные шаги и стала продвигать IE 10 через обновления Windows Update. Будем надеяться, что эта стратегия поможет нам своевременно обзаводиться новыми версиями браузеров!

Итак, на настоящий момент мировая экономика по-прежнему испытывает последствия хаоса, спровоцированного финансовым кризисом 2007—2008 года, и в такой ситуации сложно поверить, что многие компании пойдут на потерю 10—20% своих потенциальных посетителей ради даже самой захватывающей клиентской технологии, в данном случае — Dart.
Есть и другая проблема, связанная с потоком задач.

Одна из важнейших черт Dart заключается в том, что он совершенно не зависит от используемых вами серверных технологий. На самом деле, хотя виртуальная машина DartVM доступна для запуска Dart на сервере и вам ничто не мешает воспользоваться этой виртуальной машиной, основной акцент в современной разработке Dart все-таки делается на клиентскую сторону. В частности, это касается создаваемых на Dart одностраничных веб-приложений.

Все это хорошо, но если у вас есть машинный интерфейс, написанный по шаблону MVC, а вы привыкли разрабатывать в Visual Studio как машинный, так и пользовательский интерфейс, то оказываетесь фактически без поддержки. Dart не предоставляет инструментария для работы с Visual Studio, поэтому вам остается просто отказаться от Dart Editor, если вы, конечно, не готовы выстраивать всю интеграцию сами. Работать с Dart тем более неудобно, поскольку он нарушает привычный для вас поток задач. Тем не менее, полагаю, что если Dart продолжит развиваться, эта проблема в долгосрочной перспективе будет решена. 

Итак, до конца года мы все-таки дождались выхода стабильной версии Dart, но решитесь ли вы использовать этот язык в реальных боевых проектах? Да, на этот вопрос можно ответить утвердительно, но только если:

  • вы абсолютно уверены, что в вашем целевом сегменте рынка не используется браузер IE8 или ниже;
  • вы разрабатываете одностраничное приложение (я бы пока не рекомендовал использовать Dart для многостраничных приложений);
  • вы привыкли работать на сервере со строго типизированным языком и желаете воспользоваться сильными сторонами строгой типизации и на клиентской стороне;
  • вас не пугает перспектива серьезного изменения потока задач, а также вам не придется работать с унаследованным машинным интерфейсом***.

Кроме того, я считаю, что язык Dart лучше подходит для новых проектов, чем для уже существующих. Если вы не уверены в каком-либо из вышеперечисленных пунктов, особенно в первом, то, пожалуй, вам пока не следует прибегать к Dart.

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

* ДИСКЛЕЙМЕР: я испытываю пещерную ненависть к Eclipse. Я презираю ее всеми фибрами души. Я скачал Android SDK, поработал с ним около недели, пытаясь написать и развернуть в этой среде приложение для Android. Пришел к выводу, что этот процесс, мягко говоря, убог, как и все мои предыдущие опыты с Eclipse. Уважаемые читатели, обожающие Eclipse, прошу извинить меня за такую резкую оценку. Я остаюсь сторонником таких инструментов, как Visual Studio, WebStorm и IntelliJ, и хотя Eclipse функционально им практически не уступает (а возможно, и превосходит  я не знаю), мне эта IDE кажется совершенно нелогичной.

** Кстати, вы легко найдете источники, в которых приводятся существенно иные данные. Например, в этом посте автор указывает, что IE8 установлен всего у 10% пользователей, и его рыночная доля снижается на 0,5% в месяц.

*** Крис видит здесь отличные перспективы для интеграции с другими технологиями (об этом он говорит в начале своей лекции). Вы гораздо охотнее согласитесь с ним, если привыкли работать с Java/Eclipse, но я бы поспорил с Крисом, так как мой профессиональный опыт в большей степени связан со стеком Microsoft.


Барт Рид

Источник

Хотите сообщить важную новость?

Пишите в наш Телеграм

Читайте также

Google получила иск на $5 млрд за отслеживание пользователей в режиме инкогнито
Google получила иск на $5 млрд за отслеживание пользователей в режиме инкогнито

Google получила иск на $5 млрд за отслеживание пользователей в режиме инкогнито

Google отложила релиз бета-версии Android 11 из-за протестов по США
Google отложила релиз бета-версии Android 11 из-за протестов по США

Google отложила релиз бета-версии Android 11 из-за протестов по США

Разработчики из AIMatter рассказали, чем занимаются в Google
Разработчики из AIMatter рассказали, чем занимаются в Google

Разработчики из AIMatter рассказали, чем занимаются в Google

В августе прошлого года СМИ сообщали: открытый проект Google помогает распознавать язык жестов с помощью смартфона. Сейчас команда готовится представить свой проект на технологической конференции Emerge, которая пройдет 1–3 июня. Накануне выступления разработчики Валентин Базаревский и Иван Грищенко рассказали Dev.by, как далеко зашло распознавание жестов, и может ли их нейросеть отличить жесты человека от жеста робота.
16 комментариев
Вышла Android Studio 4.0
Вышла Android Studio 4.0

Вышла Android Studio 4.0

Обсуждение

Алексей Данченко
Алексей Данченко Инженер-программист в ЛюксСофт
0

Я уж думал, что почитаю техническую статью по Dart, обрадоваться успел :) Зря. Еще и с каким-то графиком непонятным. Он бы хотя бы сюда посмотрел сначала http://en.wikipedia.org/wiki/Usage_share_of_web_browsers

0

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

А дарт не нужен по другой причине: джаваскрипт и так хороший и простой язык, позволяющий решать поставленные задачи.

Игорь Лаврусик
Игорь Лаврусик Software Engineer в Fitbit
-1

Очевидно, что созданный в 1995-1996 году JavaScript, основным назначением которого являлось рисование падающих снежинок и бегущих строк на фиолетовых веб-страничках, ни в коем разе не предназначен чтобы взвалить на себя в 2014 году (да и с первой половины 2000-ых уже не мог) всю сложность современного UI.
Тем, кто написал на JavaScript функциональность для хотябы пары взаимосвязаных страничек, и для тех, кто продвинулся в его использовании дальше window.alert("Hello, World!") ясно, как божий день, что декларируемая простота этого языка - фикция. Нет ничго сложнее на свете, чем разбираться в чужом десятке страниц мешанины ХТМЛ'я и нетепизированого скриптового языка, исправляя проблему, которой ты посвятил прошлую неделю, исправляяе её для IE7, но которая осталась в каком-нибудь Сафари трёхлетней давности.
JavaScript жив исключительно по одной причине: так исторически сложилось, а заменить его, кроме пары костылей, нечем. Менять браузер в том виде, как он есть, на что-то другое уже слишком позно, а разработка нового языка, который бы поддрежали все производители браузеров и который бы обеспечил незаметный для пользователя переход — очень сложная задача. И можно только искренне радоваться, что Google таки взялся проделать эту работу.

6

Dart - это, вроде как, язык программирования. Как следствие, сам по себе он:
1. Не поможет в борьбе со странными браузерами
2. Не поможет организовать современно-крутой UI
3. Не гарантирует, что в кривых руках все будет ок

Чтобы решить эти проблемы, люди придумали пачку инструментов и стопку методик. И, опять же, не надо путать трудности, порождаемые зоопарком браузеров и несовершенством DOM API, и косяки самого языка.

Лично я вижу как сегодня JS (в некоторой степени) повторяет путь PHP. Слишком много людей решили, что раз они уже умеют запускать снег на сайте, то и сделать крутой UI на JS они сумеют.

Прошла эпоха супер-CMS на PHP. Настала пора мега-юзер-интерфейсов на JS. Авторы те же. Вот только Dart им не поможет.

alex-kirkouski
alex-kirkouski Разнорабочий в ЛюксСофт
0

То есть то что JS такой же "фрактал плохого дизайна", как и PHP, вы признаете :) ?

1

Я бы сказал, что проблема JS в том, что в нем достаточно много неочевидных тонкостей (прототипы, this, лексическая область видимости и т.п.) И, как следствие, в эти тонкости нужно вникнуть, иначе будет трудно. Можно ли назвать это плохим дизайном? Не знаю.

А у PHP какая-то своя атмосфера. Смесь из старых фич, новых веяний-метаний и загадочных возможностей (зачастую, весьма сомнительных). Зато он развивается :)

Игорь Лаврусик
Игорь Лаврусик Software Engineer в Fitbit
1

1) А я думаю - поможет. На заре создания HTML+Javascript среди фундаментальных постулатов этих "технологий" был и такой: "показать страницу любой ценой" и "выполнить скрипт любой ценой". А свобода, как известно, развращает. Не показывайся страничка из-за не закрытого тега — 100% страничек в интернете были бы оформлены по одному и тому-же стандарту, соответсоввать которому для любого браузера было бы вопросом выживания.
2) Поможет. Понятие "компонент", хорошо знакомое всем программистам, кроме программистов на JavaScript, вполне способно открыть новые горизонты. Хотя соглашусь, что новый язык - это необходимое, но не достаточное условие.
3) Этого не гарантирует никто. Зато попробовать минимизировать проблемы язык может, но JavaScript не делает даже робкой попытки этого делать.

1

1) Оно то да, все могло бы быть лучше. Но на сегодняшний день мы имеем что имеем и разработчики подстраиваются под браузеры (точнее, под пользователей), а не наоборот. Что должно произойти, чтобы люди сказали: "Мы хотим только браузеры с поддержкой Dart и точка. Заберите свои IE"?

2) Ну на JS есть AMD (http://en.wikipedia.org/wiki/Asynchronous_module_definition). Помогает. Плюс ко всему появление и развитие node.js благотворно влияет на экосистему (какое пафосное слово :)) JS в целом.

3) Не, нy есть же надежда: ECMAScript 5, JavaScript 2.0... Опять же, все упирается в браузеры.

amok
amok Team Lead в Ergalio
0

А html+CSS в качестве средства описания интерфейсов не смущает? ;)

Игорь Лаврусик
Игорь Лаврусик Software Engineer в Fitbit
95

Конечно, смущает. Но вы может знаете что предложить взамен? :) По-моему, удобоваримый язык, поддерживающий разделение на модули и наконец-то позволяющий делать то, что в среде нормальных языков программирования принято называть "компонентами" — не та ли это искра, из который разгориться пламя войны с этим беспределом прграммирования сложного UI?

amok
amok Team Lead в Ergalio
0

xaml )
Вообще у "сообщества" скорее всего не получится сделать что-то удобное, слишком уж долго договариваются. Только если какой-нибудь вендор возглавит разработку.

Игорь Лаврусик
Игорь Лаврусик Software Engineer в Fitbit
2

xaml и похожие костыли (типа GWT+UiBinder) не решают основной проблемы: от этого в браузере не появляется компонентная модель построения интерфейса, а он так и продолжает оперировать разметкой областей страницы и текста.
А по поводу вендора у меня для вас хорошая новость: статья о том, что Google, разрабатыявая Dart, как раз и претендует на роль такого вендора.

amok
amok Team Lead в Ergalio
0

Это да, хотелось бы нормальной объектой модели с типизацией, наследованием, событиями и прочей красотой...

0

есть одно но, ХТМЛ это в большей степени верстка информации нежели апп из компонентов. в целом согласен на 101%.

а JS тут ни при чем, язык конечно анархичный, но при правильном подходе вполне себя оправдывает. node.js не случаен :)

0

ПС: некоторые люди пытаются бороться с кривизной средствами которые есть на данный момент. лень искать линк, был (или все еще есть проект) зебкит или зебра где все на хтмл канвасе малюется.

0

Имхо, тут еще есть проблема в том, что HTML - декларативен. А тот же JS - императивен. На почве этого разрыва возникают дополнительные трудности.

Для борьбы с этой несправедливостью был придуман knockout.js. Ну и AngularJS вдогонку.

3

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

вопросы как мне кажется немного в другом, почему если есть CSS то желательна подпорка в виде SASS, если есть JS то желательны костыли в виде CoffeeScript, почему если есть ДОМ то без жкверей почти невозможно с ним работать. и вообще кто все эти старые пердуны пишущие новые веб спеки, они что только что от перфокарт оторвались. кто, для кого и каким местом дизайнил цээсэс. итд.

а ЖС тут ни при делах, ЖС настолько гибок, что хоть с ООП хоть с функциональным подходом можно сделать весьма красиво чему ест масса примеров.

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

длинный это и филосовский разговор, может я просто не толерантный :)

0

Я когда говорил о "разрыве между JS и HTML", я ж их не сравнивал. Я говорил о проблемах в интеграции. Суть в том, что неудобно работать с декларативно описанным интерфейсом средствами императивного языка.

Если по-русски. При "классическом" подходе получается: нарисовали DOM-дерево, навешали обработчиков событий, у себя в JS-скрипте контроллируем всю эту бадягу, не забывая вовремя обновлять DOM (элементики прятать-добавлять и т.д.)

А прослойки из семейства knockout.js берут, и автомагически следят за тем, чтобы состояние модели в JS соответствовало состоянию DOM-дерева. То есть завели мы в JS модели свойство "кнопка видна", связали его, скажем, с вот-этим-вот div-ом и все. Дергаем туда-сюда свойство, пропадает-появляется кнопка. Сама. Вот, например, для примера пример: http://knockoutjs.com/examples/contactsEditor.html

Кстати, а кто такая "мэфси интерпретация"? А то я, наверное, зелен слишком и не застал этой штуки.

А в целом согласен. Даже мой красочно расписанный пример про knockout, всего лишь описание очередной прослойки. Но лично я склонен винить во всем проклятых буржуев с их безумным желанием поддерживать древние браузеры.

Да, и по поводу Dart. Есть же CofeeScript, TypeScript. Зачем еще и Dart? Надеюсь, не из-за "фатального недостатка"?

amok
amok Team Lead в Ergalio
8

Это вот, кстати, интересно. Сгородить на js библиотеку UI компонентов не так сложно. Компоненту дают контекст, где рисоваться и он подписывается на нужные ему события. Если канвас умеет рассылать сообщения типа Draw, key, mouse с координатами, то какой-то менеджер будет их распихивать.
Правда, чтобы оно не моргало дико, нужно чтобы канвас умел очень быстро отрисовываться, поддерживал double buffering, invalidate rect и прочие радости.

0

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

сообщений типа драв у канваса нет: что нарисовал, то сам за собой и убирай :)

amok
amok Team Lead в Ergalio
0

Ну, убрать то не сложно. Другой вопрос, что динамичный UI без событий особо не сделаешь...

0

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

Спасибо! 

Получать рассылки dev.by про белорусское ИТ

Что-то пошло не так. Попробуйте позже