О языке 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 в процессе разработки.