Преимущества языка программирования Dart для Flutter
Разработчики из нашего Flutter-отдела вышли из мобильной разработки, где господствуют Kotlin и Swift. Это очень «сахарные» языки: лаконичные, красивые, с элегантными конструкциями. Переход от них к Dart вызывает боль, ведь он очень похож на JavaScript с динамической типизацией, и Kotlin кажется удобнее для разработки.
Но фреймворк для кроссплатформенной разработки Flutter использует Dart, и в этом есть немало преимуществ. Если вы планируете перейти на Flutter, вам стоит знать плюсы языка Dart.
Почему Flutter работает именно с Dart языком, а не с JavaScript или Kotlin? Ответ — в архитектуре и задачах платформы. В этой статье рассказываем о том, почему Flutter написан именно на этом языке и как это помогает ускорить разработку приложений и веб-сервисов.
Dart до появления Flutter
Язык Dart существует уже давно: согласно Википедии, его разрабатывают с 2011 года. Изначально его планировали создать для замены JavaScript от Google. Dart имел динамическую типизацию, был очень похож на JS и… на нём никто не писал, кроме Wrike — долгое время они были единственной компанией, использующей этот язык.
Для многих Dart остаётся незнакомым, но именно он обеспечивает высокую скорость и стабильность приложений на кроссплатформенном фреймворке Flutter.
Dart vs JavaScript: что выбрать для мобильной разработки и какой язык мог бы использовать Flutter
Давайте немного поразмышляем: какой язык программирования мог бы использоваться для Flutter вместо Dart? На ум приходят несколько кандидатов, потому что они довольно популярны и полезны:
- Kotlin. Знакомый язык и де-факто стандарт для Android-разработчиков. Куча сахара и красота, буквально идеальный язык. Продукт JetBrains. Компилируемый.
- JavaScript. Обеспечил бы поток веб-экспертов во Flutter. Негативно воспринимается многими мобильщиками. Интерпретируемый.
- Swift. Проприетарный язык Apple — кажется, вряд ли он подойдёт фреймворку от Google. Компилируемый.
- TypeScript. По сути это обертка над JS от Microsoft. Строгая типизация, но те же минусы, что у JS.
Если рассматривать Dart vs JavaScript, то Dart выигрывает по производительности и компиляции в нативный код. А Dart vs JS — это сравнение строгости и предсказуемости синтаксиса против гибкости и широкой поддержки. По нашему мнению, среди альтернатив можно выделить язык программирования Kotlin. Но у него нет тех свойств, что смогли бы обеспечить:
- Подгрузку кода в приложение на лету в режиме отладки.
- Синтаксис, понятный для людей с любых платформ.
- Быстрый сборщик мусора.
- Принадлежность к Google.
- Открытость кода и общение с командой напрямую.
Пройдёмся по этим пунктам подробнее.
Dart язык программирования: особенности и преимущества
Dart язык программирования был создан Google как универсальный инструмент для клиентской разработки. Он появился задолго до Флаттер. Dart задумывался как замена JavaScript с исправлением его изъянов.
Создатели стремились выпустить язык для веб-программирования, который будет структурированным и одновременно гибким. Другой важной задачей было обеспечить высокую производительность программ и систем в браузерах и других средах, включая смартфоны и серверы.
Dart был представлен в 2011 году. Первая версия вышла в 2013 году, а вторая — в 2019.
Компиляция и выполнение кода на Dart
В целом методы компиляции можно разделить на три типа.
Компиляция в промежуточный код. Основана на концепции виртуальной машины (VM), которая представляет собой продвинутый интерпретатор, эмулирующий аппаратное обеспечение внутри программного обеспечения. Виртуальная машина упрощает портирование языка для новых аппаратных платформ.
В таком случае язык ввода для VM зачастую представляет собой промежуточный код. Например, код на языке программирования (скажем, на Java) компилируется в промежуточный код (байт-код Java), а затем исполняется на VM (JVM).
Just-in-time (JIT) компиляция. JIT-компиляторы используют метод компиляции во время работы программы, «на лету». Они существенно ускоряют цикл разработки, но программа может притормаживать и выполняться медленнее.
С JIT-компилятором она запускается медленнее, потому что перед выполнением кода программе нужно одновременно успеть проанализировать и скомпилировать его. Согласно исследованиям Google, многие пользователи скорее всего откажутся пользоваться приложением, если на его запуск уходит больше пары секунд.
Ahead-of-time (AOT) компиляция. AOT-компиляторы замедляют цикл разработки — промежуток времени, через который можно выполнить программу после внесения в неё изменений.
Но в результате AOT-компиляции разработчик получает программу, которая работает более предсказуемо, без перерывов на анализ и компиляцию в рантайме. Ещё такие программы запускаются быстрее, потому что они уже скомпилированы.
Казалось бы, при чём здесь Dart, язык программирования? Его разработчики провели грандиозную работу над продвинутыми компиляторами и виртуальными машинами: движком V8 для JavaScript и Strongtalk для Smalltalk — для интерпретируемых языков, компилятором Hotspot для Java — для компилируемых языков. На основе полученного опыта они постарались сделать Dart-программирование гибким с точки зрения методов компиляции и выполнения.
В итоге язык Dart отлично подходит как для AOT-, так и для JIT-компиляции. Поддержка обоих методов компиляции даёт значительное преимущество языку Dart и кроссплатформе Flutter.
К JIT-компиляции обращаются при разработке и используют самый быстрый компилятор. Затем, когда приложение готово к выпуску, используют AOT-компиляцию. В результате, благодаря продвинутым инструментам и компиляторам, Dart берёт лучшее от двух миров: чрезвычайно быстрый цикл разработки, быстрое выполнение и запуск.
На этом гибкость языка Dart с точки зрения компиляции и выполнения не ограничивается. Dart можно компилировать в JavaScript, если нужно выполнить программу в браузере. В итоге получается переиспользовать код для мобильного приложения в web и наоборот.
Некоторым разработчикам удаётся переиспользовать 70% кода в мобильных и веб-приложениях. Также Dart можно применять для разработки серверных приложений: для этого потребуется скомпилировать его в нативный код или в JavaScript и использовать с Node.js.
И, наконец, для Dart существует отдельная виртуальная машина — DartVM, которая использует язык Dart в качестве промежуточного, по сути выступая в роли интерпретатора.
Dart можно компилировать методами AOT или JIT, интерпретировать или компилировать в другие языки. Это даёт разработчику мега-фичу под названием Hot Reload.
С ней можно практически мгновенно и без потери состояния подгрузить код в приложение в режиме отладки. Это невероятно ускоряет процесс разработки и позволяет избежать нудной пересборки приложения для просмотра каждого изменения. А в релизе программа получит высокую производительность благодаря AOT-компиляции.
Сбор мусора
Hot Reload — крутая фича, но её используют только разработчики в дебаг-режиме. В чём тогда выгода Dart для уже готового приложения? Ведь конечная цель языка программирования Dart— удобство для пользователей.
Здесь вступает в игру другое полезное свойство языка — его сборщик мусора. Да, самим сборщиком сейчас мало кого удивишь. Но здесь есть свои особенности, благодаря которым Flutter обеспечивает быструю работу и производительность в среднем 60 FPS.
Это даёт разработчикам возможность создавать крутые мобильные приложения с быстрым и отзывчивым пользовательским интерфейсом и секси-анимациями. Отчасти именно поэтому Flutter стал кроссплатформой, которая смогла завоевать доверие разработчиков.
Давайте вспомним, как работает Flutter: всё в нём — виджеты. А виджеты — это по сути объекты. Их много, и они пересоздаются с огромной скоростью при каждом изменении кода. Поэтому здесь нужен не просто сборщик мусора, а суперсборщик мусора.
В Dart используется продвинутая схема сбора мусора и выделение памяти на основе поколений объектов. Она особенно быстро выделяет память для большого количества объектов с коротким жизненным циклом. Это идеально для реактивных пользовательских интерфейсов вроде Flutter, где неизменяемое дерево виджетов пересобирается для каждого кадра.
Благодаря такому сборщику Flutter приятен для разработки пользовательских интерфейсов в декларативном стиле. Мы используем конструкторы, создавая объекты, и описываем с их помощью вёрстку. Причём сами виджеты достаточно легковесны (это тоже важно) и представляют собой лишь информацию для отрисовки. Самой отрисовкой занимаются уже другие слои.
Понятный синтаксис
Да, переход с Kotlin на Dart был болью. Но самое интересное в другом: хотя разработчикам не хватает «сахара» в Dart, любой новичок начинает писать на этом языке практически сразу. Наш опыт показывает, что члены команды могут писать на Dart и работать с Flutter уже через пару недель, если они перешли из другого стека, и через три–четыре недели, если они совсем новички. Причём освоение синтаксиса занимало всего несколько дней.
Dart прост и максимально близок любому разработчику, знакомому с Java/C#/JavaScript. У него хорошая и читаемая документация, а также подробный тур по языку. Благодаря этому можно научиться писать на Flutter достаточно быстро.
Ну и конечно в синтаксис Dart привносит изменения сам Flutter. Несколько фич в языке появились именно благодаря фреймворку и коммуникации команд Dart и Flutter — все они работают внутри Google.
Dart — это Google
Собственно, это не последняя причина. Работать со своим языком лучше, чем использовать продукт другой компании. Как минимум из-за того, что имеется больше влияния на его развитие.
Открытый код
Dart — это open-source-язык. Он популярен как внутри Google, так и за его пределами. В Google его используют для Ads, Flutter, Fuchsia и других проектов — сейчас он среди наиболее быстро развивающихся языков. За пределами компании в репозиторий Dart вкладывается более 100 сторонних разработчиков.
Немалую роль в этой популярности сыграл сам Flutter. Но открытость кода даёт разработчикам возможность общаться с командой Dart напрямую, видеть его развитие и фичи, которые в нём планируются.
Заключение
Если вам интересен современный, безопасный и производительный язык Dart — стоит обратить внимание на его применение во Flutter. Мы перечислили преимущества языка Dart на основании своих наблюдений. Истину знают только в Google.
Язык программирования Dart позволяет Flutter быть именно таким, какой он есть — отличным фреймворком для создания высокопроизводительных кроссплатформенных приложений.
В Dart сложились вместе все факторы: он вполне современный и обладает всеми необходимыми свойствами, прост в освоении, принадлежит Google. Идеальный кандидат для кроссплатформенной технологии, которая меняет мир разработки.