Nel codice di base della implementazione di riferimento del linguaggio Ruby è stato aggiunto un nuovo compilatore JIT, ZJIT, presentato come la prossima generazione di JIT di Ruby. ZJIT farà parte della prossima significativa uscita di Ruby 3.5, dove sarà disponibile come opzione insieme al compilatore JIT YJIT, e nella versione Ruby 3.6 potrebbe sostituirlo. Come YJIT, il nuovo compilatore JIT è scritto in Rust. Entrambi i compilatori JIT sono stati sviluppati da un team di ingegneri di Shopify nell'ambito di un'iniziativa per migliorare le prestazioni delle applicazioni Ruby che utilizzano il framework Rails e chiamano un gran numero di metodi.
A differenza di YJIT, il nuovo compilatore JIT non traduce il bytecode della macchina virtuale YARV in una rappresentazione intermedia a basso livello (praticamente quasi direttamente in codice macchina), ma converte il bytecode in una rappresentazione intermedia ad alto livello SSA (Static Single Assignment), sulla quale possono essere implementate fasi di ottimizzazione aggiuntive e ottimizzazioni che considerano blocchi di codice più ampi, anziché basarsi esclusivamente sulle operazioni correnti.
ZJIT compila l'intero metodo in un'unica volta, mentre YJIT poteva gestire la compilazione solo dei blocchi di base. Per il profiling dei tipi, ZJIT implementa un'architettura JIT classica, che utilizza dati storici sui tipi accumulati dall'interprete, invece della tecnica di versioning dei blocchi di base applicata in YJIT (LBBV — Lazy Basic Block Versioning).
L'uso di una rappresentazione intermedia di alto livello risolverà i problemi di scalabilità emersi in YJIT, getterà le basi per l'implementazione futura di una compilazione JIT multilivello, consentirà di implementare ottimizzazioni avanzate (ad esempio, un'espansione inline più aggressiva) e semplificherà l'adattamento del JIT per diverse piattaforme. Il ritorno al modello tradizionale di profiling dei tipi libererà il codice da complessità e permetterà di coinvolgere nuovi contributori (l'uso di LBBV in YJIT ha reso il progetto incomprensibile per altri partecipanti e si è sviluppato solo con il supporto dei dipendenti di Shopify).
Fonte: opennet.ru
