Un nouveau compilateur JIT, ZJIT, a été ajouté à la base de code d'implémentation de référence du langage Ruby et se positionne comme la prochaine génération de Ruby JIT. ZJIT sera inclus dans la prochaine version majeure de Ruby 3.5, où il sera disponible en option aux côtés du compilateur JIT YJIT, et pourra le remplacer dans Ruby 3.6. Comme YJIT, le nouveau compilateur JIT est écrit en Rust. Les deux compilateurs JIT ont été créés par une équipe de développeurs de Shopify dans le cadre d'une initiative visant à améliorer les performances des programmes Ruby qui utilisent le framework Rails et appellent de nombreuses méthodes.
Contrairement à YJIT, le nouveau compilateur JIT ne traduit pas le bytecode de la machine virtuelle YARV en une représentation intermédiaire de bas niveau (essentiellement presque directement en code machine), mais transforme le bytecode en une représentation intermédiaire de haut niveau SSA (Static Single Assignment), sur laquelle des phases d'optimisation supplémentaires peuvent être implémentées et l'optimisation peut être effectuée en gardant un œil sur de gros blocs de code, plutôt que de s'appuyer uniquement sur les opérations en cours.
ZJIT effectue la compilation d'une méthode entière à la fois, tandis que YJIT ne peut gérer que la compilation de blocs de base. Pour le profilage de type, ZJIT implémente une architecture JIT classique qui utilise les données de type historiques accumulées de l'interpréteur au lieu de la technique Lazy Basic Block Versioning (LBBV) utilisée dans YJIT.
L'utilisation d'un IR de haut niveau résoudra les problèmes d'évolutivité rencontrés par YJIT, jettera les bases de la future implémentation de la compilation JIT multi-niveaux, permettra des optimisations avancées (telles qu'un déploiement en ligne plus agressif) et facilitera l'adaptation du JIT à différentes plates-formes. Le retour à un modèle de profilage de type traditionnel supprimera la complexité du code et permettra à de nouveaux contributeurs de participer (l'utilisation de LBBV par YJIT a eu pour conséquence que le projet était obscur pour les autres contributeurs et était développé uniquement par les employés de Shopify).
Source: opennet.ru
