Какие виды компиляции поддерживает Dart?

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

Ответ

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

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

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

    • Назначение: Используется для релизных сборок (flutter build apk/ios --release).
    • Преимущества: Код компилируется в оптимизированный нативный машинный код (ARM, x64) до запуска приложения. Это обеспечивает максимальную производительность, быстрый запуск и минимальный размер.
    • Как работает: Исходный Dart-код транслируется в нативные инструкции для целевой платформы (iOS, Android).

Ключевое отличие для разработчика: JIT — для скорости итераций, AOT — для скорости выполнения. При сборке для веба (flutter build web) Dart-код транскомпилируется в JavaScript с помощью dart2js.