LuAOT - ahead-of-time kompajler za Luu

LuAOT - ahead-of-time kompajler za Luu

siLua

15.4.2026.

Lua je stvarno fleksibilan jezik, ali njena standardna implementacija se bazira na interpretaciju virtualne mašine, što dovodi do groznih performansi. Mislim da je AOT kompilacija, kojom se kod prevodi prije samog izvršavanja, najbolje rješenje za ovaj problem. Koristio sam TypeScript i Bun runtime za izradu samog kompajlera, dok je jezgra (runtime) napisana u C-u radi maksimalne učinkovitosti.

Arhitektura

Projekt se sastoji od nekoliko ključnih faza koje osiguravaju brzinu i stabilnost:

  1. Analiza i Parsiranje: Koristim luaparse za generiranje abstract syntax tree-a jer je to doslovno jedini način da se Lua kod parsira u TypeScriptu.
  2. LLVM Codegen: Jezgra sustava je codegen.ts koji AST pretvara u LLVM IR kod. Posebno sam ponosan na implementaciju fast pathova za petlje gdje se koriste sirovi double tipovi umjesto sporijeg pakiranja u Lua strukture.
  3. C Runtime: Runtime definira LuaValue strukturu i upravlja tablicama te memorijom, osiguravajući da kompajlirani kod ima svu potrebnu podršku za rad.

Performanse i rezultati

Provedeni benchmarkovi pokazuju velike prednosti. Prema mojim mjerenjima, iterativni izračuni i rekurzivne funkcije, poput Fibonaccijevog niza, rade višestruko brže u usporedbi sa standardnim interpreterom.

  • Sum benchmark: Postignuto je drastično ubrzanje zbog optimizacije petlji.
  • Fibonacci: AOT kompilacija eliminira overhead interpretacije poziva funkcija.

Osobni zaključak

Rad na ovom projektu bio je izazovan, posebno zbog LLVM vezova i osiguravanja ispravnosti tipova u TypeScriptu. Moj je dojam da ovakav pristup pokazuje koliko se performansi može izvući iz dinamičkog jezika uz pravilnu optimizaciju strojnog koda. Smatram da je LuAOT dobar temelj za daljnje istraživanje u području dizajna programskih jezika.

Github: https://github.com/vigogrg/luaot