Если вы, как и многие, думали, что Dart мертв в качестве замены JavaScript, вам, возможно, придется подумать еще раз. Бета-версия Dart 2-это сюрприз, но еще большим сюрпризом является Flutter — фреймворк на основе Dart для создания приложений для iOS и Android.
Настоящий вопрос заключается в том, почему Google беспокоит?
Слишком легко сказать, что Dart был неудачной попыткой ввести язык замены в браузеры, и это вторая попытка Google, но это не так. Dart был представлен в 2011 году как лучший JavaScript. Намерение состояло в том, что в отличие от других замен JavaScript Dart не будет скомпилирован в JavaScript. Вместо этого в конечном итоге браузеры будут поддерживать его напрямую. В 2012 году была выпущена специальная версия Chrome под управлением Dart, но вскоре стало ясно, что Microsoft и Mozilla не намерены добавлять виртуальную машину Dart в свои браузеры. Необходимость компиляции Dart в JavaScript сделала его менее привлекательным предложением, и вскоре он стал миноритарным интересом. Добавьте к этому такие события, как asm.js и веб-сборка, и возможность использования практически любого языка, который вы хотите назвать с помощью компилятора, и случай с Dart становится еще слабее.
В 2015 году команда Dart объявила, что любые планы по включению его в будущую версию Chrome были отменены, и вместо этого она сосредоточится на создании лучшего компилятора. Казалось, на этом история закончилась. или, по крайней мере, начало конца.
Теперь, в 2018 году, мы объявили о бета-версии Dart 2, и это возвращает нас к первоначальному вопросу: зачем беспокоиться?
Первое, что нужно сказать, это то, что Dart 2 теперь строго типизирован по умолчанию. Вы больше не можете отказаться от проверки типов. Следует сказать, что Dart-довольно скучный, обычный, основанный на классах, иерархически типизированный язык в той же форме, что и Java или C#. У него есть несколько небольших дополнений, которые делают его немного более интересным, чем предполагает это описание. Во-первых, как и в JavaScript, функции являются объектами, и это означает, что вы можете передавать их и назначать переменным. Он также поддерживает набор современных функций программирования — дженерики, закрытие, фьючерсы (обещания), асинхронность и ожидание, генераторы и так далее. Вероятно, вы могли бы лучше всего описать Dart как результат использования современного JavaScript — скажем, ES2015 — и добавления к нему истинной системы иерархических типов.
Хотя вы можете использовать любой веб-фреймворк, естественное сопряжение Dart и Angular в AngularDart кажется лучшим выбором. Обратите внимание, однако, что Angular отказался как от Dart, так и от JavaScript и выбрал альтернативный строго типизированный язык в виде машинописного текста Microsoft.
Будущее Dart как языка веб-разработки выглядит не намного лучше с Dart 2, чем с более ранними версиями, но, похоже, это не то, о чем идет речь. Вместо этого кажется, что у Dart 2 есть шанс в мире мобильных приложений. Flutter, который также сейчас находится в бета-версии, использует Dart 2 в качестве своего языка и может создавать приложения для iOS и Android.
Идея заключается в том, что вы пишете свою программу в Dart, используя пользовательский интерфейс Flutter, и она будет работать только на Android или iOS. Обратите внимание, что вы не используете собственные компоненты пользовательского интерфейса. Существует набор базовых виджетов, набор, стилизованный под Android, и набор, стилизованный под iOS. Виджеты являются единственным компонентом пользовательского интерфейса, и виджет может определить:
структурный элемент (например, кнопка или меню)
стилистический элемент (например, шрифт или цветовая схема)
аспект макета (например, заполнение)
и так далее…
Так как же все это работает?
Простой ответ заключается в том, что существует движок C++, который берет ваш код Dart и запускает его под управлением Android или iOS. Ключ-это Skia, графическая система Google C++, которая используется в Chrome и других приложениях Google, чтобы позволить Chrome работать в различных операционных системах. Skia предоставляет единый графический API, который изолирует приложение от различий в реальном графическом API, под которым работает приложение. Skia также является открытым исходным кодом. Среда выполнения C++ также предоставляет приложению единый доступ к базовым аппаратным средствам.
В этот момент вы, возможно, думаете, что все это здорово, но обратите внимание, что это просто переосмысление таких систем, как Cordoba. Кордова берет программу, написанную на JavaScript с пользовательским интерфейсом, созданным с использованием HTML, и запускает ее на мобильной платформе с помощью пакета времени выполнения. В этом случае пакет среды выполнения представляет собой модифицированный веб-браузер, но это та же общая идея.
Так что же дает вам Флаттер над такими системами, как Кордова?
Есть много возможных преимуществ. Во-первых, Skia-это графический движок общего назначения, и библиотека виджетов Flutter, скорее всего, будет более легкой, чем HTML. Также обратите внимание, что в настоящее время, по крайней мере, нет языка разметки, связанного с Flutter. Все делается в коде — метод, который мне очень нравится, но только с помощью редактора макетов, который генерирует указанный код. На данный момент вы можете использовать Android Studio, IntelliJ и VS Code, ни в одном из которых нет редактора макетов. Конечно, вам понадобится XCode, если вы планируете выпустить приложение для iOS.
Таким образом, Google просто упростил написание приложений, которые работают на Android и iOS. Я совсем не уверен, в чем выгода для Google, или даже не уверен, в чем выгода для Dart. Язык, предназначенный для замены JavaScript, теперь играет совершенно другую роль в качестве языка Flutter. Если это не сработает, я думаю, что Флаттер может последовать за угловым и принять другой язык.
Одно из возможных объяснений всего этого заключается в том, что Google посвятил слишком много своего внутреннего кода Dart и действительно нуждается в его более эффективном использовании и поддержке, чтобы избежать страха, что его кодовая база будет написана на устаревшем языке.
Следует ли использовать Flutter для разработки приложений?
Не раньше, чем он выйдет из бета-версии.