The numbers

Four programs written the same way in five languages, timed on one machine on one day: the median wall time of several runs, in seconds, smaller is better. Each runs for about a second in the compiled languages, so starting the process is noise rather than the measurement. What each program measures, the rules, and how to run them yourself are in bench/; the Bench workflow regenerates this page on a GitHub runner weekly and at every tag, and fails when Nexium's time, as a multiple of C's in the same run, grows by a quarter.

Measured 2026-09-25 on GitHub Actions 1000009041, Linux-6.17.0-1022-azure-x86_64-with-glibc2.39, x86_64; 7 runs each, three for a program over five seconds.

programnexium safenexium fastcrustgopython
fib1.3220.7780.3890.7781.34328.869
nbody0.6560.6550.5900.6770.70848.540
sieve0.6200.6010.4820.5260.5294.295
words1.1631.1150.5710.9741.1223.596

The same, as multiples of C's time (1.00 is as fast as C):

programnexium safenexium fastrustgopython
fib3.402.002.003.4574.21
nbody1.111.111.151.2082.24
sieve1.291.251.091.108.91
words2.041.951.711.976.30

Nexium is built twice: safe keeps its overflow and bounds checks (what nx bench and nx ship build unless told otherwise), fast (--mode fast) leaves them out. C is built with -O2, Rust with -O (which keeps its bounds checks), Go and Python as they come.

toolversion
nexiumnx 1.3.1 (Annapurna: Couzy)
cgcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
rustrustc 1.98.1 (48a229cea 2026-09-01)
gogo version go1.23.12 linux/amd64
pythonPython 3.12.3