Kódová základna Ruby využívá nový JIT kompilátor ZJIT

Do referenční implementační kódové základny jazyka Ruby byl přidán nový JIT kompilátor ZJIT, který je prezentován jako další generace Ruby JIT. ZJIT bude zahrnut v další velké verzi Ruby 3.5, kde bude k dispozici jako volitelná výbava vedle JIT kompilátoru YJIT a v Ruby 3.6 jej může nahradit. Stejně jako YJIT je i nový JIT kompilátor napsán v Rustu. Oba JIT kompilátory byly vytvořeny týmem vývojářů ve společnosti Shopify jako součást iniciativy na zlepšení výkonu programů v Ruby, které používají framework Rails a volají mnoho metod.

Na rozdíl od YJITu nový JIT kompilátor nepřekládá bajtkód virtuálního stroje YARV do nízkoúrovňové mezireprezentace (v podstatě téměř přímo do strojového kódu), ale transformuje bajtkód do vysokoúrovňové mezireprezentace SSA (Static Single Assignment), nad kterou lze implementovat další optimalizační fáze a provádět optimalizaci s ohledem na velké bloky kódu, spíše než spoléhat se pouze na aktuální operace.

ZJIT provádí kompilaci celé metody najednou, zatímco YJIT zvládá kompilaci pouze základních bloků. Pro profilování typů implementuje ZJIT klasickou architekturu JIT, která používá nashromážděná historická data typů interpretu namísto techniky Lazy Basic Block Versioning (LBBV) používané v YJIT.

Použití IR na vysoké úrovni vyřeší problémy se škálovatelností, které má YJIT, položí základy pro budoucí implementaci víceúrovňové JIT kompilace, umožní pokročilé optimalizace (například agresivnější inline nasazení) a usnadní adaptaci JIT na různé platformy. Návrat k tradičnímu modelu profilování typů odstraní složitost kódu a umožní zapojení nových přispěvatelů (použití LBBV společností YJIT vedlo k tomu, že projekt byl pro ostatní přispěvatele nejasný a vyvíjeli ho pouze zaměstnanci Shopify).

Zdroj: opennet.ru

Přidat komentář