Zig VS Rust benchmarks

Current benchmark data was generated on Wed May 25 2022, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz (Model 85)

* -m in a file name stands for multi-threading or multi-processing

* -i in a file name stands for direct intrinsics usage. (Usage of simd intrinsics via libraries is not counted)

* -ffi in a file name stands for non-stdlib FFI usage

* (You may find time < time(user) + time(sys) for some non-parallelized programs, the overhead is from GC or JIT compiler, which are allowed to take advantage of multi-cores as that's more close to real-world scenarios.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4.rs 1628ms 114ms 33.8MB 1600ms 10ms rustc 1.61.0
rust 5.rs 1902ms 27ms 33.9MB 1867ms 17ms rustc 1.61.0
rust 3.rs 1939ms 119ms 49.8MB 1910ms 13ms rustc 1.61.0
zig 1.zig timeout 0.0ms 0.0MB 0ms 0ms zig 0.10.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4.rs 138ms 1.4ms 5.7MB 120ms 0ms rustc 1.61.0
rust 3.rs 166ms 0.5ms 7.7MB 153ms 0ms rustc 1.61.0
rust 5.rs 168ms 1.0ms 5.7MB 160ms 0ms rustc 1.61.0
zig 1.zig 3757ms 23ms 8.0MB 3033ms 690ms zig 0.10.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 129ms 10ms 3.6MB 117ms 0ms rustc 1.61.0
rust 2.rs 538ms 2.3ms 3.6MB 527ms 0ms rustc 1.61.0
zig 1.zig timeout 0.0ms 0.0MB 0ms 0ms zig 0.10.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 38ms 0.8ms 2.9MB 30ms 0ms rustc 1.61.0
rust 2.rs 89ms 1.0ms 3.3MB 77ms 0ms rustc 1.61.0
zig 1.zig 907ms 1.0ms 0.5MB 813ms 77ms zig 0.10.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 614ms 0.3ms 0.7MB 1183ms 0ms rustc 1.61.0
rust 2-im.rs 952ms 10.0ms 0.7MB 1840ms 0ms rustc 1.61.0
rust 5-m.rs 1115ms 2.2ms 0.7MB 2110ms 0ms rustc 1.61.0
zig 2-m.zig 1127ms 11ms 0.0MB 2177ms 0ms zig 0.10.0
rust 3-i.rs 1206ms 0.8ms 0.6MB 1200ms 0ms rustc 1.61.0
rust 2-i.rs 1674ms 0.6ms 0.6MB 1657ms 0ms rustc 1.61.0
rust 1-m.rs 2129ms 3.7ms 0.7MB 4100ms 3ms rustc 1.61.0
zig 2.zig 2403ms 4.4ms 0.0MB 2387ms 3ms zig 0.10.0
zig 1.zig 3174ms 228ms 0.1MB 3163ms 0ms zig 0.10.0
rust 1.rs 3896ms 25ms 0.6MB 3880ms 0ms rustc 1.61.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 63ms 1.8ms 0.7MB 100ms 0ms rustc 1.61.0
rust 2-im.rs 90ms 1.7ms 2.0MB 150ms 0ms rustc 1.61.0
zig 2-m.zig 99ms 0.3ms 0.0MB 170ms 0ms zig 0.10.0
rust 5-m.rs 99ms 3.9ms 0.6MB 170ms 0ms rustc 1.61.0
rust 3-i.rs 103ms 1.3ms 0.6MB 90ms 0ms rustc 1.61.0
rust 2-i.rs 143ms 1.4ms 0.6MB 130ms 0ms rustc 1.61.0
rust 1-m.rs 192ms 0.8ms 0.7MB 337ms 0ms rustc 1.61.0
zig 2.zig 197ms 14ms 0.0MB 183ms 0ms zig 0.10.0
zig 1.zig 269ms 8.6ms 0.1MB 257ms 0ms zig 0.10.0
rust 1.rs 312ms 22ms 0.6MB 300ms 0ms rustc 1.61.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 138ms 0.7ms 0.0MB 120ms 0ms zig 0.10.0
rust 5-m.rs 166ms 1.3ms 2.3MB 287ms 0ms rustc 1.61.0
rust 5c-m.rs 175ms 6.6ms 1.2MB 297ms 0ms rustc 1.63.0
rust 1c.rs 191ms 3.2ms 0.7MB 180ms 0ms rustc 1.63.0
rust 1.rs 234ms 0.2ms 0.6MB 223ms 0ms rustc 1.61.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 16ms 0.3ms 0.0MB 10ms 0ms zig 0.10.0
rust 1c.rs 24ms 1.7ms 0.6MB 13ms 0ms rustc 1.63.0
rust 5c-m.rs 26ms 1.8ms 1.3MB 27ms 0ms rustc 1.63.0
rust 5-m.rs 27ms 2.0ms 1.3MB 27ms 0ms rustc 1.61.0
rust 1.rs 27ms 1.1ms 1.9MB 20ms 0ms rustc 1.61.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 1.8ms 0.8ms 0.1MB 0ms 0ms zig 0.10.0
rust 1.rs 2.2ms 0.6ms 2.0MB 0ms 0ms rustc 1.63.0
rust 1.rs 2.4ms 0.5ms 0.6MB 0ms 0ms rustc 1.61.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 50ms 0.3ms 1.6MB 40ms 0ms zig 0.10.0
rust 0-unsafe.rs 59ms 7.6ms 0.6MB 47ms 0ms rustc 1.61.0
rust 1.rs 77ms 12ms 2.1MB 70ms 0ms rustc 1.61.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 145ms 2.9ms 1.6MB 133ms 0ms zig 0.10.0
rust 0-unsafe.rs 204ms 28ms 0.6MB 193ms 0ms rustc 1.61.0
rust 1.rs 285ms 29ms 2.2MB 277ms 0ms rustc 1.61.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 24ms 0.2ms 0.0MB 10ms 0ms zig 0.10.0
rust 0-unsafe.rs 32ms 0.5ms 0.6MB 20ms 0ms rustc 1.61.0
rust 1.rs 40ms 0.9ms 0.7MB 30ms 0ms rustc 1.61.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 349ms 20ms 3.1MB 337ms 0ms zig 0.10.0
rust 9.rs 362ms 2.1ms 4.9MB 350ms 0ms rustc 1.63.0
rust 8.rs 455ms 0.4ms 4.9MB 443ms 0ms rustc 1.61.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 17ms 1.0ms 0.0MB 10ms 0ms zig 0.10.0
rust 9.rs 18ms 0.4ms 0.6MB 10ms 0ms rustc 1.63.0
rust 8.rs 22ms 0.8ms 0.6MB 10ms 0ms rustc 1.61.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 817ms 1.1ms 33.8MB 787ms 10ms rustc 1.61.0
zig 1.zig timeout 0.0ms 0.0MB 0ms 0ms zig 0.10.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 167ms 1.9ms 9.9MB 153ms 0ms rustc 1.61.0
zig 1.zig timeout 0.0ms 0.0MB 0ms 0ms zig 0.10.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 188ms 0.3ms 0.6MB 180ms 0ms rustc 1.61.0
zig 2.zig 255ms 2.2ms 0.0MB 240ms 0ms zig 0.10.0
rust 7-i.rs 276ms 22ms 0.6MB 263ms 0ms rustc 1.61.0
rust 3.rs 301ms 0.1ms 0.6MB 290ms 0ms rustc 1.63.0
rust 2.rs 337ms 0.4ms 0.6MB 330ms 0ms rustc 1.61.0
zig 1.zig 383ms 3.0ms 0.0MB 370ms 0ms zig 0.10.0
rust 1.rs 408ms 10ms 0.6MB 400ms 0ms rustc 1.61.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 23ms 0.4ms 0.6MB 10ms 0ms rustc 1.61.0
rust 7-i.rs 27ms 0.1ms 0.6MB 20ms 0ms rustc 1.61.0
zig 2.zig 29ms 2.9ms 0.0MB 20ms 0ms zig 0.10.0
rust 3.rs 32ms 1.3ms 0.6MB 20ms 0ms rustc 1.63.0
rust 2.rs 36ms 2.0ms 0.6MB 30ms 0ms rustc 1.61.0
zig 1.zig 41ms 1.0ms 0.0MB 30ms 0ms zig 0.10.0
rust 1.rs 41ms 2.7ms 2.1MB 30ms 0ms rustc 1.61.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 378ms 1.9ms 4.9MB 367ms 0ms zig 0.10.0
rust 2.rs 460ms 2.0ms 6.6MB 440ms 0ms rustc 1.61.0
zig 1.zig 1136ms 42ms 39.1MB 1107ms 13ms zig 0.10.0
rust 1.rs 1182ms 8.4ms 40.9MB 1157ms 7ms rustc 1.61.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 82ms 4.7ms 1.1MB 70ms 0ms zig 0.10.0
rust 2.rs 105ms 1.2ms 3.2MB 90ms 0ms rustc 1.61.0
zig 1.zig 119ms 7.8ms 9.6MB 103ms 0ms zig 0.10.0
rust 1.rs 127ms 0.8ms 11.7MB 110ms 0ms rustc 1.61.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 1740ms 1.0ms 2.9MB 1573ms 147ms rustc 1.61.0
rust 2.rs 1804ms 7.3ms 2.7MB 1733ms 60ms rustc 1.61.0
zig 1.zig timeout 0.0ms 0.0MB 0ms 0ms zig 0.10.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 375ms 1.1ms 2.7MB 353ms 7ms rustc 1.61.0
rust 2.rs 408ms 1.2ms 2.5MB 400ms 0ms rustc 1.61.0
zig 1.zig 2845ms 10ms 0.4MB 1060ms 1770ms zig 0.10.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 872ms 1.5ms 2.6MB 1613ms 3ms rustc 1.63.0
rust 7-m.rs 893ms 2.6ms 2.2MB 1717ms 0ms rustc 1.61.0
zig 2-m.zig 893ms 1.7ms 0.3MB 1660ms 0ms zig 0.10.0
rust 8.rs 1518ms 1.1ms 2.5MB 1510ms 0ms rustc 1.63.0
zig 2.zig 1660ms 114ms 0.0MB 1650ms 0ms zig 0.10.0
rust 2-m.rs 1706ms 54ms 2.1MB 3290ms 7ms rustc 1.61.0
rust 7.rs 1722ms 3.0ms 2.2MB 1710ms 0ms rustc 1.61.0
zig 1.zig 3381ms 16ms 0.1MB 3370ms 0ms zig 0.10.0
rust 2.rs timeout 0.0ms 0.0MB 0ms 0ms rustc 1.61.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 220ms 6.5ms 2.4MB 397ms 0ms rustc 1.63.0
zig 2-m.zig 230ms 1.2ms 0.2MB 410ms 0ms zig 0.10.0
rust 7-m.rs 233ms 1.5ms 0.7MB 423ms 0ms rustc 1.61.0
rust 7.rs 416ms 29ms 0.6MB 403ms 0ms rustc 1.61.0
zig 2.zig 420ms 28ms 0.0MB 413ms 0ms zig 0.10.0
rust 8.rs 432ms 0.5ms 2.2MB 420ms 0ms rustc 1.63.0
rust 2-m.rs 435ms 7.8ms 2.3MB 820ms 0ms rustc 1.61.0
zig 1.zig 850ms 1.6ms 0.1MB 840ms 0ms zig 0.10.0
rust 2.rs 1371ms 0.7ms 0.6MB 1360ms 0ms rustc 1.61.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 60ms 1.7ms 2.3MB 100ms 0ms rustc 1.63.0
rust 7-m.rs 64ms 0.6ms 0.7MB 100ms 0ms rustc 1.61.0
zig 2-m.zig 65ms 2.2ms 0.2MB 93ms 0ms zig 0.10.0
zig 2.zig 100ms 0.4ms 0.0MB 90ms 0ms zig 0.10.0
rust 7.rs 103ms 7.6ms 0.6MB 93ms 0ms rustc 1.61.0
rust 8.rs 107ms 6.1ms 2.2MB 97ms 0ms rustc 1.63.0
rust 2-m.rs 115ms 3.3ms 0.7MB 200ms 0ms rustc 1.61.0
zig 1.zig 226ms 22ms 0.1MB 213ms 0ms zig 0.10.0
rust 2.rs 391ms 0.6ms 0.6MB 380ms 0ms rustc 1.61.0