Примечание: присоединяйтесь к русскоязычному сообществу Dart в Telegram, Slack и Google+. А в конце статьи вас ждёт небольшой анонс.
Возрождение Dart как популярного языка программирования для мобильной и веб-разработки
Сегодня мы объявляем о релизе стабильной версии языка программирования Dart — 2.0, а также веб-платформы Dart, которая предлагает уникальное сочетание продуктивности, производительности и масштабируемости.
Разработчики Flutter пользуются многими возможностями Dart 2, так как Flutter уже несколько месяцев использует предварительные версии Dart 2 SDK. Тем не менее, выпуск стабильной версии Dart 2 является еще одним важным этапом на пути к релизу Flutter из-за жесткой связи между фреймворком и языком. Если вы еще не установили Flutter, вы можете попробовать его прямо сейчас.
С релизом Dart 2 теперь и веб-разработчики также могут использовать эту версию языка, все библиотеки и инструменты получат ряд улучшений, специфичных для Web. Всю необходимую информацию по установке и созданию первого приложения можно найти здесь.
Dart: рост популярности
Dart 2 является важной вехой на пути возрождения Дарта как популярного языка программирования, ориентированного на быструю и удобную разработку мобильных и веб-приложений. Мы хотим, чтобы разработчики, создающие клиентские приложения, были продуктивными: с языком, фреймворком и компонентами, которые уменьшают шаблонный код и позволяют им сосредоточиться на бизнес-логике, а также инструментами, которые на ранних этапах идентифицируют ошибки, помогают в отладке и генерируют компактный и быстрый код.
Мы наблюдаем резкий рост популярности Dart за последний год. Наша собственная аналитика показывает десятикратный рост внешнего использования. В последнем квартале Dart был одним из самых быстрорастущих языков в GitHub, измеренным по pull request; рост вопросов на StackOverflow также демонстрирует положительный тренд в популярности Dart:
Для Google Dart является одним из немногих языков, которые мы используем для разработки веб-приложений с миллионами строк кода из множества различных проектов, включая Google Ads, Google Shopping и наших собственных проектов для внутренней инфраструктуры.
Фактически, вы уже могли использовать Dart, не осознавая этого: популярный препроцессор стилей Sass был недавно переписан на Dart, чтобы сделать его более быстрым, более портативным и более простым для разработки. Sass теперь распространяется как автономный исполняемый файл на Homebrew и Chocolatey и скомпилирован для JavaScript на npm. Dart упрощает установку приложений в любом месте без внешних зависимостей, а также для развертывания рабочих процессов как у пользователей, пишущих на Dart, так и у пользователей, которые этого не делают.
Dart 2 фокусируется на трёх аспектах: усиление и ужесточение языка, развитие нашей поддержки веб-и мобильных платформ и создание инструментов и компонентов, которые поддерживают использование Google Dart для внешнего мира. В остальной части этой статьи будут рассмотрены эти три темы.
Dart 2: язык, оптимизированный для клиентской разработки
Как мы рассказывали в Феврале (русскоязычная версия) система типов Dart является явной. Это означает, что перед тем, как пользователи запустят ваше приложение, оно пройдёт стадию анализа и компиляции, во время которых зачастую и обнаруживается большой класс проблем. Когда мы масштабировали Dart до чрезвычайно больших приложений в Google, система типов обнаружила много ошибок ещё на раннем этапе разработки, что привело к созданию более качественного кода.
С Dart 2 вы не можете попасть в состояние, в котором выражение выполняется со значением, не соответствующим статическому типу этого выражения. Это означает, что вы можете масштабировать свою кодовую базу до миллионов строк, рефакторить крупные проекты и развертывать свой код на продакшен, будучи уверенными в нём.
Не беспокойтесь: явность не означает горы ненужного кода. Система типов включает в себя расширенный вывод — даже для аргументов generic типа.
final _field = [3.14, 6.28];
void main() {
// Типы не указаны, но тип <int> будет выведен
print([1, 2, 3].runtimeType); // List<int>
// Если типы не указаны, будет использован их общий базовый тип
// int (1) и double (3.14) оба являются типом `num`
print([1, 3.14].runtimeType); // List<num>
// Вывод типов работает не только на переменных
print(_field.runtimeType); // List<double>
}
Узнать больше о системе типов Dart 2 можно на этой странице.
Как упоминалось в предыдущих постах в блоге, Dart 2 также уменьшает языковой шум в нескольких ключевых областях: например, ключевое слово new теперь является необязательным, а ключевое слово const необязательно в соответствующем контексте.
Наконец, мы проделали много закулисной работы, чтобы унифицировать различные вспомогательные инструменты, которые теперь объединены общим фронтендом, который поддерживает наши компиляторы и среды исполнения. Это обеспечивает консистентность для наших пользователей и обещает улучшить скорость и качество новых функций, поскольку Dart продолжает развиваться.
Dart 2 в Web: богатый, мощный фреймворк
Веб-приложения с самого начала занимали центральное место в миссии Дарта. Фактически, большинство разработок Dart в Google предназначено для веб-приложений. Одной из самых больших является Google Ads, которая обеспечивает миллиарды долларов интернет-экономики. В процессе переноса кода на Dart они уменьшили размер кодовой базы UI на 40%, одновременно повышая производительность и качество приложений.
В то время как основной Dart SDK предоставляет библиотеки для доступа к современным API-интерфейсам браузера, мы также поддерживаем надежный, основанный на Angular, фреймворк для построения сложных веб-приложений. AngularDart 5, поставляемый как часть Dart 2, использует преимущества явной системы типов Dart и новую систему сборки (описанную ниже), чтобы пользователь мог использовать быстрые инкрементальные сборки во время разработки и более компактный скомпилированный JavaScript.
Одним из основных направлений в этой версии стало уменьшение количества кода, который обрабатывается при загрузке страницы, что значительно сокращает «время до интерактивности» для веб-страниц. Во многих приложениях размер кода уменьшился более чем наполовину по сравнению с AngularDart 4.
Чтобы продемонстрировать улучшения в веб-платформе Дарта, мы создали клиентскую реализацию на основе Dart для сайта HackerNews в качестве прогрессивного веб-приложения; он публикуется вместе с другими примерами на популярном сайте HNPWA. Используя лучшие практики для создания веб-приложений на Dart, мы смогли создать полнофункциональное приложение, которое полностью интерактивно за одну секунду на современных устройствах и до пяти секунд на скромном мобильном устройстве в медленной сети 3G. Это конкурентоспособно даже при сравнении с облегченными веб-фреймворками, оптимизированными для небольших приложений.
Наши инвестиции в инфраструктуру также распространяются и на нашу библиотеку компонентов, которую мы также обновили. Теперь у вас есть доступ к 100 новым классам, включая различные Material компоненты. Вы можете изучить все наши компоненты в галерее компонентов.
Material Date Picker — один из компонентов, доступных для вашего веб-приложения
Инструментарий для Dart 2
Вместе с Dart 2, Dart становится первоклассным компилируемым-в-JavaScript языком, с циклом разработки, который ожидают веб-разработчики, и отличными характеристиками производительности во время исполнения. Это достигается благодаря преимуществам, которые большинство языков, ориентированных на JS, не обеспечивают: явную систему типов и отличную поддержку для нативных мобильных приложений.
С Dart 2 наши веб-инструменты охватывают 100% -ную модель разработки JavaScript с двумя дополнительными компиляторами JavaScript. Компилятор разработки, dartdevc, обеспечивает быструю инкрементальную компиляцию при генерации JavaScript, который легко читается и отлаживается. Это позволяет нашему компилятору dart2js сосредоточиться на создании высоко оптимизированного JavaScript для прогрессивных веб-приложений для мобильных и сложных корпоративных приложений для рабочего стола. Оба компилятора используют явную систему типов Dart для оптимизации их вывода.
Наши веб-инструменты основаны на новой системе сборки, созданной для того, чтобы быть быстрой, отлаживаемой и расширяемой. Теперь такие задачи, как генерация кода для сериализации, компиляция Sass в CSS и компиляция Dart в JavaScript, происходят в одной инструментальной цепочке, которая поддерживает быстрые, инкрементальные обновления по мере изменения частей вашего приложения. Система сборки также предназначена для поддержки использования за пределами Web. Пример: она используется разработчиками Flutter для генерации кода для сериализации в JSON.
Вместе с Dart 2 у нас появился расширенный набор инструментов для разработчиков. Помимо поддержки Android Studio и инструментов JetBrains, включая IntelliJ IDEA и WebStorm, мы также поддерживаем Visual Studio Code с расширением Dart Code. И у нас также есть площадка для экспериментов: DartPad, которая была полностью обновлена для Dart 2.
Наконец, Dart SDK поставляется с набором других полезных инструментов: диспетчер пакетов, который работает с нашим сайтом, статический анализатор, linter, который вы можете использовать из командной строки или в виде пакета, а также инструментарий для веб-документации и форматирования, соответствующего стандартам языка Dart.
Узнать больше
Ознакомьтесь с инструкциями по началу работы с Flutter и набором инструментов Web Dart.
В примечаниях к релизу содержится подробная техническая информация о многих других небольших улучшениях, сделанных после Dart 1, некоторые из которых являются критичными. Если вы столкнулись с проблемами, которые не может решить поиск Google, рекомендуем начать с StackOverflow. Подпишитесь на рассылку Dart Announcements и следите за нами в Twitter, чтобы получать обновления. Мы также хотели бы видеть вас в наших сообществах, например, в Gitter и реддите r/dartlang.
Спасибо
Дарт стал языком общего назначения, который оптимизирован для разработки в Web и на мобильных устройствах. Мы работаем над Dart 2 уже в течение нескольких лет, за это время он затрагивал все аспекты нашей экосистемы и требовал миграции миллионов строк кода и сотен пакетов.
Мы благодарны сообществам Dart и Flutter, а также сотням инженеров Google, которые помогли нам в этом путешествии. Мы не смогли бы сделать это без вас!
От сообщества
Хотелось бы поздравить команду разработчиков Dart с таким важным событием, это действительно крупная веха для развития языка. Конечно, многие слова из этой статьи могут показаться вам весьма дискусионными, обсудить их можно как в комментариях, так и в наших чатах Telegram, Slack и Google+.
И обещанный анонс: помимо небольших митапов мы проводим ежегодные большие события, посвященные языку, инструментам, Flutter, AngularDart и всему, что с ними связано. В прошлом году у нас были в гостях инженеры из Google, мы сварили специальное пиво, и вообще было весело. В этом году мы постараемся сделать ещё лучше! Поэтому бронируйте конец ноября — начало декабря, и следите за анонсами.
Автор: Евгений Кот