Rust VS Go 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.)

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
go 3-m.go 209ms 1.8ms 2.9MB 370ms 0ms go 1.18.2
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
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
go 3.go 27ms 0.6ms 2.9MB 33ms 0ms go 1.18.2
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
go 1.go 1.1ms 0.5ms 0.0MB 0ms 0ms tinygo 0.23.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
go 1.go 3.0ms 0.5ms 2.8MB 0ms 0ms go 1.18.2

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
go 1.go 3792ms 3.3ms 5.3MB 3777ms 7ms go 1.18.2
go 1.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.23.0

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
go 1.go 159ms 0.3ms 2.9MB 150ms 0ms go 1.18.2
go 1.go 329ms 1.8ms 0.0MB 320ms 0ms tinygo 0.23.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
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
go 1.go 443ms 3.4ms 4.8MB 430ms 0ms go 1.18.2
go 1.go 705ms 0.5ms 0.0MB 697ms 0ms tinygo 0.23.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
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
go 1.go 54ms 2.0ms 2.8MB 43ms 0ms go 1.18.2
go 1.go 74ms 1.3ms 0.0MB 60ms 0ms tinygo 0.23.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
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
go 4-m.go 2219ms 4.5ms 5.3MB 4303ms 3ms go 1.18.2
go 1.go 4402ms 2.2ms 5.3MB 4397ms 0ms go 1.18.2
go 1.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.23.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
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
go 4-m.go 568ms 0.8ms 3.3MB 1077ms 0ms go 1.18.2
go 1.go 1113ms 2.6ms 3.3MB 1097ms 3ms go 1.18.2
rust 2.rs 1371ms 0.7ms 0.6MB 1360ms 0ms rustc 1.61.0
go 1.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.23.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
go 4-m.go 151ms 1.3ms 2.8MB 267ms 0ms go 1.18.2
go 1.go 284ms 0.9ms 2.8MB 270ms 0ms go 1.18.2
rust 2.rs 391ms 0.6ms 0.6MB 380ms 0ms rustc 1.61.0
go 1.go 1604ms 0.3ms 0.0MB 1590ms 0ms tinygo 0.23.0

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
go 1.go 3203ms 14ms 45.3MB 4650ms 50ms go 1.18.2
go 1.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.23.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
go 1.go 267ms 12ms 8.2MB 310ms 3ms go 1.18.2
go 1.go 418ms 1.6ms 6.6MB 410ms 0ms tinygo 0.23.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 906ms 100ms 15.3MB 1760ms 0ms go 1.18.2
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
go 1.go 1828ms 5.3ms 253.7MB 1727ms 87ms tinygo 0.23.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

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 69ms 9.2ms 5.4MB 113ms 0ms go 1.18.2
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
go 1.go 266ms 2.8ms 68.7MB 227ms 20ms tinygo 0.23.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
go 1.go 164ms 2.5ms 10.0MB 153ms 0ms go 1.18.2
rust 2.rs 538ms 2.3ms 3.6MB 527ms 0ms rustc 1.61.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
go 1.go 49ms 1.5ms 8.1MB 33ms 0ms go 1.18.2
rust 2.rs 89ms 1.0ms 3.3MB 77ms 0ms rustc 1.61.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
rust 3-i.rs 1206ms 0.8ms 0.6MB 1200ms 0ms rustc 1.61.0
go 3-m.go 1212ms 1.5ms 4.9MB 2340ms 0ms go 1.18.2
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
go 3.go 2794ms 3.0ms 50.1MB 2770ms 7ms tinygo 0.23.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
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
go 3-m.go 125ms 1.0ms 4.9MB 190ms 0ms go 1.18.2
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
rust 1.rs 312ms 22ms 0.6MB 300ms 0ms rustc 1.61.0
go 3.go 320ms 0.8ms 49.9MB 295ms 10ms tinygo 0.23.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 198ms 6.8ms 60.4MB 297ms 47ms go 1.18.2
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
go 2-m.go 716ms 81ms 175.4MB 700ms 487ms go 1.18.2
go 1-m.go 720ms 67ms 182.0MB 697ms 463ms go 1.18.2
rust 1-http2.rs 814ms 173ms 81.0MB 937ms 413ms rustc 1.61.0
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
go 1-http2.go 47ms 5.2ms 24.1MB 43ms 13ms go 1.18.2
rust 1.rs 75ms 19ms 15.7MB 27ms 23ms rustc 1.61.0
go 2.go 132ms 20ms 39.0MB 80ms 73ms go 1.18.2
rust 2.rs 135ms 13ms 29.9MB 33ms 103ms rustc 1.61.0
go 1.go 149ms 24ms 38.3MB 87ms 77ms go 1.18.2
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

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3.rs 82ms 0.4ms 36.4MB 57ms 10ms rustc 1.61.0
rust 2.rs 88ms 4.3ms 38.1MB 60ms 13ms rustc 1.61.0
go 2-ffi.go 90ms 1.2ms 44.8MB 70ms 17ms go 1.18.2
rust 1.rs 145ms 8.0ms 75.5MB 97ms 33ms rustc 1.61.0
go 1.go 178ms 0.5ms 20.6MB 173ms 0ms go 1.18.2

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 413ms 2.5ms 183.4MB 413ms 70ms go 1.18.2
rust 3.rs 491ms 0.6ms 258.3MB 383ms 90ms rustc 1.61.0
rust 2.rs 492ms 1.3ms 258.4MB 370ms 103ms rustc 1.61.0
rust 1.rs 918ms 44ms 605.1MB 637ms 260ms rustc 1.61.0
go 1.go 1010ms 46ms 111.0MB 997ms 33ms go 1.18.2

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 360ms 6.6ms 28.2MB 633ms 10ms rustc 1.61.0
rust 8.rs 637ms 8.6ms 23.9MB 610ms 13ms rustc 1.61.0
go 7-m.go 1376ms 28ms 41.2MB 2520ms 33ms go 1.18.2

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 50ms 3.4ms 16.1MB 63ms 7ms rustc 1.61.0
rust 8.rs 75ms 3.8ms 11.6MB 53ms 10ms rustc 1.61.0
go 7-m.go 229ms 3.1ms 21.3MB 357ms 10ms go 1.18.2

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
go 3.go 168ms 2.8ms 2.9MB 160ms 0ms go 1.18.2
go 3.go 173ms 0.5ms 0.3MB 160ms 0ms tinygo 0.23.0

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
go 3.go 490ms 1.6ms 2.9MB 477ms 0ms go 1.18.2
go 3.go 512ms 0.2ms 2.3MB 500ms 0ms tinygo 0.23.0

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
go 3.go 85ms 0.3ms 0.0MB 77ms 0ms tinygo 0.23.0
go 3.go 88ms 0.8ms 4.1MB 80ms 0ms go 1.18.2

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
go 1.go 2139ms 35ms 38.9MB 3060ms 33ms go 1.18.2
go 2.go 2329ms 6.4ms 42.1MB 3320ms 63ms go 1.18.2
go 1.go 4944ms 13ms 212.8MB 4870ms 57ms tinygo 0.23.0
go 2.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.23.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
go 1.go 443ms 6.3ms 12.3MB 610ms 10ms go 1.18.2
go 2.go 516ms 13ms 13.4MB 713ms 20ms go 1.18.2
go 1.go 1016ms 1.9ms 39.1MB 993ms 7ms tinygo 0.23.0
go 2.go 1278ms 2.3ms 51.9MB 1257ms 7ms tinygo 0.23.0

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
go 2.go 767ms 1.7ms 17.9MB 753ms 0ms tinygo 0.23.0
go 2.go 984ms 7.8ms 19.9MB 977ms 0ms go 1.18.2
rust 1.rs 1182ms 8.4ms 40.9MB 1157ms 7ms rustc 1.61.0
go 1.go 1255ms 42ms 73.6MB 1217ms 23ms go 1.18.2
go 1.go 1580ms 44ms 43.9MB 1560ms 7ms tinygo 0.23.0

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
go 1.go 117ms 2.7ms 22.1MB 100ms 0ms go 1.18.2
rust 1.rs 127ms 0.8ms 11.7MB 110ms 0ms rustc 1.61.0
go 1.go 148ms 1.5ms 12.9MB 137ms 0ms tinygo 0.23.0
go 2.go 181ms 0.3ms 4.9MB 167ms 0ms tinygo 0.23.0
go 2.go 228ms 0.9ms 7.6MB 213ms 0ms go 1.18.2

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1276ms 0.8ms 8.5MB 1253ms 7ms go 1.18.2
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

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 309ms 2.7ms 8.5MB 290ms 3ms go 1.18.2
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

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7.rs 534ms 33ms 77.5MB 703ms 20ms rustc 1.61.0
go 3.go timeout 0.0ms 0.0MB 0ms 0ms go 1.18.2
go 3.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.23.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7.rs 58ms 0.7ms 11.8MB 63ms 0ms rustc 1.61.0
go 3.go 2430ms 14ms 18.2MB 2413ms 30ms go 1.18.2
go 3.go timeout 0.0ms 0.0MB 0ms 0ms tinygo 0.23.0

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0.rs 126ms 8.2ms 0.7MB 117ms 0ms rustc 1.61.0
go 0-ffi.go 151ms 0.9ms 9.4MB 137ms 0ms go 1.18.2
rust 1.rs 1769ms 116ms 0.7MB 1757ms 0ms rustc 1.61.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0.rs 36ms 0.6ms 0.7MB 27ms 0ms rustc 1.61.0
go 0-ffi.go 51ms 0.8ms 11.5MB 33ms 0ms go 1.18.2
rust 1.rs 462ms 0.7ms 0.6MB 450ms 0ms rustc 1.61.0