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-10-05 on GitHub Actions 1000010997, 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.7081.0050.5020.9461.73637.093
nbody0.8450.8450.7600.8670.91362.134
sieve0.6600.6330.5350.5460.5955.468
words1.2491.2290.7411.2541.4624.593

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

programnexium safenexium fastrustgopython
fib3.402.001.883.4673.85
nbody1.111.111.141.2081.70
sieve1.231.181.021.1110.23
words1.691.661.691.976.20

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.5.0 (Everest: Base Camp)
cgcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
rustrustc 1.99.0 (b940084d7 2026-09-28)
gogo version go1.23.12 linux/amd64
pythonPython 3.12.3