Оглавление

    Преимущества языка программирования Dart для Flutter

    Dart язык программирования сравнение с JavaScript

    Разработчики из нашего 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. Идеальный кандидат для кроссплатформенной технологии, которая меняет мир разработки.