Что такое JIT-компиляция и как она используется в Dart/Flutter?

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

Ответ

JIT (Just-In-Time — компиляция «на лету») — это подход, при котором исходный код (или байт-код) компилируется в машинные инструкции во время выполнения программы, а не до ее запуска.

Роль JIT в разработке на Flutter: В экосистеме Flutter JIT-компиляция задействована в режиме разработки и является фундаментом для ключевой функции — Hot Reload.

  1. Как работает Hot Reload:

    • Вы запускаете приложение через flutter run (дебажная сборка).
    • Dart VM (виртуальная машина) с JIT-компилятором загружает ваш код.
    • При внесении изменений в исходный код Flutter инструменты отправляют обновленные инкрементальные библиотеки в Dart VM.
    • JIT-компилятор быстро перекомпилирует измененные участки, обновляет структуры объектов в памяти, и приложение продолжает работу с новым кодом, сохраняя свое состояние.
  2. Преимущества JIT для разработки:

    • Мгновенная обратная связь: Видите результат правок за секунды, не теряя состояние приложения (например, введенный текст или открытый экран).
    • Поддержка отладки: Полный доступ к символам и исходному коду для работы отладчика, анализаторов производительности (DevTools).
    • Гибкость: Возможность динамического изменения типов и структуры кода во время выполнения.

Ограничение: JIT-сборки менее производительны и имеют больший размер, поэтому для публикации в магазины приложений всегда используется AOT-компиляция, которая генерирует оптимизированный нативный код заранее.