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 Jul 16, 2026, 10:13 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 @882a9c59
Measured on a shared Apple M2 Pro under active load(load average 8.28 8.82 9.74on 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.
kernelKoruCRustHaskellOCamlOspreyKoru / C
ackermann148.5 ±2.5149.5 ±25.6141.0 ±2.381.7 ±5.2134.2 ±2.80.99×
coins90.0 ±3.189.8 ±4.894.6 ±2.966.2 ±1.489.8 ±3.41.00×
collatz15.9 ±0.714.1 ±2.015.2 ±0.442.9 ±2.916.5 ±0.41.13×
coprime77.1 ±3.875.7 ±3.376.5 ±2.7130.1 ±10.880.5 ±5.31.02×
digitsum9.6 ±1.79.3 ±4.88.7 ±1.442.7 ±1.57.6 ±0.91.03×
factorial44.6 ±3.642.7 ±0.842.5 ±0.567.4 ±3.742.6 ±0.81.04×
fib40.8 ±5.236.3 ±3.029.8 ±2.072.7 ±6.130.2 ±1.21.12×
gcdsum93.8 ±8.188.8 ±5.2101.0 ±6.8136.2 ±14.1214.2 ±124.91.06×
hanoi87.5 ±5.582.3 ±8.678.1 ±3.087.4 ±3.095.0 ±6.71.06×
isqrt12.8 ±1.216.5 ±0.615.4 ±1.890.5 ±33.724.9 ±5.00.77×
josephus43.0 ±4.438.3 ±2.037.4 ±0.954.2 ±5.539.0 ±2.11.12×
mutual18.8 ±2.419.9 ±1.520.6 ±2.196.7 ±50.524.2 ±5.90.95×
nestedloop70.9 ±5.355.6 ±2.455.8 ±2.284.7 ±6.759.3 ±3.81.28×
pascal38.5 ±3.848.9 ±4.139.9 ±2.9204.5 ±24.752.2 ±7.10.79×
powmod37.8 ±4.331.3 ±1.031.6 ±1.886.5 ±8.834.6 ±4.01.21×
primes10.0 ±0.910.8 ±2.110.8 ±1.043.2 ±6.212.3 ±1.40.92×
tak53.0 ±3.751.4 ±2.849.1 ±3.3132.5 ±12.653.8 ±5.01.03×
textstats3.4 ±0.83.7 ±0.65.2 ±1.934.7 ±4.55.3 ±0.80.93×
wordfreq7.3 ±5.12.8 ±1.18.4 ±1.420.4 ±1.823.3 ±1.62.64×

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 8.28 8.82 9.74 on 12 cores (shared box, not quiesced)
Protocol
hyperfine -N, warmup 3, min 10 runs
Build flags
Koru: koruc build (ReleaseFast)
C: cc -O2
Rust: rustc -C opt-level=3 -C overflow-checks=off
Haskell: ghc -O2
OCaml: ocamlopt -O3 -unsafe
Osprey: osprey --compile (release)
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

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.