О языке Dart
dartРазработчик Google
Использование
Технически, много где применим из-за своей универсальности, а фактически (по рынку) — язык одного фреймворка (Flutter).
Ключевые концепции
- Объектно-ориентированный. Всё является объектом.
- Null Safety. Переменные по-умолчанию необнуляемые (Non-nullable).
- Sound null safety. Гарантированная null-безопасность. Если тип сообщает, что значение не равно
null
, то оно никогда не будетnull
. - Функции первого класса, лямбда-функции, замыкания.
- Асинхронное программирование (
Future
,Stream
). - Генераторы (
yield
,async*/sync*
). - Стандартный пакетный менеджер pub.
Исполнение языка
- Ahead-of-Time (AOT) компиляция — Dart-компилятор заранее превращает код в машинный код.
- Just-in-Time (JIT) компиляция — применяется во время выполнения (например, в режиме разработки). Это позволяет делать hot reload в Flutter, быстро тестировать изменения без полной перезагрузки приложения.
- Компиляция в машинный код.
- Компиляция в JavaScript.
- Компиляция в WASM.
Типизация
- Строгая типизация.
- Статичная типизация — проверяется на этапе компиляции.
- Проверка типов в runtime (
as
,is
). - Номинативная (номинальная) типизация — при определении типов использует явную связь типов, а не сравнение по структуре (структурная, утинная).
- Поддержка дженериков (обобщений типов).
- Явное присвоение и неявный вывод типов.
- Имитация динамической типизация при необходимости (
dynamic
).
Параллелизм и конкурентность
- Однопоточный. Асинхронность через цикл событий (event loop).
- Параллелизм через Isolate — это отдельная единица исполнения с собственным heap-ом и event loop-ом.
- Isolate не разделяют память, а происходит обмен сообщениями.
- 🚧 Shared memory между Isolate в процессе разработки.