В свое время мы уже рассказывали о преимуществах Flutter. Это фреймворк, который позволяет с легкостью создавать кроссплатформенные мобильные приложения, которые хорошо выглядят и почти не уступают по быстродействию нативной разработке.
Но сегодня мы хотели бы поговорить о Dart — языке программирования, который делает Flutter таким, каким он есть. Кратко и без воды расскажем об особенностях и преимуществах Dart, поделимся опытом работы и полезными для джунов материалами.
Технически Dart появился в 2011 году в дебрях Google. В те времена СМИ любили писать, что Google намерена «убить» JavaScript, да и сами разработчики Dart любили говорить на презентациях о «фундаментальных недостатках» JS.
Что ж, убить JavaScript не получилось, но сегодня Dart позиционируется как универсальный client-side-язык, который может как работать как с собственной виртуальной машиной на нативных платформах, так и компилироваться в JS.
Это очень удобный язык для мира, где параллельно существует множество платформ: десктоп, мобайл, веб. Веб-разработчики могут легко ее изучить и повторно использовать большую часть кода под разные системы — Android, IOS и MacOS, Windows, Ubuntu.
Сегодня о Dart говорят и как о языке для IoT-устройств, и как о языке для бэкенда, хотя там и без него высока конкуренция.
Мы говорим о типизированном C-образном языке программирования, а значит, синтаксис Dart очень похож на JS. Но при этом система типов у Dart не слишком разветвленная и сначала может показаться «бедной».
На самом деле Dart входит в относительно редкую категорию soundness-языков: речь идет здесь не о звуках, а о приоритете здравого смысла в работе с типами, то есть отсутствии внутренних противоречий. К примеру, если у вас есть переменная типа int
, то она гарантированно будет оставаться с типом int
. Это существенное отличие от JS, где типы можно приводить друг к другу.
На официальном сайте Dart эту модель называют sound type system, и приводят следующие преимущества:
Отдельно можем выделить также реализуемый в Dart null-safety: переменная не может быть нулем, если только разработчик собственными руками не определил обратное.
Dart воспринимается интуитивно и не нуждается в такой разветвленной системе типов, которая есть, например, в TypeScript. Можно воспринимать это как предохранитель, мешающий вам выстрелить себе в ногу 🙂
Dart может работать нативно через собственную виртуальную машину DartVM, которая хорошо сочетает преимущества компиляции JIT (Just in time) и AOT (Ahead of time).
JIT — это компиляция кода на лету, тогда как AOT — это работа на опережение с уже скомпилированным кодом.
При разработке на Flutter Dart предоставляет характерную для JIT опцию hot reload, что ускоряет всю работу и помогает отлавливать баги. Но при развертывании продукта он также предоставляет возможности AOT-компиляции (например, под ARM или x64), чтобы конечный продукт был стабильным и работал быстро. При этом Flutter предоставляет в скомпилированный код определенный рантайм, чтобы обеспечить сбор мусора и избежать проблем с типами.
В то же время Dart может с легкостью интерпретироваться и в JavaScript, то есть превращаться в код, который можно открыть в любом браузере. Компиляция под веб происходит по пайплайнам V8 или любому другому движущему устройству.
Такая гибкость в компиляции делает Dart очень универсальным, код с мобайла можно с минимальными изменениями переносить в интернет, и наоборот. Создаваемые таким образом проекты легко поддерживать. При этом скомпилированный у Dart код остается достаточно резвым, лишь немного уступая в нативном быстродействии.
К чему должен быть готов разработчик, изучающий Dart или мигрирующий на него? Какие здесь подводные камни? Ничего критического, но о некоторых вещах нужно сказать.
Flutter — это единственный большой фреймворк на Dart, и это проблема. Каким бы удобным и мощным ни был Flutter, это всего один инструмент, и его мало. Dart-комьюнити могло бы развиваться гораздо быстрее, если бы у Flutter появились приспешники и конкуренты, но пока их не видно (если не учитывать Angular Dart, который, к сожалению, не выстрелил).
Экосистема Flutter развивается быстро, но за быстрый рост силами малой команды приходится платить багами.
Это немаловажная особенность, чем недостаток, но Dart — номинально однопоточная речь. Многопоточные языки в теории позволяют использовать ресурсы железа гораздо эффективнее, но требуют от разработчиков мастерства. Одновременные языки просты и лаконичны, что играет на пользу в циклах разработки.
На самом деле у Dart есть возможности работы с многопоточностью через модель изолятов. Если говорить в двух словах, это облегченные потоки, обладающие обособленной памятью и связанные между собой только в ограниченном формате. Нельзя сказать, что изоляты — это совсем редкая практика, но большинство проектов на Flutter сегодня обходятся без них. Вам ведь не нужны чудеса быстродействия в приложении для заказа пиццы.
Вы скажете, что это ключевое преимущество Dart, и будете правы. Но множество платформ, на которые ориентируется Flutter, диктуют разработчикам дополнительные требования: им придется получить базовые представления о принципах и особенностях этих платформ. Это самая большая сложность, с которой при переходе на Flutter сталкиваются веб-разработчики.
Итак, вы решили изучить Dart/Flutter, нужно ли вам быстро овладеть его. С чего начать:
Flutter стал для нас ключевым инструментом разработки кроссплатформенных мобильных приложений — мы ценим его гибкость, доступность и технологичность.
Стремительное распространение Flutter работает на комьюнити и стимулирует развитие Dart. Поэтому мы верим, что проектов на нем будет становиться все больше — и не только в мобайле, но и в интернете. Уверены: в дальнейшем он может заполучить себе место и в бэкенде, и на десктопных системах.
В благословенные офисные времена, когда не было большой войны и коронавируса, люди гораздо больше общались…
Вот две истории из собственного опыта, с тех пор, когда только начинал делать свою карьеру…
«Ты же программист». За свою жизнь я много раз слышал эту фразу. От всех. Кто…
Отличные новости! Если вы пропустили, GitHub Copilot — это уже не отдельный продукт, а набор…
Несколько месяцев назад мы с командой Promodo (агентство инвестировало в продукт более $100 000) запустили…
Пару дней назад прочитал сообщение о том, что хорошие курсы могут стать альтернативой классическому образованию.…