Содержание статьи
Компания Google давно перестала удивлять революционными новинками, которые прочно закрепляются в нашей жизни. Поисковый монстр ведет активное наступление по всем фронтам: пользователи получают современные и безопасные сервисы, а разработчики программного обеспечения — обкатанные в недрах компании технологии. Одним из таких проектов корпорации добра стал новый язык программирования Dart.
Языковая практика от Google
Компания Google уже не раз выступала в качестве создателя нового языка программирования. Достаточно вспомнить такие проекты, как Noop (экспериментальный язык программирования, специально созданный для выполнения под виртуальной машиной) и Go (полноценно компилируемый многопоточный язык программирования). Оба эти проекта стартанули в 2009 году, и если первый особого фурора не произвел, то второй был подхвачен теплой волной оваций разработчиков со всего мира и начал активно развиваться, находя применение в различных по сложности проектах.
Хакер #163. Лучшие гаджеты для хакера
Впрочем, говоря о разработанных компанией Google языках программирования, мы применяем слово «успех» в несколько особом смысле. Их популярность (следовательно, и успех) нельзя сравнивать с такими «попсовыми» вещами, как C# от Microsoft или Delphi от Embarcadero. Google в основном работает над узкоспециализированными продуктами, в первую очередь предназначенными для решения определенного круга задач. Они не претендуют на универсальность, и первым делом на них обращают внимание профессиональные разработчики, а не новички. Новостные ленты также не спешат баловать подобные технологии лестными эпитетами. Шумиха держится несколько дней, а потом все затихает, как будто ничего и не было.
Слухи о новом языке программирования, ориентированном на разработку веб-приложений, появились еще в конце 2009 года. Это был год, в котором компания представила Go и Noop. Однако тогда карты так и никто не раскрыл, и слухи остались лишь слухами. Затишье продлилось аж до ноября 2010-го, пока в одной из новостных групп компании не засветилось письмо с громким и революционным заголовком: «Будущее JavaScript» (Future of Javascript doc from our internal JavaScript Summit).
Письмо было составлено ведущими разработчиками компании в ходе внутреннего саммита, посвященного развитию клиентских языков для разработки web-приложений. Эти несколько килобайт текста не содержали спецификацию языка и не рассказывали обо всех планируемых возможностях новинки. В нем лишь упоминалось название проекта — Dash (позже его переименовали в Dart) и приводилось краткое описание проблемы, которую можно эффективно решить с помощью разрабатываемого языка.
А какая тут может быть проблема? Набор инструментов для веб-разработчика уже давно сформирован и, в принципе, успешно выполняет свою роль. Для серверной части разработки есть хорошо зарекомендовавшие себя PHP, Python, Java, Ruby, С++, ну а на клиентской стороне позиции прочно держит JavaScript. На всех этих языках написаны миллионы строк хорошо отлаженного кода, и новичок без сильных преимуществ вряд ли сможет стать «своим» в этой тусовке. Мало кому захочется изучать новый язык программирования и решать с его помощью проблемы, с которыми уже успешно справились другие.
Наверно, именно поэтому гугловчане решили не просто изобрести еще один язык программирования для веб-разработки, а создать принципиально новый продукт, способный подсидеть на пьедестале почета JavaScript и вобрать в себя все лучшее от своего предшественника, а также доказать, что он не просто клон, а следующий шаг в эволюции.
По мнению девелоперов компании Google, хорошо зарекомендовавший себя JavaScript (а у него, кстати, даже нет конкурентов) имеет ряд фундаментальных проблем, которые попросту невозможно решить эволюционным путем. Новые «заплатки» могут исправить некоторые изъяны, но проблемы архитектуры полностью убрать не получится.
Устранением недостатков JavaScript и призван заняться Dart, а если быть более точным, то он должен стать его продвинутой заменой. Сильными сторонами новинки должны быть:
- Повышение удобства разработки. Язык JavaScript имеет высокий порог вхождения, и этот порог всячески стараются поднять проекты, подобные CoffeeScript и jQuery. Dart не должен ничего усложнять, наоборот, его задача — по возможности сделать порог ниже (за счет более понятного и лаконичного синтаксиса), а также сохранить нетленные сущности JavaScript — интерпретируемость и простоту освоения.
- Увеличение производительности. Быстродействие — краеугольный камень всех современных технологий. Постоянное повышение требований сулит бесконечную гонку в оптимизации и наращивании мощностей. С момента появления HTML5 и постепенного отказа от технологии Flash стремительно растет объем клиентского кода и всем хочется, чтобы для интерпретации этого добра не требовались значительные ресурсы со стороны пользователя. Виртуальные машины ECMAScript (a-ля JavaScript) имеют ряд узких мест, которые негативно отражаются на общей производительности приложений, поэтому Dart должен предоставить более совершенный вариант.
- Безопасность. Повышение уровня безопасности кода — процесс бесконечный, и Dart должен внести новшества и в эту область, причем наращивание обороны не должно отрицательно сказаться как на простоте разработки, так и на производительности.
- Дружелюбие к редакторам кода и дополнительным инструментам разработчиков.Современные веб-приложения предъявляют новые требования в плане поддержки, отладки и модификации кода. Соответственно, новый язык программирования должен быть спроектирован с учетом этих требований. Он должен прекрасно взаимодействовать с дополнительными инструментами, способными облегчить и без того нелегкий процесс разработки, также он должен быть готов, что продвинутая IDE потребует нормальную поддержку таких вещей, как поиск вызова функций, рефакторинг и так далее.
Несмотря на все плюшки, разработчики компании Google понимают риск идеи, и в том же открытом письме был приведен запасной вариант развития событий. Суть его заключается в параллельной поддержке развития JavaScript (так называемый проект «Harmony»). Таким образом, поисковому гиганту удастся и побыть в роли революционера, и оказать помощь всем тем веб-разработчикам, кто не оценил и не увидел преимуществ Dart’a.
Hello world на Dart’е
С чего начать знакомства с Dart’ом? Правильно, с написания самого простого приложения — Hello World. Реализация этой простенькой программы на Dart’е будет мало чем отличаться от аналогичных вещей, написанных на Java или C#:
main() { // точка входа в приложение
print('Hello, world!'); // вывод на экран текста
}
Более сложные демки (например, чат, проксик и прочее) можно найти в репозитории проекта Dart (goo.gl/DNudD) или на нашем диске. Я не буду разбирать эти примеры построчно в рамках статьи, так как, во-первых, они все снабжены необходимыми комментариями, а во-вторых, ты уже не маленький и в состоянии сам запустить пример.
Прогноз нострадальца
Красивые пресс-релизы сулят нам райские блага: разрабатывать станет проще, приложения станут безопасней, разработчики получат блек-джек со шлюхами, а работодатели будут пищать от быстроты процесса разработки приложений, и все будут счастливы. Однако если посмотреть на то, что сделано сегодня, нетрудно разглядеть ряд достаточно серьезных проблем, которые рано или поздно встанут на пути к всеобщему счастью. Во всяком случае, я, как человек связанный с разработкой под веб, вижу несколько серьезных трудностей, которые обязательно вставят палки в колеса этой звезде смерти.
Аргумент против: Отсутствует сплоченное сообщество разработчиков
Ты скажешь, что сообщество однозначно появится и соберет в своих рядах тысячи фанатов нового режима. Нужно лишь немного подождать — этот процесс требует времени и постоянных релизов новых версий со стороны разработчиков. Да, отчасти ты прав, но не стоит забывать, что обещаниями сообщество сыто не будет. Мало кто решится писать серьезный и полезный код на одном голом энтузиазме. Если Dart не станет достаточно распространенным, то никто не решится написать тот же аналог jQuery. Зачем делать бессмысленную работу, если ей будут пользоваться только такие же фанаты, как и ты?
Итого: На данный момент — весомый минус
Аргумент за: Dart — это не только новый язык, но еще и конвертер для JavaScript
Может быть, я немного сгущаю краски, но мир JavaScript — это не только мощная и продвинутая библиотека jQuery, которая используется в каждом втором проекте. Есть множество других прекрасных библиотек, фреймворков, которые решают тысячи задач. Кто отважится отказаться от их использования и реализовать подобную альтернативу на Dart’е? Сама Google вряд ли сможет предложить готовые альтернативные решения в разумный срок. В итоге мы нарвемся на тот же тормоз мира JavaScript, что и был году эдак в 2005-м. Тогда JS переживал времена тотального застоя, и ни о каких фреймворках и библиотеках вроде jQuery никто и не мечтал. Идеи витали в облаках, но не было реализации.
Возможно, Google предусмотрела этот вариант и кросс-интерпретатор сможет без особого труда «конвертнуть» тонны отлаженного JavaScript-кода в Dart’овский вариант, но будет ли такой результат оправданным? Сможет ли транслируемый код держаться всех канонов природы Dart’а и наследовать основные его принципы: повышенное быстродействие, безопасность, красоту кода и другие вкусняшки? Скорее всего — нет.
Итого: Красиво, но зачем?
Аргумент за: «Это же сделал Гугл!»
Корпорация добра — сильный игрок, но в первую очередь это обычные люди, которым свойственно ошибаться и поворачивать руль на 180 градусов в горячей ситуации. Они уже создавали провальные проекты, от которых потом просто-напросто отказывались. Достаточно вспомнить круто разрекламированные сервисы вроде Wave и Buzz. Гугл вложил кучу средств в их поднятие, но когда там поняли, что тема не стрельнет, — попросту избавились от них (Wave) либо реорганизовали в виде примочек к другим проектам (функционал Buzz перебрался в Google Plus). Это далеко не единственные примеры неудачных проектов суперкомпании.
Итого: Лажануть может каждый 😉
Аргумент за: Plus, Wave и Buzz — проекты для пользователей, а Dart — для разработчиков. Здесь Гугл не лажанет!
Если уж искать аналогию Dart’у как инструменту для разработки, то сразу хочется вспомнить многообещающий Google Web Toolkit (ссылка во врезке). Про этот инструментарий в нашем журнале даже было несколько статей. GWT сулил разработчикам тотально упростить создание веб-приложений масштаба enterprise. Программистам не требовалось париться с тоннами кода на HTML/CSS/JavaScript. По факту весь процесс разработки сводился к написанию кода на языке Java, следуя MVC-паттерну. Все остальные тонкости брал на себя GWT и формировал на стороне клиента правильный JavaScript. В этой части был прорыв, так как клиентский код создавался с расчетом на определенные браузеры. При большом зоопарке бродилок это было весьма актуально, поскольку самостоятельно реализовать код, корректно работающий под всеми популярными бродилками, было крайне проблематично. Однако на этом все преимущества GWT заканчивались. Сильное сообщество пользователей проекта собрать не удалось. Дополнительных модулей (разработанных не силами Google) создано крайне мало. При практическом применении стали обнаруживаться концептуальные проблемы. В результате GWT стал развиваться медленно, и для новых проектов его вряд ли кто решит использовать.
Итого: Отсутствие лажи — величина переменная
Аргумент против: Нет нативной поддержки
Для красивой демонстрации возможностей Dart’а разработчики должны его донести до браузеров пользователей. Если этого не сделать, то программисты не станут писать «крутой» код, поскольку пользователь — существо крайне ленивое и его так просто не заставишь качать дополнительные библиотеки/плагины. К тому же все уже устали жевать вкусную жвачку со вкусом «Для просмотра контента вам требуется обновить плагин Dart». Мы уже проходили это с Flash, приносящим в систему пользователя не только радость, но и кучу проблем.
Получается, что для достижения хотя бы 80% успеха разработчики Dart’а должны обеспечить его нативную поддержку во всех популярных браузерах. Сейчас первую строчку в рейтинге популярности делят между собой Google Chrome и Internet Explorer. Встроить нативную поддержку Dart’а в Chrome — не проблема. Google вольна распоряжаться начинкой своих продуктов по собственному усмотрению. А вот как быть с Internet Explorer, Opera, Safari, FireFox?
Я еще могу предположить, что гигант сможет за небольшой промежуток времени договориться с Mozilla и Opera Software, но Apple с Microsoft будут упираться до последнего, а может, и вовсе откажутся. Второй вариант даже больше вероятен, нежели первый. Ведь буквально спустя полтора месяца после презентации Dart’а разработчики IE отозвались о нем неодобрительно. Свою позицию они объясняют достаточно просто: они верят в развитие и совершенствование старого доброго JavaScript. Революции им не нужны.
Итого: Внедряться будет медленно и неравномерно
Аргумент против: Да это же игла от Гугла!
Даже если предположить, что все опасения и трудности будут преодолены, то продвижение Dart’а упрется в нежелание крупных игроков интернет-рынка отдавать гиганту такую привилегию или, говоря другими словами, принимать правила игры очень влиятельного партнера. Слишком велик риск оказаться в зависимости от могущественной интернет-корпорации. Ведь отдав Google такую привилегию, можно запросто нанести урон развитию смежных технологий (HTML5, CSS3).
Итого: Коммунизм нам не нужен
Аргумент за: Простота и удобство разработки
Звучит круто, но что же такого плохого и «тяжелого» в JavaScript? Dart проповедует классический принцип так называемой классовой парадигмы ООП (class oriented language). Она более проста в понимании, особенно для тех, кто уже имеет опыт работы с языками вроде C#, Delphi, Java. Если разработчик написал не одну тысячу строк на каком-то из этих языков, то войти в мир Dart’а ему будет чрезвычайно просто. С JavaScript все иначе. Этот язык проповедует другую парадигму ООП — прототипную. Да, с ней несколько трудней совладать в начале пути, но, как только скилл получит минимальную дозу опыта, все сразу встанет на свои места и программирование на JS будет казаться стандартным и привычным.
Google видит в этом проблему, но лично я выступаю за, потому что всегда придерживаюсь мнения: для решения каждой задачи нужно выбирать наиболее подходящий инструмент. Вот и к JavaScript нужно относиться как к инструменту, хорошо приспособленному для решения определенного круга задач. И если язык проповедует не религиозные каноны ООП — это не повод изобретать альтернативу. Если уж не нравится стиль JavaScript, то проще создать еще один вариант синтаксического сахара (наподобие CoffeeScript), который привнесет удобство написания и восприятия кода.
Итого: А трудностей-то и не было!
Аргумент за: Дружелюбность к редакторам кода и дополнительным инструментам разработчиков
Перед нами опять сильный аргумент, который можно трактовать по-разному. Сегодня есть немало хороших IDE, ориентированных на JavaScript-разработчиков. Есть как проприетарные (например, WebStorm), так и Open Source решения (например, Aptana studio). Их возможностей более чем достаточно для рефакторинга или поиска вызова функций (тривиальная функция для продвинутого редактора). Во всяком случае, сообществу разработчиков этого достаточно, и они не перестают удивлять новыми и интересными проектами, созданными целиком на JavaScript. Выделять «нативную гибкость» по отношению к средам разработки уж слишком притянутое за уши преимущество. Кто рискнет ради этого убить кучу времени на изучение нового языка?
Итого: Надуманная проблема, надуманное решение
Аргумент за: Высокая производительность
Сейчас эту сильную сторону тяжело проверить на практике, поскольку на данный момент протестировать Dart в реальных боевых условиях нет возможности — пока не существует нативной поддержки со стороны браузеров (исключая специальную сборку Chrome). Однако уже сейчас специалисты в области JavaScript рассуждают на эту тему и заявляют, что вряд ли Dart’у удастся добиться более существенных результатов, чем движку V8 (V8 JavaScript engine). Получается, что и повышенное быстродействие пока остается под большим вопросом.
В итоге все перспективы нового языка на сегодняшний день не имеют аргументированных доказательств. Нет тестов, нет каких-либо сравнительных материалов, нет ничего кроме заявлений, дальнейшая судьба которых неизвестна.
Итого: Круто, но пока это только слова
Быть или не быть?
Дядя Гугл предлагает нам «интересные» идеи и большие перспективы перехода на Dart, но при детальном и скрупулезном осмотре пациента получается, что пока все это не более чем хорошая теория. Сегодня Dart — это просто интересный проект, а не грозный революционный факел. Приведенные аргументы и опровержения — хорошая пища для дальнейших размышлений и оценки перспектив новинки. Поэтому ответом на вопрос «Стоит ли сегодня заморачиваться изучением Dart’а или нет?» будет: думай и решай сам. Я полагаю, что активно бросаться изучать Dart сейчас нет смысла, поскольку язык находится на этапе рождения и дальнейшая его судьба под большим вопросом. Кроме Гугла и его фанатов новой идеей никто не проникся (я сейчас говорю о влиятельных игроках на арене веба), а значит, никакой надежды на счастливое будущее нет и не может быть.
Кто работает на Dart?
Возглавляет группу разработчиков языка Dart достаточно известный программист Ларс Бак (ссылку на его профиль в Wikipedia ищи в соответствующей врезке). Ларс трудится в Google c 2004 года. До проекта Dart он участвовал в разработке браузера Google Chrome. Как правило, все проекты подобного уровня создаются в главных офисах компании (обычно они располагаются на территории США или где-нибудь в Европе). Для Dart’а это правило не работает. Над новым языком трудятся и наши с вами соотечественники (руководит группой разработчиков Павел Фельдман) из Санкт-Петербургского офиса компании Google.
Ресурсы о Dart’е
- официальный сайт проекта Dart;
- русскоязычный проект о Dart’е. На сайте можно ознакомиться с документацией на родном языке, а также узнать последние новости из мира Dart’а;
- профиль Ларса Бака (ведущего разработчика Dart’a) в Wikipedia;
- описание языка Dart в Wikipedia;
- обучающий тур по Dart’у;
- сервис позволяет сравнивать (в плане синтаксиса) язык Dart с JavaScript;
- набор инструментов для веб-разработки от Google;
- последняя версия спецификации языка Dart.