Nova JIT-kompililo, ZJIT, estis aldonita al la referenca efektiviga kodbazo de la lingvo Ruby kaj estas poziciigita kiel la sekva generacio de Ruby JIT. ZJIT estos inkluzivita en la sekva grava eldono de Ruby 3.5, kie ĝi estos havebla kiel opcio kune kun la YJIT JIT-kompililo, kaj eble anstataŭigos ĝin en Ruby 3.6. Kiel YJIT, la nova JIT-kompililo estas skribita en Rust. Ambaŭ JIT-kompililoj estis kreitaj de teamo de programistoj ĉe Shopify kiel parto de iniciato por plibonigi la rendimenton de Ruby-programoj, kiuj uzas la Rails-kadron kaj vokas multajn metodojn.
Male al YJIT, la nova JIT-kompililo ne tradukas la bajtkodon de la virtuala maŝino YARV en malaltnivelan mezan reprezentaĵon (esence preskaŭ rekte en maŝinkodon), sed transformas la bajtkodon en altnivelan mezan reprezentaĵon SSA (Static Single Assignment), super kiu oni povas efektivigi pliajn optimumigajn fazojn kaj plenumi optimumigon atentante grandajn blokojn de kodo, anstataŭ fidi nur je aktualaj operacioj.
ZJIT kompilas tutan metodon samtempe, dum YJIT povus pritrakti nur kompiladon de bazaj blokoj. Por tipprofilado, ZJIT efektivigas klasikan JIT-arkitekturon, kiu uzas la akumulitajn historiajn tipdatumojn de la interpretilo anstataŭ la teknikon Lazy Basic Block Versioning (LBBV) uzatan en YJIT.
Uzi altnivelan IR solvos la skalebleco-problemojn, kiujn YJIT havas, metos la fundamenton por estonta efektivigo de plurnivela JIT-kompilo, ebligos progresintajn optimumigojn (kiel pli agreseman enlinian deplojon), kaj faciligos adapti la JIT al malsamaj platformoj. Reveno al tradicia tipo-profila modelo forigos kompleksecon el la kodo kaj permesos al novaj kontribuantoj partopreni (la uzo de LBBV fare de YJIT rezultigis ke la projekto estis obskura por aliaj kontribuantoj kaj estis evoluigita nur de Shopify-dungitoj).
fonto: opennet.ru
