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.
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.
| kernel | Koru | koru-fold | koru-par | C | cgcc3 | cclang | cmap | Rust | Haskell | OCaml | Osprey | c3 | odin | mojo | bend | bend-par | Koru / C |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ackermann | 21.8 ±0.2 | — | — | 128.2 ±1.7 | — | 127.8 ±1.0 | — | 131.6 ±1.6 | 75.5 ±2.5 | — | 128.2 ±1.6 | — | — | 146.3 ±1.7 | 58.0 ±1.3 | — | 0.17× |
| binarytrees | 1.9 ±0.1 | — | 2.2 ±0.1 | 360.3 ±1.5 | — | 361.2 ±2.0 | — | 717.4 ±7.8 | 17.6 ±1.2 | — | 379.9 ±4.3 | — | — | — | 144.4 ±3.2 | 551.3 ±6.3 | 0.01× |
| coins | 84.8 ±1.0 | — | — | 85.0 ±1.4 | — | 79.1 ±1.1 | — | 91.9 ±1.0 | 62.7 ±3.9 | — | 88.6 ±7.3 | — | — | 93.7 ±1.3 | 67.9 ±6.1 | 33.2 ±2.4 | 1.00× |
| collatz | 14.7 ±0.3 | — | 3.6 ±0.2 | 12.3 ±0.8 | — | 12.3 ±0.2 | — | 14.6 ±0.4 | 41.1 ±1.7 | — | 15.1 ±0.2 | — | — | 26.8 ±1.5 | 53.0 ±5.3 | 48.4 ±2.8 | 1.20× |
| coprime | 72.3 ±0.8 | — | — | 71.1 ±0.9 | — | 70.8 ±0.6 | — | 72.1 ±0.5 | 119.6 ±3.4 | — | 74.8 ±1.1 | — | — | 98.1 ±5.4 | 90.9 ±1.8 | 62.1 ±1.2 | 1.02× |
| digitsum | 7.3 ±0.1 | — | 2.5 ±0.1 | 6.0 ±0.2 | — | 5.9 ±0.1 | — | 6.2 ±0.2 | 40.0 ±1.4 | — | 6.5 ±0.1 | — | — | 11.0 ±0.3 | 34.5 ±1.0 | 39.4 ±2.4 | 1.22× |
| exprtree | 3.1 ±0.5 | — | — | 5.5 ±0.2 | — | 5.5 ±0.1 | — | 11.1 ±0.2 | 16.5 ±1.2 | — | 6.0 ±0.1 | — | — | — | 25.6 ±1.5 | — | 0.56× |
| factorial | 40.0 ±0.3 | — | 6.7 ±0.7 | 40.1 ±0.6 | — | 40.2 ±0.6 | — | 41.4 ±3.7 | 63.5 ±2.1 | — | 40.4 ±0.6 | — | — | 56.6 ±0.4 | 609.5 ±7.6 | 491.8 ±15.7 | 1.00× |
| fib | 27.3 ±0.3 | — | 38.8 ±15.0 | 27.4 ±0.3 | — | 27.1 ±3.1 | — | 27.6 ±1.0 | 63.3 ±1.7 | — | 27.5 ±0.3 | 27.7 ±3.1 | 27.7 ±0.6 | 31.3 ±0.3 | 68.5 ±5.3 | 29.2 ±2.1 | 1.00× |
| gcdsum | 91.1 ±17.1 | — | 15.3 ±1.7 | 87.0 ±0.9 | — | 88.2 ±5.6 | — | 88.7 ±1.2 | 121.8 ±3.4 | — | 87.1 ±0.9 | — | — | 91.1 ±5.4 | 106.3 ±1.9 | 63.6 ±1.6 | 1.05× |
| hanoi | 52.3 ±0.5 | — | — | 68.0 ±0.7 | — | 67.8 ±0.8 | — | 68.2 ±0.7 | 84.2 ±4.6 | — | 68.2 ±2.9 | — | — | 73.0 ±0.7 | 78.3 ±2.3 | — | 0.77× |
| isqrt | 11.7 ±0.3 | — | 3.5 ±0.2 | 14.7 ±0.3 | — | 14.8 ±0.3 | — | 13.5 ±0.5 | 54.0 ±3.8 | — | 16.6 ±0.3 | — | — | 19.5 ±0.4 | 37.2 ±1.3 | 30.2 ±1.6 | 0.79× |
| josephus | 36.5 ±4.5 | — | — | 35.6 ±0.7 | — | 36.0 ±0.5 | — | 35.5 ±0.3 | 52.8 ±1.8 | — | 36.3 ±0.7 | — | — | 53.5 ±1.1 | 55.5 ±4.3 | — | 1.03× |
| listops | — | — | — | 1.4 ±0.1 | — | 1.4 ±0.1 | — | 1.8 ±0.2 | 17.0 ±2.5 | — | 4.5 ±0.1 | — | — | — | 19.2 ±1.4 | — | |
| mutual | 16.6 ±2.4 | — | 3.9 ±0.3 | 16.9 ±0.8 | — | 15.8 ±0.7 | — | 17.2 ±0.8 | 40.7 ±2.3 | — | 16.1 ±0.5 | — | — | 6.4 ±0.3 | 21.8 ±1.9 | 21.7 ±1.8 | 0.98× |
| nestedloop | 53.3 ±0.7 | — | — | 53.1 ±0.6 | — | 53.0 ±0.7 | — | 54.2 ±3.3 | 75.1 ±3.8 | — | 53.4 ±0.6 | 53.7 ±0.6 | 53.6 ±0.9 | 76.9 ±0.7 | 60.6 ±1.5 | 41.5 ±2.1 | 1.00× |
| pascal | 33.8 ±0.4 | — | — | 33.7 ±0.4 | — | 34.0 ±0.5 | — | 34.0 ±0.5 | 87.2 ±2.1 | — | 34.0 ±0.6 | — | — | 39.4 ±0.6 | 255.4 ±3.5 | 68.2 ±6.9 | 1.00× |
| powmod | 30.7 ±4.4 | — | 7.6 ±1.3 | 30.8 ±5.5 | — | 28.8 ±0.4 | — | 28.6 ±0.3 | 70.2 ±6.1 | — | 28.6 ±0.4 | — | — | 63.1 ±1.5 | 1515.8 ±12.5 | 816.5 ±1.2 | 1.00× |
| primes | 7.9 ±0.2 | — | 2.8 ±0.1 | 8.0 ±0.2 | — | 7.9 ±0.1 | — | 8.6 ±0.2 | 28.5 ±1.1 | — | 8.0 ±0.2 | 8.6 ±1.1 | 8.2 ±0.2 | 12.9 ±0.3 | 28.0 ±1.0 | 25.2 ±1.6 | 0.99× |
| tak | 36.3 ±0.3 | — | 36.7 ±0.5 | 43.0 ±0.6 | — | 42.9 ±0.3 | — | 43.3 ±0.5 | 101.9 ±4.4 | — | 43.2 ±0.6 | — | — | 47.5 ±0.3 | 103.2 ±6.0 | 50.6 ±3.8 | 0.84× |
| textstats | 2.5 ±0.2 | — | — | 2.5 ±0.1 | — | 2.4 ±0.1 | — | 2.5 ±0.1 | 24.9 ±5.3 | — | 4.2 ±0.2 | — | — | 9.6 ±0.3 | 29.6 ±1.5 | 27.5 ±2.2 | 1.01× |
| wordfreq | 4.0 ±0.1 | 1.6 ±0.1 | — | 1.7 ±0.1 | — | 1.7 ±0.1 | 2.8 ±0.1 | 5.8 ±0.3 | 16.6 ±0.8 | — | 20.8 ±0.8 | 5.7 ±0.7 | 4.7 ±0.3 | 11.3 ±0.6 | 21.1 ±1.8 | 25.4 ±3.4 | 2.36× |
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.
koruc build (ReleaseFast)koruc build (ReleaseFast) — flat fold/identity portkoruc build (ReleaseFast) — [parallel]-annotated port (fold split / fork-join)cc -O2gcc -O3 (real GCC only — ABSENT when gcc is clang)clang -O3rustc -C opt-level=3 -C overflow-checks=offghc -O2ocamlopt -O3 -unsafeosprey --compile (release)cc -O2 (hand-rolled string map)c3c compile -O5odin build -o:speedmojo build (default -O3)bend build → native via clang (BendRT)bend build → native via clang — parallel-fork variantApple clang version 21.0.0 (clang-2100.0.123.102)Apple clang version 21.0.0 (clang-2100.0.123.102)rustc 1.96.0-nightly (b41f22de2 2026-03-08)ghc 9.10.3osprey 0.0.0-devApple clang version 21.0.0 (clang-2100.0.123.102)C3 Compiler Version: 0.8.3/Users/larsde/src/odin/odin version dev-2026-08:3e159a4Mojo 1.2.0.dev2026091605 (9a2c5cbe)bend 2.0.5bend 2.0.5MEASURED 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
The Primes drag-race sieve — where "faithful" earned its capital letters, and what a category boundary does to a comparison.
Dense numeric workloads through std/kernel — idiomatic high-level Koru against hand-specialized C and Rust.
The Orisha HTTP server under load, measured against nginx on the same box.
The register-machine story: recursion the compiler proves is a loop, and what that does to the emitted code.
How small the artifacts get — binary size and deployment weight.
The comptime interpreter, measured honestly while it is still slow. Parked, red, and on the page anyway — that is the point of the page.