Dart
Dart — это язык программирования общего назначения, разработанный компанией Google. Относится к классу объектно-ориентированных, C-подобных языков со статической типизацией. Ключевые характеристики: поддержка как ahead-of-time (AOT) компиляции в нативный код, так и just-in-time (JIT) компиляции для быстрой разработки; строгая, но опциональная типизация; использование виртуальной машины (Dart VM) для исполнения кода; встроенная поддержка асинхронности (Future, Stream); развитая система пакетов (pub.dev). Наибольшую известность получил как основной язык для кроссплатформенного фреймворка Flutter, но также применяется для серверной разработки, веб-приложений и скриптов.
История
Разработка Dart началась в 2011 году под руководством Ларса Бакка и Каспера Лунда (ранее работавших над языком Smalltalk и виртуальной машиной V8). Первая публичная версия была представлена на конференции GOTO в Орхусе, Дания, 10 октября 2011 года. Изначально проект назывался Dash, но из-за конфликта товарных знаков был переименован в Dart.
Первоначальная цель Dart — заменить JavaScript в веб-браузерах, предлагая более структурированный и производительный язык. Для этого был создан Dart2js — компилятор, переводящий Dart-код в JavaScript. Однако эта попытка не получила широкого распространения, и к 2015 году Google отказалась от планов внедрения Dart в Chrome.
В 2018 году, с выходом Dart 2.0, язык был значительно переработан: введена строгая система типов (sound null safety стала обязательной позже, в 2021 году), упрощён синтаксис, и основное внимание сместилось на поддержку Flutter. В 2019 году Dart стал языком с открытым исходным кодом (лицензия BSD).
Классификация и типизация
Dart относится к семейству языков с сильной статической типизацией. Это означает, что тип каждой переменной известен на этапе компиляции, что позволяет выявлять многие ошибки до выполнения программы. Однако язык поддерживает автоматическое определение типа (type inference) через ключевое слово var.
Основные типы данных:
- Числовые:
int(целые числа, до 64 бит на нативных платформах),double(числа с плавающей запятой, 64-битные по стандарту IEEE 754). - Строковые:
String(последовательность символов UTF-16). - Логические:
bool(значенияtrueиfalse). - Коллекции:
List(упорядоченные списки),Set(неупорядоченные множества уникальных элементов),Map(ассоциативные массивы «ключ-значение»). - Специальные:
dynamic(отключает проверку типов для переменной),Null(единственный экземпляр —null).
Dart поддерживает обобщённые типы (дженерики), что позволяет создавать типобезопасные коллекции и классы.
Устройство и компиляция
Dart использует две основные стратегии компиляции:
- Just-in-Time (JIT) компиляция: Используется во время разработки. Код выполняется на виртуальной машине Dart VM, что обеспечивает быстрый цикл «изменить — запустить — проверить» (hot reload). JIT-компилятор оптимизирует часто исполняемые участки кода (метод «горячей» компиляции).
- Ahead-of-Time (AOT) компиляция: Используется для финальной сборки приложений. Код компилируется в нативный машинный код (для мобильных платформ, десктопов, встраиваемых систем) или в JavaScript (для веба). AOT-компиляция обеспечивает высокую производительность и быстрый запуск, так как не требует интерпретации или JIT-компиляции во время выполнения.
Для веб-разработки Dart-код может быть скомпилирован в JavaScript с помощью компилятора dart2js (оптимизированный для продакшна) или dartdevc (быстрый для разработки).
Экосистема и инструменты
Ключевые компоненты экосистемы Dart:
- Dart SDK: Включает компиляторы (dart2js, dartdevc, dart2native), виртуальную машину, анализатор кода (dartanalyzer), форматтер (dartfmt) и менеджер пакетов.
- pub.dev: Официальный репозиторий пакетов. Содержит тысячи библиотек для различных задач: от HTTP-запросов и работы с базами данных до GUI-виджетов и криптографии.
- Flutter: Кроссплатформенный фреймворк для создания мобильных, веб- и десктопных приложений. Написан на Dart и является его основным драйвером популярности.
- DartPad: Онлайн-редактор для тестирования Dart-кода без установки SDK.
Применение
Основные области применения Dart:
- Мобильная разработка: Создание приложений для Android и iOS с помощью Flutter. Благодаря AOT-компиляции, Flutter-приложения работают с высокой производительностью и имеют нативный вид.
- Веб-разработка: Создание фронтенда веб-приложений (через компиляцию в JavaScript) и серверной части (с использованием фреймворков, таких как Aqueduct или Shelf).
- Десктопная разработка: Создание приложений для Windows, macOS и Linux с помощью Flutter Desktop.
- Серверная разработка: Dart VM позволяет запускать серверные приложения, обрабатывающие HTTP-запросы, работающие с базами данных и выполняющие фоновые задачи.
- Скрипты и инструменты: Благодаря простоте и производительности, Dart используется для написания скриптов автоматизации, инструментов командной строки и утилит.
Примеры использования
- Google Ads: Рекламная платформа Google использует Dart для части своего веб-интерфейса.
- Alibaba: Китайская компания применяет Flutter для разработки мобильных приложений.
- BMW: Использует Flutter для приложений для управления автомобилем.
- Reflectly: Популярное приложение для ведения дневника на Flutter.
- Множество стартапов и инди-разработчиков: Выбирают Dart/Flutter из-за быстрой разработки и кроссплатформенности.
Интересные факты
- Название «Dart» (дротик) было выбрано, чтобы подчеркнуть точность и прямолинейность языка, в отличие от «метательного ножа» JavaScript, который, по мнению создателей, был менее структурирован.
- В Dart нет ключевого слова
interface. Вместо него используются абстрактные классы, которые могут быть реализованы. - Dart поддерживает «каскадную нотацию» (
..), позволяющую вызывать несколько методов на одном объекте без повторения его имени. - Язык имеет встроенную поддержку «изолятов» (isolates) — легковесных потоков, которые не разделяют память, что упрощает параллельное программирование.
Критика
Основные претензии к Dart:
- Небольшое сообщество: По сравнению с JavaScript, Python или Java, сообщество Dart значительно меньше, что может ограничивать количество доступных библиотек и ресурсов для обучения.
- Зависимость от Flutter: Популярность Dart почти полностью определяется успехом Flutter. Без него язык оставался бы нишевым.
- Сложность с null safety: Введение обязательной null safety в Dart 2.12 (2021 год) вызвало сложности при миграции старых проектов, хотя в долгосрочной перспективе повысило надёжность кода.
- Производительность: Хотя AOT-компиляция даёт хорошую производительность, в некоторых сценариях (например, при работе с большими объёмами данных в реальном времени) Dart может уступать языкам, компилируемым в машинный код напрямую (C++, Rust).
Источники
- Официальная документация Dart (dart.dev)
- Официальная документация Flutter (flutter.dev)
- Книга «Dart: Up and Running» (O'Reilly Media, 2012)
- Статья «Dart: A New Language for Structured Web Programming» (Google Research, 2011)
- Dart SDK — исходный код (GitHub, лицензия BSD)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →