Skip to content

Benchmarks

Micro-benchmarks comparing ilo’s execution engines against compiled, JIT, and interpreted languages. Each benchmark runs 10000 iterations and reports the median per-call time in nanoseconds.

ilo has four execution backends:

BackendFlagNotes
ilo AOTilo compileCranelift ahead-of-time compiler → standalone native binary
ilo JITilo (default)Cranelift-based just-in-time compiler
ilo VMilo --run-vmRegister-based bytecode virtual machine
Interpreterilo --run-treeTree-walking interpreter (simplest, slowest)
CategoryLanguages
Compiled (AOT)Rust (rustc -O), Go, C# (.NET), Kotlin (JVM)
JITLuaJIT, Node.js (V8), TypeScript (tsx/V8), PyPy 3
iloilo JIT, ilo VM, ilo Interpreter
InterpretedLua, Ruby, PHP, Python 3 (CPython)

sum 1..1000 (pure arithmetic loop)

Languagens/callvs fastest
Rust (native)329nsfastest
LuaJIT442ns1.3x
Node/V8451ns1.4x
TypeScript456ns1.4x
Kotlin (JVM)528ns1.6x
Go665ns2.0x
PyPy 31.5us4.5x
Lua4.2us12.7x
ilo JIT4.2us12.9x
ilo AOT5.3us16.0x
C# (.NET)5.9us18.0x
PHP6.7us20.2x
ilo VM14.7us44.7x
Ruby20.6us62.7x
Python 329.5us89.6x
ilo Interpreter94.3us286.5x

build 100-char string via concat

Languagens/callvs fastest
Rust (native)138nsfastest
Node/V8420ns3.0x
TypeScript433ns3.1x
PyPy 3770ns5.6x
LuaJIT798ns5.8x
PHP1.3us9.3x
Python 32.1us15.5x
C# (.NET)2.2us15.9x
Kotlin (JVM)2.2us16.1x
Go3.4us24.3x
ilo JIT3.5us25.0x
ilo VM5.0us36.1x
Ruby5.1us36.7x
Lua5.2us37.7x
ilo AOT7.5us54.2x
ilo Interpreter16.4us118.6x

create 100 structs, sum fields

Languagens/callvs fastest
Go124nsfastest
LuaJIT132ns1.1x
Kotlin (JVM)281ns2.3x
TypeScript288ns2.3x
Node/V8341ns2.8x
PyPy 3446ns3.6x
C# (.NET)449ns3.6x
ilo JIT743ns6.0x
ilo AOT814ns6.6x
ilo VM3.5us28.5x
PHP4.1us33.0x
Lua7.6us61.1x
Ruby8.6us69.4x
Python 38.6us69.7x
ilo Interpreter57.2us461.1x

build 100 records, JSON-serialise

Languagens/callvs fastest
TypeScript5.3usfastest
Node/V85.3us1.0x
Go6.2us1.2x
Kotlin (JVM)7.8us1.5x
PHP8.6us1.6x
LuaJIT8.6us1.6x
Rust (native)9.7us1.8x
Ruby18.6us3.5x
PyPy 321.0us4.0x
Python 327.9us5.3x
C# (.NET)30.8us5.8x
ilo VM41.8us7.9x
ilo AOT46.4us8.8x
ilo JIT49.0us9.2x
Lua50.2us9.5x
ilo Interpreter1.4ms255.2x

classify 1000 values via guard chains

Languagens/callvs fastest
Go394nsfastest
Node/V81.0us2.6x
TypeScript1.0us2.6x
Kotlin (JVM)1.1us2.7x
Rust (native)1.5us3.8x
LuaJIT1.9us4.8x
PyPy 34.4us11.2x
C# (.NET)6.8us17.3x
ilo JIT6.8us17.4x
ilo AOT8.7us22.1x
PHP26.7us67.7x
Lua27.9us70.9x
Ruby38.9us98.6x
ilo VM53.3us135.3x
Python 365.6us166.4x
ilo Interpreter984.2us2497.9x

fibonacci(10) — recursive calls

