Принятие нового JIT-компилятора ZJIT в кодовую базу Ruby знаменует собой важный шаг в развитии производительности языка. Это будет доступно, начиная с версии Ruby 3.5, как дополнение к существующему YJIT. Оба компилятора написаны на языке Rust разработчиками из Shopify и направлены на повышение эффективности Ruby-программ, активно использующих фреймворк Rails.
Особенности ZJIT
В отличие от YJIT, ZJIT преобразует байткод виртуальной машины YARV в высокоуровневое промежуточное представление SSA. Это позволяет выполнять дополнительные фазы оптимизации и смотреть на код целиком, а не ограничиваться отдельными операциями. ZJIT компилирует сразу весь метод, что отличает его от YJIT, работающего на уровне базовых блоков.
Преимущества нового подхода
Использование высокоуровневого представления решает ряд проблем с расширением, возникших в YJIT. Это открывает возможности для многоуровневой JIT-компиляции в будущем и расширенной оптимизации. Например, более агрессивное inlinе-развёртывание и улучшенная адаптация на различных платформ. Переход к классической модели профилирования типов упрощает код и делает проект доступным для более широкого круга участников.