Компания Google давно перестала удивлять революционными новинками, прочно закрепляющимися в нашей жизни. WEB-сервисы, разработанные интернет гигантом, пользуются колоссальным успехом и имеют врожденный иммунитет к постоянным изменениям трендов в области юзабилити и инноваций. Поисковый монстр ведет активное наступление по всем фронтам: пользователи получают современные и безопасные сервисы, а разработчики программного обеспечения - обкатанные в недрах компании технологии. Одним из таких последних проектов корпорации добра стал новый язык программирования Dart.
Языковая практика от Google
Компания Google уже не раз выступала в качестве создателя нового языка программирования. Достаточно вспомнить такие проекты как Noop (экспериментальный язык программирования, специальной созданный для выполнения под виртуальной машиной) и Go (полноценно компилируемый, многопоточный язык программирования). Оба эти проекта стартанули в 2009 году и если первый особого фурора не произвел, то второй был подхвачен теплой волной оваций разработчиков со всего мира и начал активно развиваться, находя применение в различных по сложности проектах.
Особое значение следует придать слову «успех» говоря о разработанных компанией Google языках программирования. Их популярность (следовательно, и успех) нельзя сравнивать с такими «попсовыми» вещами как C# от Microsoft или Delphi от Embarcadero. Google в основном работает над узкоспециализированными продуктами в первую очередь предназначенные для решения определенного круга задач. Они не претендуют на универсальность и первым делом на них обращают внимание профессиональные разработчики, а не новички. Новостные ленты также не спешат баловать подобные технологии лестными словами. Шумиха держится несколько дней, а потом все затихает, как будто ничего и не было.
Слухи о новом языке программирования, ориентированном на разработку web-приложений, берут свое начало еще с конца 2009 года. Как раз того года, в котором компания представила Go и Noop. Однако тогда карты так и никто не раскрыл, и слухи остались лишь слухами. Затишье продлилось аж до ноября 2010, пока в одной из новостных групп компании не засветилось письмо с громким и революционным заголовком: «Будущее JavaScript» (Future of Javascript doc from our internal JavaScript Summit).
Письмо было составлено ведущими разработчиками компании в ходе внутреннего саммита, посвященного развитию клиентских языков для разработки web-приложений. Эти несколько килобайт текста не содержали спецификацию языка и не рассказывали обо всех планируемых возможностях новинки. В нем лишь упоминалось название проекта – Dash (позже его переименовали в Dart) и краткое описание проблемы, которую можно эффективно решить с помощью разрабатываемого языка.
А какая тут может быть проблема? Набор инструментов для web-разработчика уже давно сформирован и в принципе успешно выполняет свою роль. Для серверной части разработки есть хорошо зарекомендовавшие себя PHP, Python, Java, Ruby, С++, ну а на клиентской стороне позиции прочно держит JavaScript. На всех этих языках написаны миллионы строк хорошо отлаженного кода и новичок в этой тусовке без сильных преимуществ вряд ли сможет стать «своим». Мало кому захочется изучать новый язык программирования и решать с его помощью проблемы, которые успешно победили другие.
Наверно именно поэтому гугловчане решили изобрести не просто еще один язык программирования для Web-разработки, а создать принципиально новый продукт, способный подсидеть на пьедестале почета JavaScript и вобрать в себя все лучше от своего предшественника, а также доказать, что он не просто клон, а следующий шаг в эволюции.
По мнению девелоперов компании Google хорошо зарекомендовавший себя временем JavaScript (а у него, кстати, даже нет конкурентов) имеет ряд фундаментальных проблем, которые попросту невозможно решить эволюционным путем. Новые «заплатки» могут исправить некоторые изъяны, но проблемы архитектуры полностью убрать не получится.
Решением недостатков JavaScript и должен заняться Dart, а если быть более точным, то он должен стать продвинутой заменой. Сильными сторонами новинки должны стать:
- Повышение удобства разработки. Язык JavaScript имеет широкий порог вхождения, и этот порог всячески стараются расширять проекты подобные CoffeScript, JQuery. Dart не должен ничего усложнять, а наоборот, по возможности сделать порог проще (за счет более понятного и лаконичного синтаксиса), а также сохранить нетленные и хорошо зарекомендовавшие сущности JavaScript: интерпретируемость, простота освоения.
- Увеличение производительности. Быстродействие – одна из главных проблем всех современных технологий. Постоянное повышение требований сулит бесконечную гонку в оптимизации и наращивания мощностей. С момента появления html5 и постепенного отказа от технологии Flash происходит стремительный рост объема клиентского кода и всем хочется, чтобы для интерпретации этого добра не требовались значительные ресурсы со стороны пользователя. Виртуальные машины EcmaScript (аля JavaScript) имеют ряд «узких» мест, которые негативно отражаются на общей производительности приложений, поэтому Dart должен предоставить более совершенный вариант.
- Безопасность. Повышение уровня безопасности кода – процесс бесконечный и Dart должен внести новшества и в эту область, причем наращивание обороны не должно отрицательно сказаться как на простоте разработки, так и на производительности.
- Дружелюбным к редакторам кода и дополнительным инструментам разработчиков. Современные web-приложения предъявляют новые требования в плане поддержки, отладки и модификации кода. Соответственно новый язык программирования должен быть спроектирован с учетом этих требований. Он должен прекрасно взаимодействовать с дополнительными инструментами, способные облегчить и без того нелегкий процесс разработки, а также быть готовым, что продвинутая IDE будет требовать нормальную поддержку таких вещей как: поиск вызова функций, рефакторинг и т.д.
Несмотря на все плюшки, разработчики компании Google понимают риск идеи, и в том же открытом письме был приведен запасной вариант развития событий. Суть его заключается в параллельной поддержке развития JavaScript, так называемый проект «Harmony». Таким образом, поисковому гиганту удастся побыть и в роли революционера, и оказать помощь всем web-разработчикам, кто не оценил и не увидел преимуществ Dart’a.
Hello world на Dart’е
С чего начать знакомства с Dart’ом? Правильно, с написания самого простого приложения – Hello World. Реализация этой простенькой программы на Dart будет мало, чем отличаться от аналогичных вещей, написанных на Java, C#:
main() { //точка входа в приложение print('Hello, world!'); //вывод на экран текста }
Ok, с пониманием примера проблем возникнуть не должно. Более сложные демки (например, чат, проксик и т.д.) можно найти в репозитории проекта Dart – https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/samples/ или с нашего DVD диска. Я не буду разбирать эти примеры построчно в рамках статьи, т.к. во-первых, они все снабжены необходимым комментариями, а во-вторых, ты уже не маленький и в состоянии сам запустить пример.
Прогноз нострадальца
Красивые пресс-релизы сулят нам райские блага: разрабатывать станет проще, приложения станут безопасней, разработчики получат блэк джек с шлюхами, а работодатели будут пищать от быстроты процесса разработки приложений и все будут счастливы. Реально хороший прогноз, но, как и все революции вероятней всего, ИМХО, его постигнет фиаско. Либо на строительство «рая» потребуется чертовски много времени, которое тратить просто так никто не захочет. Ведь действительно, если отбросить все заоблачные радужные перспективы, а посмотреть на то, что сделано сегодня, то не трудно разглядеть ряд достаточно серьезных проблем, которые рано или поздно встанут тяжело преодолимым рвом на пути к счастью. Во всяком случае, я, как человек связанный с разработкой под WEB вижу несколько серьезных трудностей, которые обязательно вставят палки в колеса звезде смерти. Вот хотя бы некоторые из них:
1. Отсутствие большего и сплоченного сообщества разработчиков. Ты скажешь, что сообщество однозначно появится и соберет в своих рядах тысячи фанатов нового режима. Нужно лишь немного подождать, т.к. этот процесс требует времени и постоянных релизов новых версий со стороны разработчиков. Да, отчасти ты прав, но не стоит забывать, что обещаниями сообщество сыто не будет. Мало кто решится писать серьезный и полезный код на одном голом энтузиазме. Если Dart не получит распространенность, то никто не решится написать тот же аналог jQuery. Зачем делать бессмысленную работу, если ей будут пользоваться только такие же фанаты, как и ты?
Хорошо, может я, немного сгущаю краски, но мир JavaScript – это не только мощная и продвинута библиотека jQuery, которая используется в каждом втором проекте. Есть множество других прекрасных библиотек, фреймворков, которые решают тысячи задач. Кто решится отказаться от их использования и реализовать подобную альтернативу на Dart’е? Сам Google вряд ли сможет предложить готовые альтернативные решения в разумный срок. В итоге мы нарвемся на тот же тормоз мира JavaScript, что и был году эдак в 2005. Тогда JS переживал времена тотального застоя, и ни о каких фреймворках и библиотеках, вроде jQuery никто и не мечтал. Идеи витали в облаках, но не было реализации.
Возможно, Google предусмотрела этот вариант и кросс интерпретатор сможет без особого труда «конвернуть» тонны отлаженного JavaScript кода в Dart’овский вариант, но будет ли такой результат оправданным? Сможет ли транслируемый код следовать всем каноном природы Dart’а и наследовать основные его принципы: повышенное быстродействие, безопасность, красоту кода и другие вкусняшки? Скорей всего нет, т.к. подобные трюки подвластны лишь Д.Копперфильду и не стоит забывать, что и его фантастические возможности это не более, чем иллюзия.
«Но это ведь Google! Они способны на такой амбициозный проект и однозначно доведут дело до конца!» - еще более сердитым тоном возразишь ты. Корпорация добра – сильный игрок, но в первую это обычные люди, которым свойственно допускать ошибки и поворачивать руль на 360 градусов в случае возникновения горячей ситуации. Они уже создавали провальные проекты, от которых потом просто-напросто отказывались. Достаточно вспомнить круто разрекламированные сервисы вроде: Wave и Buzz. Они вложили кучу средств в их поднятие, но когда поняли, что тема не стрельнет - попросту избавились от них (wave) либо реорганизовали в виде примочек к другим проектам (функционал buzz перебрался в google plus). Это далеко не единственные примеры неудачных проектов супер компании.
Если уж проводить аналогию с Dart’ом (как с инструментом для разработки), то сразу хочется вспомнить много обещающий Google Web Toolkit (ссылка во врезке). Про этот инструментарий в нашем журнале даже было несколько статей. GWT сулил разработчикам тотальное упрощение процесса создания web-приложений масштаба enterprise. Программистам не требовалось париться с тоннами кода на html/css/JavaScript. По факту весь процесс разработки сводился к написанию кода на языке Java, следуя MVC паттерну. Все остальные тонкости брал на себя ядро GWT и формировал на стороне клиента правильный JavaScript. В этой части был прорыв, т.к. клиентский код создавался с с расчетом на определенные браузеры. При большом зоопарке бродилок это было весьма актуально, т.к. самостоятельно реализовать код, корректно работающий под всеми популярными бродилками, было крайне проблематично.
Однако на этом все преимущества GWT по факту заканчивались. Сильное сообщество пользователей проекта собрать не удалось. Дополнительных модулей (разработанных не силами Google) разработано крайне мало. При практическом применении стали обнаруживаться концептуальные проблемы. Время в грубой форме заявило о новых тендерах разработки. В результате GWT стал медленно развиваться и для новых проектов его вряд ли кто решит использовать.
2. Отсутствие нативной поддержки. Для красивой демонстрации возможностей 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 без проведения революций. Списать со счетов этих игроков просто так нельзя. Они занимают слишком весомую долю рынка и как бы ни того не хотелось с ними нужно считаться.
3. Борьба с наигранными проблемами. Об этом мало кто задумывается во время презентаций и красноречивых пресс-релизов, но эйфория рано или поздно проходит и начинается процесс осознания и размышлений. Презентация Dart’а не стала исключением, и сначала наблюдалось массовое пускание слюней, нежели здравое мышление и оценка сказанному. Внимательно присмотревшись к проблемам, которые пытается решить Google с помощью нового языка звучат весьма туманно. Не буду голословным, а приведу реальные примеры:
- Простота и удобство разработки. Звучит круто, но что, же такого плохого и «тяжелого» в JavaScript? Dart проповедует классический принцип так называемой классовой парадигмы ООП (class oriented language). Она более проста в понимании, особенно для тех, кто уже имеет опыт работы с языками вроде C#, Delphi, Java. Если разработчик написал ни одну тысячу строк на одном из выше приведенных языков, то войти в мир Dart’а ему будет чрезвычайно просто.
С вхождением в мир JavaScript все несколько иначе. Этот язык проповедует другую парадигму ООП – прототипную. Да, с ней несколько трудней совладать в начале пути, но как только скил получит минимальную дозу опыта все сразу встанет на свои места и будет казаться стандартным и привычным.
Google видит в этом проблему, но лично я выступаю «за», т.к. всегда придерживаюсь мнения: «для решения каждой задачи нужно выбирать наиболее подходящий инструмент». Вот и к JavaScript нужно относиться как к инструменту, хорошо подходящему для определенного круга задач. И если язык проповедует не те религиозные каноны ООП – это не повод изобретать альтернативу. Если уж не нравится стиль JavaScript, то проще создать еще один вариант синтаксического сахара (наподобие CoffeScript), который привнесет удобство написания и восприятия кода.
- Дружелюбным к редакторам кода и дополнительным инструментам разработчиков. Перед нами опять сильный аргумент, который можно трактовать по-разному. Сегодня хороших IDE, ориентированных на JavaScript разработчиков не мало. Есть как проприетарные (например, WebStorm), так и OpenSource решения (например, Aptana studio). Их возможностей более, чем достаточно для рефакторинга или поиска вызова функций (тривиальная функция для продвинутого редактора). Во всяком случае, сообществу разработчиков этого достаточно и они не перестают удивлять новыми и интересными проектами, созданными целиком на JavaScript. Выделять «нативную гибкость» по отношению к средам разработки уж слишком притянутое за уши преимущество. Кто рискнет ради это убить кучу времени на изучение нового языка?
- Производительность. Сейчас эту сильную сторону вообще тяжело проверить на практике, т.к. протестировать Dart в реально боевых условиях на данный момент нет возможности - пока не существует нативной поддержки со стороны браузеров (исключая специальную сборку Chrome). Однако уже сейчас специалисты в области JavaScript рассуждают на эту тему и заявляют, что вряд ли Dart’у удастся добиться более существенных результатов, чем движку V8 (V8 JavaScript engine). Получается, что и вопрос повышенного быстродействия пока остается под большим вопросом.
В итоге все перспективы нового языка на сегодняшний день не имеют аргументированных доказательств. Нет тестов, нет каких-либо сравнительных материалов, нет ничего кроме заявлений, дальнейшая судьба которых неизвестна.
4. Googlовская зависимость. Я специально решил оставить эту причину возможной неудачи Dart напоследок. Даже если предположить, что все опасения и трудности будут преодолены, то продвижение Dart’а упрется в нежелание крупных игроков интернет-рынка отдавать гиганту такую привилегию или говоря другими словами принимать правила игры очень влиятельного партнера. Слишком велик риск оказаться в зависимости могущественной интернет-корпорации. Ведь отдав Google такую привилегию можно запросто нанести урон по развитию смежных технологий (HTML5, CSS3).
Быть или не быть
Если ты дошел до этого абзаца, то тебя наверняка мучает дилемма: «Стоит ли сегодня заморачиваться изучением Dart’а или нет?». Конечное решение должен принять ты сам, но на мой взгляд, активно бросаться за изучение Dart’а сейчас нет смысла, т.к. язык находится на этапе рождения и дальнейшая его судьба находится под большим вопросом. Посуди сам. Нативная поддержка отсутствует, следовательно, ощутить уже имеющиеся плюсы Dart’а прямо сейчас не удастся. Довольствоваться работой транслятора, конвертирующего Dart-код в JavaScript удовольствие также сомнительное. Спецификация языка в стадии совершенствования и доработки. Поэтому новая версия может принести несовместимость, из-за которой придется перелопачивать код. Получается, что объективных причин для немедленного изучения гугловской новинки попросту нет и не появится в ближайшем будущем.
Вместо заключения
Компания Google пытается провернуть на web-арене очередную революцию и ей остается пожелать только удачи. Можно по-разному относиться к Dart’у, но однозначно одно – он однозначно принесет определенную порцию новшеств. Даже если ему не удастся полностью заменить JavaScript, знания, полученные в ходе его разработки, наверняка удастся перенести в мир JS. А быть может, эти знания выльются в еще один абсолютно новый язык программирования. Нам же остается только наблюдать и успевать делать для себя выводы. Помни, идеального языка программирования нет, и не может быть. Dart – просто очередная революция и шаг вперед, который через n-е количества лет подвергнется не менее жесткой критике.
Игорь Антонов aka Spider_NET, vr-online.ru
email: antonov.igor.khv@gmail.com
Ресурсы о Dart’е
http://goo.gl/xm9qK - официальный сайт проекта Dart;
http://goo.gl/LKtMW - русскоязычный проект о Dart. На сайте можно ознакомиться с документацией на родном языке, а также узнать последние новости из мира Dart.
http://goo.gl/y3CvR - профиль Ларса Барка (ведущего разработчика Dart’a) в Wikipedia;
http://goo.gl/0pyFH - описание языка Dart на Wikipedia;
http://www.dartlang.org/docs/language-tour/ - обучающий тур по Dart;
http://goo.gl/T49aK - сервис позволяет сравнивать (в плане синтаксиса) язык Dart с JavaScript;
http://code.google.com/webtoolkit/ - набор инструментов для web-разработки от Google;
http://goo.gl/LtAm7 - последняя версия спецификации языка Dart;
Горячие темы