Benchmarks

Every benchmark body we run, in one place. These are instruments, not trophy cases — a kernel Koru cannot express, a body without a live data feed, a number that got worse: all of it stays on this page, named.

7 benchmark bodies · 1 with live, reproducible boards. Bodies with a live board rank first; a write-up without one is a wiring gap, and it shows.

Compute kernels

live board · measured Aug 25, 2026, 03:02 AM

Faithful naive kernels — same algorithm, same parameters, no tricks — against C, Rust, Haskell and Osprey under one hyperfine protocol. Reference corpus and the Osprey column vendored from the Osprey language suite (MIT); measured on a shared, loaded M2 Pro, not a quiesced rig.

19 of 22 kernels ported 3 open gaps koru @0462b31f
Measured on a shared Apple M2 Pro under active load(load average 4.72 5.50 5.29on 12 cores) — not a quiesced benchmark rig. Read these as same-machine, same-protocol ballpark figures: run-to-run jitter on a loaded box routinely exceeds the gaps between the compiled languages, so treat close cells as ties, not rankings.
kernelKorukoru-foldCcmapRustHaskellOCamlOspreyc3odinKoru / C
ackermann143.8 ±1.4130.3 ±1.8135.8 ±2.378.5 ±2.9131.9 ±1.81.10×
coins86.2 ±1.385.8 ±1.492.9 ±1.364.0 ±3.586.8 ±0.71.00×
collatz15.3 ±0.512.6 ±0.514.9 ±0.742.1 ±1.716.0 ±0.61.22×
coprime74.8 ±1.475.9 ±9.475.6 ±1.6124.5 ±3.578.8 ±6.70.98×
digitsum8.0 ±0.76.4 ±0.37.0 ±0.642.5 ±1.77.2 ±0.41.24×
factorial41.7 ±1.042.1 ±0.842.4 ±0.767.2 ±4.642.1 ±0.60.99×
fib28.8 ±0.728.9 ±0.828.6 ±0.768.1 ±6.329.1 ±0.828.4 ±0.728.8 ±0.61.00×
gcdsum86.8 ±0.986.8 ±1.188.0 ±1.4120.4 ±4.387.7 ±0.91.00×
hanoi69.2 ±1.168.6 ±1.169.8 ±1.084.2 ±4.968.9 ±0.71.01×
isqrt12.1 ±0.715.4 ±0.813.7 ±0.655.6 ±5.517.9 ±0.80.78×
josephus36.9 ±0.636.8 ±0.737.0 ±0.754.2 ±1.737.1 ±0.61.00×
mutual17.1 ±0.817.8 ±0.818.1 ±0.942.9 ±2.317.0 ±0.80.96×
nestedloop55.8 ±4.255.1 ±0.954.8 ±0.477.8 ±2.254.3 ±1.155.2 ±0.954.9 ±0.61.01×
pascal35.0 ±1.135.6 ±4.135.0 ±0.390.2 ±2.135.1 ±0.80.98×
powmod30.4 ±0.930.4 ±0.930.1 ±0.669.3 ±4.430.8 ±3.91.00×
primes8.5 ±0.38.7 ±0.49.2 ±0.630.1 ±1.78.9 ±1.99.2 ±0.48.8 ±0.50.98×
tak45.4 ±5.144.3 ±0.744.7 ±0.6105.8 ±4.244.3 ±0.71.03×
textstats2.8 ±0.52.8 ±0.324.8 ±5.74.2 ±0.5
wordfreq4.4 ±0.41.7 ±0.31.9 ±0.33.0 ±0.46.7 ±1.118.1 ±1.122.0 ±0.96.2 ±0.55.1 ±0.72.32×

Mean wall-clock ms, lower is better · '—' = toolchain absent or no port · 'WRONG' = failed the oracle, excluded from timing · Koru / C is the ratio of means from this run only.

No Koru port yet — each names something the language cannot express today. They go green when the language grows the capability, never before:

binarytreesexprtreelistops
How these numbers were made
Machine
Darwin arm64 · Apple M2 Pro · load 4.72 5.50 5.29 on 12 cores (shared box, not quiesced)
Protocol
hyperfine -N, warmup 3, min 10 runs
Build flags
Koru: koruc build (ReleaseFast)
koru-fold: koruc build (ReleaseFast) — flat fold/identity port
C: cc -O2
Rust: rustc -C opt-level=3 -C overflow-checks=off
Haskell: ghc -O2
OCaml: ocamlopt -O3 -unsafe
Osprey: osprey --compile (release)
cmap: cc -O2 (hand-rolled string map)
c3: c3c compile -O5
odin: odin build -o:speed
Toolchains
C: Apple clang version 21.0.0 (clang-2100.0.123.102)
Rust: rustc 1.96.0-nightly (b41f22de2 2026-03-08)
Haskell: ghc 9.10.3
OCaml: absent — not measured, never estimated
Osprey: osprey 0.0.0-dev
cmap: Apple clang version 21.0.0 (clang-2100.0.123.102)
c3: C3 Compiler Version: 0.8.3
odin: /Users/larsde/src/odin/odin version dev-2026-08:3e159a4

MEASURED on the shared developer workstation named above, under live load (see machine.load_avg — the 1/5/15-min load average at run time) — NOT a quiesced benchmark rig. Read every number as a same-machine, same-protocol ballpark, not a precise cross-language ranking: run-to-run jitter on a loaded box routinely exceeds the gaps between the compiled languages. Wrong-answer binaries are excluded from timing. Absent toolchains are reported absent, never estimated. No cross-language claim leaves this board unless re-verified under the target's exact rules.

Source, harness and raw results: github.com/korulang/koru-benchmarks

Prime-sieve drag race

no live board yet — write-ups only

The Primes drag-race sieve — where "faithful" earned its capital letters, and what a category boundary does to a comparison.

n-body & std/kernel

no live board yet — write-ups only

Dense numeric workloads through std/kernel — idiomatic high-level Koru against hand-specialized C and Rust.

HTTP serving (Orisha)

no live board yet — write-ups only

The Orisha HTTP server under load, measured against nginx on the same box.

Recursion → loop

no live board yet — write-ups only

The register-machine story: recursion the compiler proves is a loop, and what that does to the emitted code.

Footprint

no live board yet — write-ups only

How small the artifacts get — binary size and deployment weight.

Interpreter

no live board yet — write-ups only

The comptime interpreter, measured honestly while it is still slow. Parked, red, and on the page anyway — that is the point of the page.