Benchmarks
By Christian Findlay
06 Nov 2026
Elapsed time and peak resident memory for 24 small programs, each written with the same algorithm in every language. A program must print its expected output before it is timed. The methodology , sources , harness and raw data are open.
Figure
What it is
CPU time
Mean wall-clock time over at least 10 runs after 3 warm-up runs (hyperfine -N), including process start-up and excluding compilation. The small figure below it is the standard deviation. Hover a cell for the median, minimum, maximum and run.
Peak memory
Highest resident set size over three runs. — means not measured: a WebAssembly run's RSS is the Wasmtime host's.
★ and bold
★ marks the lowest time in a row when it is an Osprey column; bold marks the lowest otherwise.
Figures come from the runs listed in the last table, on different dates and machines.
Osprey time relative to each language
For each program, Osprey's mean time is divided by the other language's mean time. Each row summarises those per-program ratios: their geometric mean, their median, and the geometric standard deviation, the factor by which a typical program differs from the geometric mean. 1.50× means Osprey took one and a half times as long; below 1× means it took less time.
Compared with Osprey backend Geometric mean Median Geometric SD Cases Rust Osprey (ARC) 1.56× 1.03× ×3.61 24 Osprey (GC) 1.97× 1.14× ×3.66 24 C Osprey (ARC) 1.86× 1.04× ×3.92 24 Osprey (GC) 2.34× 1.28× ×4.35 24 C# (AOT) Osprey (ARC) 1.34× 0.85× ×3.22 24 Osprey (GC) 1.69× 0.86× ×3.99 24 Dart (AOT) Osprey (ARC) 0.66× 0.60× ×3.23 24 Osprey (GC) 0.83× 0.63× ×4.00 24 Codon Osprey (ARC) 0.96× 0.80× ×2.56 24 Osprey (GC) 1.21× 0.85× ×2.92 24 OCaml Osprey (ARC) 1.29× 0.75× ×3.44 24 Osprey (GC) 1.63× 0.75× ×4.56 24 Haskell Osprey (ARC) 0.85× 0.59× ×3.16 24 Osprey (GC) 1.07× 0.63× ×4.06 24 Rust (wasm) Osprey (wasm) 1.27× 0.90× ×2.55 24
CPU time
Benchmark Osprey (ARC) Osprey (GC) Rust C C# (AOT) Dart (AOT) Codon OCaml Haskell Osprey (wasm) Rust (wasm) ackermann 122.3 ms±1.3 121.9 ms±1.2 129.3 ms±2.3 130.6 ms±1.8 132.4 ms±3.6 185.3 ms±2.2 137.9 ms±4.8 111.3 ms±0.5 65.3 ms±2.4 142.8 ms±1.6 145.5 ms±1.0 binarytrees 225.9 ms±10.3 1.216 s±0.013 1.967 s±0.686 891.5 ms±175.1 128.4 ms±1.1 128.6 ms±1.6 249.5 ms±4.9 52.3 ms±0.7 17.0 ms±1.7 371.5 ms±4.7 818.6 ms±8.9 coins 75.1 ms±0.6 75.1 ms±0.6 84.5 ms±1.2 79.8 ms±1.4 104.4 ms±1.4 126.0 ms±1.5 115.2 ms±20.3 103.3 ms±1.1 52.3 ms±2.8 103.0 ms±0.8 114.0 ms±1.7 collatz 51.0 ms±0.5 51.1 ms±0.6 13.4 ms±0.4 10.8 ms±0.2 59.3 ms±1.0 72.7 ms±11.2 26.2 ms±2.5 64.6 ms±9.2 40.2 ms±1.3 66.7 ms±0.7 25.4 ms±0.4 coprime 67.2 ms±0.7 67.2 ms±0.8 66.4 ms±0.8 65.0 ms±1.0 80.5 ms±1.9 111.6 ms±2.1 84.4 ms±3.4 119.4 ms±50.6 220.3 ms±56.8 77.4 ms±0.7 163.3 ms±35.8 digitsum 14.0 ms±0.4 13.9 ms±0.2 6.1 ms±0.5 6.1 ms±0.4 21.2 ms±3.5 32.8 ms±4.9 12.6 ms±1.4 19.5 ms±1.2 29.4 ms±2.9 28.9 ms±0.4 18.8 ms±1.4 exprtree 5.5 ms±0.2 23.5 ms±0.6 11.1 ms±1.2 6.1 ms±0.2 7.7 ms±1.8 15.8 ms±3.0 18.2 ms±5.6 5.1 ms±0.3 16.3 ms±0.8 13.3 ms±0.3 20.4 ms±0.4 factorial 30.8 ms±0.3 30.7 ms ★±0.3 35.6 ms±0.6 35.3 ms±0.4 37.4 ms±0.4 51.2 ms±1.1 50.2 ms±1.7 48.7 ms±0.5 53.5 ms±3.1 38.0 ms±0.5 48.6 ms±0.7 fib 20.6 ms ★±0.9 20.6 ms±0.9 29.2 ms±2.5 28.1 ms±2.5 43.3 ms±4.7 59.8 ms±5.7 32.9 ms±10.4 29.5 ms±2.7 56.5 ms±5.6 42.6 ms±1.0 49.4 ms±5.5 gcdsum 80.1 ms ★±0.5 80.1 ms±0.5 86.1 ms±5.8 86.5 ms±5.5 92.8 ms±3.1 122.0 ms±12.7 100.6 ms±3.3 107.7 ms±3.6 115.0 ms±7.1 88.4 ms±1.0 104.3 ms±6.7 hanoi 51.6 ms±5.9 50.1 ms±4.7 37.5 ms±1.4 38.5 ms±1.1 38.7 ms±2.1 103.9 ms±2.5 53.0 ms±2.9 62.9 ms±1.2 54.4 ms±3.9 75.4 ms±1.0 52.3 ms±1.4 isqrt 13.3 ms±1.2 13.3 ms±1.1 10.9 ms±0.1 10.6 ms±0.9 17.1 ms±0.8 32.5 ms±0.3 37.7 ms±1.7 20.6 ms±0.3 41.0 ms±1.2 27.3 ms±0.5 22.9 ms±0.6 josephus 29.1 ms±0.4 29.1 ms ★±0.5 33.8 ms±1.2 33.4 ms±0.4 35.9 ms±2.0 42.0 ms±1.0 45.5 ms±0.5 42.0 ms±0.8 44.5 ms±4.5 34.2 ms±0.4 44.4 ms±0.4 listops 4.2 ms±0.3 9.3 ms±0.2 1.5 ms±0.1 1.3 ms±0.1 3.3 ms±0.3 10.8 ms±0.5 9.2 ms±1.4 2.2 ms±0.3 16.6 ms±0.8 10.3 ms±0.3 12.5 ms±0.3 mergesort 268.8 ms±4.0 391.2 ms±2.5 3.4 ms±0.4 2.5 ms±0.2 3.8 ms±0.4 14.0 ms±1.7 13.3 ms±0.7 4.8 ms±0.3 16.3 ms±0.9 405.2 ms±3.4 14.9 ms±1.8 mutual 17.7 ms±0.6 17.7 ms±0.6 13.1 ms±0.3 12.9 ms±0.4 21.5 ms±0.4 335.0 ms±8.4 18.3 ms±0.8 29.1 ms±1.6 40.7 ms±1.2 22.6 ms±0.9 30.0 ms±0.3 nestedloop 44.1 ms ★±0.6 44.2 ms±1.0 46.4 ms±0.2 46.0 ms±0.2 48.4 ms±0.3 60.6 ms±0.3 60.8 ms±0.4 58.5 ms±0.2 65.2 ms±1.6 56.5 ms±2.0 62.9 ms±0.4 pascal 39.6 ms±1.1 39.1 ms±1.3 27.9 ms±0.9 28.2 ms±1.0 34.1 ms±0.7 65.2 ms±0.7 37.0 ms±1.2 45.1 ms±0.6 65.0 ms±2.6 69.1 ms±0.5 46.9 ms±0.4 powmod 28.7 ms±0.6 28.7 ms±0.5 27.4 ms±2.6 27.5 ms±2.6 40.1 ms±2.2 58.8 ms±1.4 52.8 ms±1.1 71.1 ms±3.6 65.4 ms±1.8 41.3 ms±0.5 39.5 ms±0.4 primes 6.3 ms±0.4 6.2 ms ★±0.2 7.1 ms±0.7 7.1 ms±0.9 10.7 ms±1.0 52.6 ms±2.6 13.3 ms±0.4 10.0 ms±1.8 18.7 ms±4.3 22.3 ms±0.3 21.0 ms±1.3 quicksort 150.9 ms±2.1 227.3 ms±2.7 4.1 ms±1.1 2.5 ms±0.5 6.3 ms±1.6 14.9 ms±2.6 13.3 ms±0.7 5.8 ms±0.5 16.6 ms±1.1 230.2 ms±1.3 14.8 ms±1.3 tak 31.9 ms ★±0.4 31.9 ms±0.4 37.5 ms±1.3 37.3 ms±0.5 40.5 ms±2.5 93.3 ms±2.7 48.6 ms±0.6 51.2 ms±1.4 75.0 ms±4.4 81.0 ms±0.6 92.0 ms±1.0 textstats 7.8 ms±0.3 7.5 ms±0.4 2.0 ms±0.1 2.2 ms±0.2 3.8 ms±0.2 11.4 ms±0.4 9.2 ms±0.3 4.0 ms±0.4 16.7 ms±1.5 13.1 ms±0.3 14.9 ms±6.2 wordfreq 25.2 ms±0.7 63.6 ms±1.6 9.1 ms±3.1 1.9 ms±2.8 3.3 ms±0.2 10.6 ms±0.3 12.6 ms±2.0 2.5 ms±0.2 16.4 ms±0.6 39.7 ms±1.1 15.7 ms±0.3
Peak memory
Benchmark Osprey (ARC) Osprey (GC) Rust C C# (AOT) Dart (AOT) Codon OCaml Haskell Osprey (wasm) Rust (wasm) ackermann 1.9 MiB 1.9 MiB 1.8 MiB 1.7 MiB 7.1 MiB 14.0 MiB 7.6 MiB 2.7 MiB 15.1 MiB — — binarytrees 2.9 MiB 17.8 MiB 3.0 MiB 2.2 MiB 16.1 MiB 22.5 MiB 14.4 MiB 5.2 MiB 11.1 MiB — — coins 1.5 MiB 1.6 MiB 1.6 MiB 1.5 MiB 6.8 MiB 13.9 MiB 7.4 MiB 2.3 MiB 11.1 MiB — — collatz 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.9 MiB 14.0 MiB 7.4 MiB 2.3 MiB 11.1 MiB — — coprime 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.8 MiB 14.0 MiB 7.4 MiB 2.3 MiB 11.1 MiB — — digitsum 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.9 MiB 14.0 MiB 7.4 MiB 2.3 MiB 11.1 MiB — — exprtree 3.5 MiB 22.3 MiB 2.7 MiB 11.5 MiB 15.2 MiB 22.5 MiB 14.5 MiB 6.1 MiB 11.4 MiB — — factorial 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.8 MiB 13.9 MiB 7.4 MiB 2.3 MiB 11.1 MiB — — fib 1.5 MiB ★ 1.6 MiB 2.1 MiB 1.6 MiB 6.8 MiB 13.9 MiB 7.4 MiB 2.2 MiB 11.2 MiB — — gcdsum 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.9 MiB 14.0 MiB 7.4 MiB 2.3 MiB 11.1 MiB — — hanoi 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.8 MiB 13.8 MiB 7.4 MiB 2.3 MiB 11.2 MiB — — isqrt 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.8 MiB 13.9 MiB 7.4 MiB 2.3 MiB 11.1 MiB — — josephus 1.5 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.8 MiB 13.8 MiB 7.3 MiB 2.3 MiB 11.1 MiB — — listops 2.2 MiB 8.0 MiB 1.7 MiB 1.5 MiB 7.1 MiB 14.3 MiB 8.6 MiB 2.6 MiB 11.4 MiB — — mergesort 2.2 MiB 8.8 MiB 2.1 MiB 1.7 MiB 10.7 MiB 16.5 MiB 13.7 MiB 5.1 MiB 11.3 MiB — — mutual 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.9 MiB 14.0 MiB 7.4 MiB 2.3 MiB 11.1 MiB — — nestedloop 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.8 MiB 13.9 MiB 7.3 MiB 2.2 MiB 11.1 MiB — — pascal 1.5 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.9 MiB 13.9 MiB 7.4 MiB 2.2 MiB 11.1 MiB — — powmod 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.9 MiB 14.0 MiB 7.4 MiB 2.3 MiB 11.1 MiB — — primes 1.6 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.9 MiB 14.0 MiB 7.4 MiB 2.2 MiB 11.1 MiB — — quicksort 2.0 MiB ★ 9.0 MiB 2.1 MiB 2.5 MiB 15.0 MiB 16.6 MiB 13.7 MiB 5.0 MiB 11.4 MiB — — tak 1.5 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.9 MiB 13.9 MiB 7.4 MiB 2.3 MiB 11.2 MiB — — textstats 1.7 MiB 1.6 MiB 1.6 MiB 1.4 MiB 6.8 MiB 14.0 MiB 7.5 MiB 2.3 MiB 11.4 MiB — — wordfreq 1.7 MiB ★ 9.8 MiB 2.2 MiB 1.8 MiB 6.8 MiB 14.0 MiB 7.5 MiB 2.3 MiB 11.4 MiB — —
Where each figure was measured
Measured CPU OS Toolchains Figures 2026-11-06 Apple M4 Max macOS 26.7.1 Osprey 67b766d1f, Clang 23.1.4, Wasmtime 46.0.1, hyperfine 1.20.0 Osprey (ARC), Osprey (GC), Osprey (wasm): every case 2026-11-05 Apple M4 Max macOS 26.7.1 Codon 0.20.6Built with -release; load average 15 to 22 during the run Codon: every case 2026-10-05 Apple M4 Max macOS 26.6 Clang 22.1.8, Rust 1.99.0, .NET 10.0.303, Dart 3.13.3, OCaml 5.4.1, GHC 9.14.1, Wasmtime 46.0.1 Rust, C, C# (AOT), Dart (AOT), OCaml, Haskell, Rust (wasm): mergesort, quicksort 2026-10-03 AMD Ryzen 9 3900X Linux (WSL2) Clang 21.1.8, Rust 1.98.1, GCC 15.2.0, Wasmtime 49.0.2Pinned to logical CPU 20 Rust, C: binarytrees, fib, wordfreq 2026-08-20 not recorded not recorded —Recovered from the 20 August 2026 results file; Rust (wasm) predates the 4 MiB stack budget Rust, C: every case except binarytrees, fib, mergesort, quicksort, wordfreq; C# (AOT), Dart (AOT), OCaml, Haskell, Rust (wasm): every case except mergesort, quicksort
make -C src/toolchain/benchmarks bench-osprey
BENCH_FILTER = wordfreq make -C src/toolchain/benchmarks bench
Each run replaces only the figures it measured and records its machine and toolchain versions.