Dart — язык программирования, который создали для использования в веб-разработке. Идея его создания — постепенно заменить популярный язык JavaScript: Dart позиционируется как решение, лишенное ключевых недостатков JS.
Что такое Dart
Dart считается языком общего назначения, но его создатели ориентировали его в первую очередь на фронтенд: создание интерфейсов и взаимодействие с браузером. А собственная платформа Dart VM призвана заменить Node.js — инструмент, с помощью которого пишут код на JavaScript для серверной части.
Это высокоуровневый язык: он оперирует абстрактными понятиями, далекими от «железа», но близкими к человеку. Поэтому код на Dart лаконичный и понятный, а синтаксис легко освоить. Особенно удобным Dart считается для людей, которые до этого уже изучали другие языки программирования.
Создатели Dart — компания Google, которая также придумала язык Go. У Dart открытый исходный код, язык полностью бесплатный и свободно распространяется.
Для чего применяется язык Dart
Так как основная идея создания Dart — заменить JavaScript, сам по себе язык ориентирован на веб-разработку. Во встроенных инструментах языка много средств для работы с браузером и интерфейсами, веб-страницами — словом, фронтенд-частью разработки. В то же время в нем есть и инструменты для бэкенда и серверного программирования.
Но пока в веб-программировании, по крайней мере в России, Dart не прижился. В основном разработчиков на этом языке ищут в проектах по мобильной разработке. Дело в том, что на основе Dart написан Flutter — популярный фреймворк для создания мобильных приложений. Поэтому большинство вакансий по Dart — это работа с Flutter и с приложениями под iOS или Android.
В этом нет ничего удивительного. Возможности Dart для создания интерфейсов легко применить в мобильной разработке: они позволяют удобно и быстро создавать приложения.
Кроме того, на Dart написана надстройка CSS под названием SASS. Ею пользуются фронтенд-разработчики для более удобной верстки.
Особенности Dart
Ориентированность на создание интерфейсов. Dart создавался как язык для интерфейсов, поэтому в нем есть много фишек для их разработки. Сейчас эта особенность нашла применение в программировании мобильных приложений: создавать визуальный интерфейс с помощью Dart довольно удобно. Идея создателей языка была в том, чтобы уменьшить количество переключений между разметкой и кодом — чтобы разработчик не терял времени и не отвлекался. На это и направлены некоторые фишки языка. Например, при компилировании в JavaScript автоматически создается шаблонная HTML-страница с разметкой. Ее сразу можно открыть в браузере и посмотреть, что получилось.
Наследие C и C++. Dart испытал сильное влияние системных языков C и C++, и это нашло отражение в его синтаксисе. Он C-подобный: это значит, что правила написания кода и его структура похожи на C. Хотя Dart проще в освоении и ориентирован на другие цели, он унаследовал некоторые важные элементы: например, основной блок программы заключается в функцию main().
Факультативная типизация. Типизация в языках программирования бывает статической и динамической. В первом случае разработчик должен сам указывать, к какому типу будет относиться переменная: число, строка, массив или что-то еще. Во втором случае язык решает это сам на основании того, какие данные записал в переменную разработчик.
В Dart объединили эти подходы — типизация там факультативная. Это значит, что разработчик может указать тип при создании переменной, а может не указывать — допустимы оба подхода. Какой из них лучше использовать, зависит от задачи.
Компилируемость. В отличие от интерпретируемого JavaScript, Dart — компилируемый язык. Это значит, что код на нем проходит через специальную программу-переводчик — компилятор. Она переводит написанное в машинные коды, которые понимает операционная система, поэтому язык работает быстро и может активнее взаимодействовать с ОС.
Два вида компиляции.
- AOT (ahead of time, «прежде времени») — статическая, или опережающая компиляция. Написанная программа целиком переводится в машинные коды, и только после этого ее можно запустить. Это классический вариант компиляции, именно он используется в C++ и большинстве компилируемых языков.
- JIT (just in time, «точно вовремя») — динамическая компиляция. Программа компилируется по частям, и скомпилированные части тут же выполняются. Это роднит идею с интерпретацией — другим подходом к исполнению, когда специальная программа-интерпретатор исполняет код построчно. Обычно JIT используется в языках с байт-кодом, таких как Java.
Программа, скомпилированная AOT, быстрее запускается и работает, но такая компиляция замедляет разработку. После каждого изменения разработчик должен перекомпилировать код полностью — а это лишнее время. JIT, наоборот, ускоряет цикл разработки, но сама по себе программа запускается медленнее и требует больше ресурсов.
Поэтому в Dart и ввели оба вида компиляции: JIT для процесса разработки и AOT для финальной реализации уже готового продукта. Это нужно, чтобы экономить время и совмещать плюсы обоих типов.
Классическое ООП. В Dart реализован классический подход к объектно-ориентированному программированию, которое сейчас считается одной из наиболее популярных парадигм. В нем есть классы, в том числе абстрактные, реализовано наследование — все это без нововведений и экспериментов, так, как предписывает парадигма. Поэтому писать ООП-код в Dart довольно удобно: не приходится придумывать «костыли» и бороться с особенностями языка.
Изоляторы. Dart — однопоточный язык. Это значит, что все программы на нем выполняются в едином потоке действий, а не в нескольких. Однопоточность тоже роднит его с JavaScript. Но иногда процессы нужно распараллеливать, чтобы несколько действий могли выполняться одновременно. Для этого в Dart реализован механизм изоляторов (isolate). Иногда их еще переводят как изоляты.
Изолятор — это сущность, которая выполняет какие-то действия. У каждого изолятора своя область памяти, он может выполняться одновременно с другими и обмениваться с ними данными. Это своеобразные виртуальные потоки, созданные на более высоком уровне абстракции, чем настоящие.
Управляет ими Event Loop — процесс, который работает, пока открыта программа, и поочередно выполняет код внутри разных изоляторов. Он работает с очередью, действующей по принципу FIFO: «первый вошел, первый вышел». То есть тот процесс, который «пришел» в очередь раньше, и выполнится раньше других. Очередей две: для простых коротких действий и для блоков кода, которые должны выполниться в ответ на какое-то внешнее событие.
Горячая перезагрузка. Удобная особенность Dart — горячая перезагрузка, или hot reload. Термин означает, что код программы можно откорректировать, пока она запущена — и изменения внесутся «на ходу». Для этого не понадобится открывать и снова закрывать программу. В JavaScript и похожих языках тоже есть инструменты для hot reload, но там приходится использовать внешние решения, а в Dart эта возможность встроена изначально. Поэтому горячая перезагрузка в этом языке работает быстрее и эффективнее.
Dart и Dart 2
Современная версия языка называется Dart 2. Она вышла в 2018 году и отличается от более старой версии: в ней улучшили систему типов, сделали синтаксис лаконичнее, добавили новые возможности для создания клиентской части приложений. Инструменты новой версии позволяют реже переключаться между разметкой и кодом, а сущности можно описывать короче.
С выходом Dart 2 язык снова испытал взлет популярности. Сейчас новая версия считается более актуальной, поэтому если разработчики говорят про Dart, чаще всего они имеют в виду Dart 2.
Что такое Flutter и как он связан с Dart
Flutter — один из наиболее популярных фреймворков на Dart. Обычно именно с ним связаны вакансии разработчиков на этом языке. Фреймворк и SDK (набор средств разработки) предназначены для создания приложений под iOS и Android.
Особенность Flutter в том, что он позволяет имитировать нативную разработку под мобильные ОС. Это значит, что с помощью этого фреймворка и SDK можно создавать приложения, использующие системные элементы iOS и Android — они будут быстрыми, удобными и фактически неотличимыми от по-настоящему нативных программ.
Во Flutter легко создавать интерфейсы — в SDK есть визуальные компоненты, с помощью которых можно «собрать» дизайн. Код пишется на Dart, хотя движок Flutter написан на C++.
Пока что Flutter не так часто используется для создания приложений, как Java, Kotlin и Swift, но это интересный и перспективный вариант для мобильной разработки.
Dart и JavaScript
В отличие от других языков, созданных как альтернатива JS, Dart не разрабатывался на его основе. Это полностью самостоятельный язык программирования, независимый от JavaScript. Несмотря на схожесть синтаксиса и назначения, языки не связаны.
Тем не менее код на Dart можно скомпилировать в код на JavaScript — перевести с помощью специальной утилиты, встроенной в язык. Это сделано потому, что браузеры пока понимают только JS, а код на Dart выполнить не смогут. Так что разработчик может написать код для фронтенда на Dart, а потом автоматически преобразовать его в JavaScript и запустить в браузере.
Сможет ли Dart заменить JavaScript
Несмотря на то что Dart позиционировался как аналог JavaScript, пока что JS остается лидером в веб-разработке и самым используемым языком в мире. Дело в том, что заменить его не так просто. Веб-браузеры умеют обрабатывать только JS, а чтобы «научить» их понимать другие языки, понадобится серьезно их переписывать. Dart пока не настолько популярен, чтобы браузеры пошли на такие масштабные нововведения ради него.
Поэтому, даже если написать клиентскую часть сайта на Dart, код все равно понадобится компилировать в JavaScript. Поэтому же преимущественная область использования Dart сейчас — мобильная разработка, а не веб.
Некоторые разработчики считают, что за Dart будущее и со временем интернет перейдет на него. Но ожидать, что он заменит JavaScript в течение ближайших десятилетий, не стоит. Поэтому JS останется востребованным еще долго — хотя веб-разработчики считают, что на Dart стоит обратить внимание.
Перспективы Dart
Сейчас Dart не входит даже в топ-20 самых часто используемых языков программирования. Но некоторые считают, что у него большое будущее. Причин этому три:
- Он удобен для разработки интерфейсов и в принципе для веб-программирования, при этом лишен части недостатков более популярного JavaScript.
- Сам по себе язык простой и понятный, его легко изучить и начать применять в проектах.
- Язык активно продвигает Google, а поддержка крупной корпорации — хороший стимул для развития технологии.
Несмотря на это, в ближайшие несколько лет сфера применения Dart скорее всего не изменится: мобильные приложения, созданные в экосистеме Flutter. На эту область и стоит рассчитывать, если вы хотите учить язык.
Преимущества Dart
- Удобство. На языке просто писать, у него лаконичный синтаксис, понятный разработчикам.
- Простота освоения. Разработчики говорят, что освоить Dart легко, в особенности если до этого у человека был опыт программирования.
- Широкие возможности. В языке много особенностей и фишек, расширяющих возможности и облегчающих разработку.
- Высокая производительность. Dart компилируемый, поэтому быстрый и мощный. Он нормально работает и на клиенте, и на сервере.
- Поддержка Google. Корпорация поддерживает и рекламирует язык, стремится повысить его популярность. Поэтому у Dart отличная документация и туториалы.
Недостатки Dart
- Низкая популярность. К сожалению, вакансий на Dart все еще немного: в России их всего несколько десятков, и в основном они включают в себя разработку на Flutter. Но, возможно, в ближайшие годы язык станет популярнее, и разработчики на нем будут нужны в большем количестве.
- Небольшое комьюнити. Эта проблема — следствие предыдущей: разработчиков на Dart мало, поэтому сообщество у языка небольшое. Людей в нем мало, и со стороны комьюнити язык развивается не так активно, как мог бы.
- Неспособность полностью заменить JS. Dart все еще не может стать аналогом JavaScript и вряд ли сможет в ближайшие годы. Он не выполняется в популярных браузерах, а фреймворков и библиотек для него пока слишком мало, чтобы покрыть все возможности экосистемы JS.
Стоит ли изучать язык Dart
Считается, что в большинстве случаев изучение Dart — идея чисто факультативная, если вы не пишете на Flutter. Но мобильным разработчикам этот язык будет полезен: на Flutter можно создавать мощные приложения, а работает он на Dart. Веб-разработчикам же советуют изучать Dart по собственному желанию — на случай если язык действительно начнет активно использоваться в веб-разработке.
Вакансий непосредственно по Dart немного, поэтому его не советуют изучать в качестве первого и основного языка: найти работу может быть непросто. Но в качестве дополнительного навыка Dart — отличный выбор и для мобильных, и для фронтенд- или бэкенд-разработчиков.
Хотите узнать больше про IT? Записывайтесь на курсы: мы поможем выбрать и освоить новую профессию!
0 комментариев