Что такое компилятор в контексте Dart/Flutter?

«Что такое компилятор в контексте Dart/Flutter?» — вопрос из категории Сборка и компиляция, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Компилятор Dart — это программа, которая преобразует исходный код на языке Dart в исполняемый код. В экосистеме Flutter используются два основных режима компиляции, оптимизированных под разные этапы разработки:

  1. JIT (Just-In-Time, компиляция «на лету»):

    • Используется во время разработки при запуске через flutter run.
    • Позволяет реализовать Stateful Hot Reload — почти мгновенное обновление UI без перезапуска приложения, так как компилятор обновляет только изменённый код в уже работающей виртуальной машине (Dart VM).
    • Содержит runtime-информацию, что полезно для отладки и профилирования.
  2. AOT (Ahead-Of-Time, заблаговременная компиляция):

    • Используется для релизных сборок (flutter build apk/ios --release).
    • Компилирует код в нативный машинный код (ARM, x64) перед запуском приложения.
    • Результат — максимальная производительность, быстрый старт и минимальный размер приложения, так как исключается необходимость в Dart VM и компиляторе во время выполнения.

Пример и результат: Исходный файл main.dart:

void main() => runApp(MyApp());
  • В режиме разработки (JIT) этот код выполняется внутри Dart VM.
  • В релизном режиме (AOT) компилятор преобразует его в нативный бинарный файл (например, libapp.so для Android или машинный код для iOS), который напрямую выполняется процессором устройства.