Nim 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
nim 2.nim 3281ms 50ms 35.2MB 3253ms 13ms nim 1.6.6
nim 2.nim 3344ms 37ms 34.2MB 3320ms 3ms nim/clang 1.6.6

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
nim 2.nim 288ms 21ms 5.7MB 273ms 0ms nim/clang 1.6.6
nim 2.nim 304ms 1.5ms 5.5MB 290ms 0ms nim 1.6.6

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 915ms 27ms 6.3MB 1760ms 17ms rustc 1.61.0
rust 5-m.rs 1033ms 130ms 5.7MB 1983ms 30ms rustc 1.61.0
rust 3.rs 1831ms 4.5ms 6.5MB 1777ms 37ms rustc 1.61.0
rust 4.rs 3182ms 1.1ms 4.5MB 3170ms 0ms rustc 1.61.0
rust 1-m.rs 3399ms 14ms 5.8MB 6590ms 83ms rustc 1.61.0
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 85ms 15ms 3.0MB 137ms 7ms rustc 1.61.0
rust 3.rs 113ms 0.3ms 3.1MB 100ms 0ms rustc 1.61.0
rust 5-m.rs 120ms 13ms 3.2MB 200ms 0ms rustc 1.61.0
rust 4.rs 208ms 0.2ms 2.7MB 200ms 0ms rustc 1.61.0
rust 1-m.rs 234ms 2.8ms 2.8MB 427ms 7ms rustc 1.61.0
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

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
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

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
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
nim 2.nim 235ms 16ms 0.7MB 223ms 0ms nim 1.6.6
nim 2.nim 284ms 20ms 0.9MB 270ms 0ms nim/clang 1.6.6
nim 1.nim 642ms 2.5ms 1.0MB 560ms 70ms nim/clang 1.6.6
nim 1.nim 686ms 49ms 0.7MB 600ms 70ms nim 1.6.6

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1c.rs 24ms 1.7ms 0.6MB 13ms 0ms rustc 1.63.0
nim 2.nim 24ms 0.5ms 0.7MB 13ms 0ms nim 1.6.6
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
nim 2.nim 28ms 0.1ms 0.9MB 20ms 0ms nim/clang 1.6.6
nim 1.nim 71ms 4.9ms 0.7MB 57ms 0ms nim 1.6.6
nim 1.nim 76ms 1.0ms 0.9MB 57ms 3ms nim/clang 1.6.6

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1.5ms 0.3ms 2.0MB 0ms 0ms nim/clang 1.6.6
nim 1.nim 1.7ms 0.6ms 0.7MB 0ms 0ms nim 1.6.6
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

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 216ms 54ms 47.0MB 120ms 130ms rustc 1.61.0
rust 2-m.rs 557ms 7.6ms 114.0MB 317ms 557ms rustc 1.61.0
rust 1-http2.rs 814ms 173ms 81.0MB 937ms 413ms rustc 1.61.0
nim 1.nim 899ms 3.5ms 94.4MB 447ms 420ms nim/clang 1.6.6
nim 1.nim 926ms 6.7ms 94.0MB 493ms 397ms nim 1.6.6
rust 2-http2.rs timeout 0.0ms 0.0MB 0ms 0ms rustc 1.61.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 75ms 19ms 15.7MB 27ms 23ms rustc 1.61.0
nim 1.nim 134ms 8.4ms 18.7MB 60ms 57ms nim/clang 1.6.6
rust 2.rs 135ms 13ms 29.9MB 33ms 103ms rustc 1.61.0
nim 1.nim 145ms 1.0ms 17.8MB 70ms 60ms nim 1.6.6
rust 2-http2.rs 292ms 30ms 28.7MB 400ms 87ms rustc 1.61.0
rust 1-http2.rs 365ms 5.4ms 28.5MB 520ms 103ms rustc 1.61.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
nim 2.nim 148ms 0.5ms 0.9MB 140ms 0ms nim/clang 1.6.6
nim 2.nim 159ms 0.7ms 0.7MB 150ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
nim 2.nim 422ms 30ms 0.9MB 405ms 0ms nim/clang 1.6.6
nim 2.nim 467ms 0.4ms 0.7MB 460ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
nim 2.nim 65ms 0.1ms 0.9MB 53ms 0ms nim/clang 1.6.6
nim 2.nim 68ms 0.3ms 0.7MB 60ms 0ms nim 1.6.6
nim 1.nim 467ms 0.9ms 0.7MB 457ms 0ms nim 1.6.6
nim 1.nim 485ms 0.9ms 0.9MB 473ms 0ms nim/clang 1.6.6

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
nim 1.nim 485ms 35ms 4.9MB 470ms 0ms nim/clang 1.6.6
nim 1.nim 883ms 1.7ms 4.4MB 870ms 0ms nim 1.6.6

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
nim 1.nim 22ms 1.9ms 1.0MB 10ms 0ms nim/clang 1.6.6
nim 1.nim 40ms 1.2ms 0.7MB 30ms 0ms nim 1.6.6

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
nim 1.nim 1385ms 10ms 35.0MB 1363ms 3ms nim 1.6.6
nim 1.nim 1590ms 8.8ms 35.1MB 1563ms 7ms nim/clang 1.6.6

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
nim 1.nim 322ms 21ms 9.3MB 307ms 0ms nim 1.6.6
nim 1.nim 338ms 0.6ms 10.0MB 323ms 0ms nim/clang 1.6.6

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
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
rust 1.rs 408ms 10ms 0.6MB 400ms 0ms rustc 1.61.0
nim 2.nim 418ms 30ms 0.9MB 403ms 0ms nim 1.6.6
nim 2.nim 437ms 11ms 0.9MB 427ms 0ms nim/clang 1.6.6

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
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
rust 1.rs 41ms 2.7ms 2.1MB 30ms 0ms rustc 1.61.0
nim 2.nim 43ms 4.2ms 1.0MB 33ms 0ms nim 1.6.6
nim 2.nim 46ms 0.8ms 1.0MB 37ms 0ms nim/clang 1.6.6

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 460ms 2.0ms 6.6MB 440ms 0ms rustc 1.61.0
nim 2.nim 663ms 1.3ms 6.6MB 650ms 0ms nim/clang 1.6.6
nim 2.nim 776ms 0.8ms 6.1MB 760ms 0ms nim 1.6.6
rust 1.rs 1182ms 8.4ms 40.9MB 1157ms 7ms rustc 1.61.0
nim 1.nim 1202ms 31ms 41.5MB 1180ms 7ms nim/clang 1.6.6
nim 1.nim 1255ms 71ms 40.4MB 1233ms 7ms nim 1.6.6

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 105ms 1.2ms 3.2MB 90ms 0ms rustc 1.61.0
nim 1.nim 126ms 0.4ms 11.1MB 110ms 0ms nim 1.6.6
rust 1.rs 127ms 0.8ms 11.7MB 110ms 0ms rustc 1.61.0
nim 1.nim 130ms 0.8ms 11.4MB 120ms 0ms nim/clang 1.6.6
nim 2.nim 152ms 1.1ms 3.3MB 140ms 0ms nim/clang 1.6.6
nim 2.nim 180ms 0.1ms 3.0MB 167ms 0ms nim 1.6.6

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
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

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
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim 1.6.6
nim 1.nim timeout 0.0ms 0.0MB 0ms 0ms nim/clang 1.6.6

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
rust 8.rs 1518ms 1.1ms 2.5MB 1510ms 0ms rustc 1.63.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
nim 1.nim 3300ms 230ms 1.9MB 3287ms 0ms nim 1.6.6
nim 1.nim 3433ms 1.4ms 1.8MB 3420ms 0ms nim/clang 1.6.6
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
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
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
nim 1.nim 861ms 0.9ms 0.9MB 850ms 0ms nim/clang 1.6.6
nim 1.nim 862ms 1.5ms 0.9MB 850ms 0ms nim 1.6.6
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
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
nim 1.nim 210ms 15ms 1.0MB 200ms 0ms nim/clang 1.6.6
nim 1.nim 218ms 0.5ms 0.9MB 207ms 0ms nim 1.6.6
rust 2.rs 391ms 0.6ms 0.6MB 380ms 0ms rustc 1.61.0