Languagens/callvs fastest
Rust (native)137nsfastest
Go176ns1.3x
Kotlin (JVM)191ns1.4x
LuaJIT235ns1.7x
C# (.NET)362ns2.6x
TypeScript387ns2.8x
Node/V8421ns3.1x
ilo JIT543ns4.0x
ilo AOT1.0us7.6x
PyPy 31.2us9.1x
Lua2.8us20.1x
Ruby3.1us23.0x
PHP5.0us36.5x
Python 36.0us43.9x
ilo VM6.9us50.5x
ilo Interpreter158.0us1153.4x

build list of 100, sum via foreach

Languagens/callvs fastest
Rust (native)62nsfastest
Go330ns5.3x
TypeScript473ns7.6x
PyPy 3575ns9.3x
Node/V8623ns10.0x
PHP1.0us16.3x
Kotlin (JVM)1.2us19.0x
C# (.NET)1.3us21.2x
LuaJIT1.4us21.9x
Python 32.1us33.2x
Ruby3.1us49.5x
Lua3.8us61.6x
ilo JIT11.2us181.3x
ilo AOT13.2us212.9x
ilo VM14.7us236.7x
ilo Interpreter78.0us1257.9x

sum 0..99 via while loop

Languagens/callvs fastest
Rust (native)1nsfastest
TypeScript73ns73.0x
Node/V881ns81.0x
Go111ns111.0x
LuaJIT119ns119.0x
Kotlin (JVM)192ns192.0x
PyPy 3274ns274.0x
ilo JIT423ns423.0x
C# (.NET)557ns557.0x
PHP707ns707.0x
ilo AOT828ns828.0x
Lua982ns982.0x
ilo VM1.5us1496.0x
Ruby2.3us2341.0x
Python 32.6us2614.0x
ilo Interpreter10.3us10329.0x

chain 4 function calls × 100 (call overhead)

Languagens/callvs fastest
Go45nsfastest
LuaJIT118ns2.6x
TypeScript165ns3.7x
Node/V8179ns4.0x
Kotlin (JVM)211ns4.7x
PyPy 3464ns10.3x
Rust (native)485ns10.8x
ilo JIT558ns12.4x
ilo AOT781ns17.4x
C# (.NET)798ns17.7x
Lua4.2us93.2x
Ruby6.2us138.1x
PHP6.5us144.5x
ilo VM6.7us149.8x
Python 310.2us227.8x
ilo Interpreter147.5us3278.1x

read JSON file, parse 20 records, sum scores

Languagens/callvs fastest
Rust (native)10.7usfastest
Node/V812.0us1.1x
TypeScript12.7us1.2x
LuaJIT14.2us1.3x
PHP14.6us1.4x
Lua16.2us1.5x
ilo JIT16.3us1.5x
ilo VM16.6us1.6x
ilo AOT17.7us1.7x
Kotlin (JVM)17.7us1.7x
Ruby17.9us1.7x
Python 319.4us1.8x
Go20.5us1.9x
C# (.NET)22.0us2.1x
PyPy 323.1us2.2x
ilo Interpreter31.7us3.0x

HTTP GET JSON, parse 20 records, sum scores

Languagens/callvs fastest
PyPy 3762nsfastest
Python 32.2us2.9x
LuaJIT46.1us60.5x
Lua54.7us71.8x
Rust (native)161.2us211.6x
ilo AOT167.0us219.2x
PHP186.4us244.6x
Kotlin (JVM)186.4us244.6x
Go192.7us252.9x
C# (.NET)229.6us301.3x
Node/V8275.6us361.7x
TypeScript282.8us371.1x
Ruby284.4us373.2x
ilo VM942.3us1236.6x
ilo JIT3.3ms4325.0x
ilo Interpreter3.3ms4366.4x
  • All benchmarks run on the same machine (Darwin arm64) in a single session
  • Each benchmark warms up before timing begins
  • Compiled languages use optimised builds (-O2 / -O)
  • V8 and LuaJIT benefit from JIT warmup during the iteration loop
  • Results are from 2026-03-13