Ruby 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
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.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
ruby 1.rb 959ms 4.8ms 35.5MB 927ms 20ms ruby 3.1.2
ruby 1.rb 1007ms 63ms 292.1MB 833ms 157ms ruby/yjit 3.1.2
ruby 1-m.rb 1154ms 16ms 374.0MB 1910ms 153ms truffleruby 22.1.0

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
ruby 1.rb 3734ms 38ms 336.8MB 3510ms 207ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

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
ruby 1.rb 274ms 3.5ms 42.3MB 230ms 23ms ruby 3.1.2
ruby 1.rb 439ms 2.5ms 298.8MB 270ms 150ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

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
ruby 6.rb 2592ms 2.6ms 296.0MB 2430ms 143ms ruby/yjit 3.1.2
ruby 6.rb 4521ms 77ms 39.5MB 4483ms 23ms ruby 3.1.2
ruby 6.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.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
rust 1.rs 27ms 1.1ms 1.9MB 20ms 0ms rustc 1.61.0
ruby 6.rb 520ms 7.9ms 31.2MB 493ms 13ms ruby 3.1.2
ruby 6.rb 534ms 1.0ms 287.7MB 367ms 147ms ruby/yjit 3.1.2
ruby 6-m.rb 1815ms 39ms 324.3MB 3240ms 147ms truffleruby 22.1.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
ruby 1.rb 47ms 1.2ms 138.4MB 20ms 30ms truffleruby 22.1.0
ruby 1.rb 68ms 3.3ms 29.9MB 46ms 8ms ruby 3.1.2
ruby 1.rb 255ms 11ms 286.7MB 106ms 136ms ruby/yjit 3.1.2

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
rust 1.rs 145ms 8.0ms 75.5MB 97ms 33ms rustc 1.61.0
ruby 1.rb 395ms 1.2ms 48.4MB 353ms 27ms ruby 3.1.2
ruby 1.rb 572ms 1.1ms 305.6MB 413ms 140ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
ruby 1.rb 3803ms 283ms 419.3MB 3567ms 220ms ruby/yjit 3.1.2
ruby 1.rb 3923ms 1.6ms 162.5MB 3800ms 103ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.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
ruby 1.rb 601ms 3.2ms 30.2MB 573ms 13ms ruby 3.1.2
ruby 1.rb 668ms 1.4ms 286.7MB 507ms 147ms ruby/yjit 3.1.2
ruby 1-m.rb 1118ms 34ms 324.3MB 1683ms 130ms truffleruby 22.1.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
ruby 1.rb 1454ms 1.2ms 286.8MB 1283ms 153ms ruby/yjit 3.1.2
ruby 1.rb 1827ms 148ms 30.2MB 1800ms 10ms ruby 3.1.2
ruby 1-m.rb 1929ms 66ms 366.3MB 2780ms 180ms truffleruby 22.1.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
ruby 1.rb 334ms 0.5ms 30.0MB 313ms 3ms ruby 3.1.2
ruby 1.rb 419ms 1.1ms 286.8MB 280ms 123ms ruby/yjit 3.1.2
ruby 1-m.rb 801ms 86ms 311.0MB 1277ms 97ms truffleruby 22.1.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
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.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
ruby 1-m.rb 3899ms 12ms 522.4MB 7130ms 253ms truffleruby 22.1.0
ruby 1.rb 3919ms 269ms 300.9MB 3750ms 147ms ruby/yjit 3.1.2
ruby 1.rb 4824ms 19ms 44.4MB 4790ms 17ms ruby 3.1.2

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
ruby 2.rb 1453ms 19ms 300.6MB 1823ms 127ms truffleruby 22.1.0
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

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
ruby 2-m.rb 547ms 17ms 293.9MB 873ms 107ms truffleruby 22.1.0
ruby 2.rb 2300ms 157ms 286.8MB 2147ms 137ms ruby/yjit 3.1.2
ruby 2.rb 2985ms 224ms 30.0MB 2960ms 10ms ruby 3.1.2

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
rust 1.rs 1182ms 8.4ms 40.9MB 1157ms 7ms rustc 1.61.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.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
rust 1.rs 127ms 0.8ms 11.7MB 110ms 0ms rustc 1.61.0
ruby 1.rb 4255ms 11ms 450.1MB 4693ms 197ms truffleruby 22.1.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

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
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.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
ruby 1-m.rb 2398ms 14ms 380.8MB 4403ms 170ms truffleruby 22.1.0
ruby 1.rb 2920ms 118ms 162.8MB 2817ms 83ms ruby 3.1.2
ruby 1.rb 3138ms 10ms 420.7MB 2910ms 213ms ruby/yjit 3.1.2

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
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.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
rust 2.rs 1371ms 0.7ms 0.6MB 1360ms 0ms rustc 1.61.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.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
rust 2.rs 391ms 0.6ms 0.6MB 380ms 0ms rustc 1.61.0
ruby 4.rb 2702ms 3.9ms 365.9MB 3373ms 150ms truffleruby 22.1.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2