Rust VS Ruby benchmarks

Current benchmark data was generated on Wed Feb 08 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8171M 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 5c-m.rs 212ms 1.9ms 1.7MB 370ms 7ms rustc 1.69.0-nightly
rust 5-m.rs 224ms 5.8ms 1.7MB 400ms 0ms rustc 1.67.0
rust 1c.rs 257ms 0.4ms 1.0MB 247ms 0ms rustc 1.69.0-nightly
rust 1.rs 314ms 1.1ms 1.0MB 307ms 0ms rustc 1.67.0
ruby 6.rb 2828ms 11ms 43.6MB 2787ms 27ms ruby/yjit 3.2.0
ruby 6-m.rb 3219ms 20ms 392.0MB 5753ms 340ms truffleruby 22.3.1
ruby 6.rb timeout 0.0ms 42.9MB 4957ms 23ms ruby 3.2.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1c.rs 29ms 0.8ms 1.0MB 20ms 0ms rustc 1.69.0-nightly
rust 5-m.rs 32ms 0.5ms 1.7MB 40ms 0ms rustc 1.67.0
rust 5c-m.rs 33ms 3.0ms 1.7MB 37ms 3ms rustc 1.69.0-nightly
rust 1.rs 35ms 2.0ms 1.0MB 23ms 0ms rustc 1.67.0
ruby 6.rb 368ms 4.1ms 35.0MB 337ms 17ms ruby/yjit 3.2.0
ruby 6.rb 594ms 3.7ms 34.4MB 557ms 17ms ruby 3.2.0
ruby 6-m.rb 1035ms 11ms 324.2MB 1757ms 143ms truffleruby 22.3.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 2.5ms 0.6ms 1.9MB 0ms 0ms rustc 1.67.0
rust 1.rs 2.6ms 0.8ms 1.0MB 0ms 0ms rustc 1.69.0-nightly
ruby 1.rb 54ms 1.8ms 153.4MB 30ms 28ms truffleruby 22.3.1
ruby 1.rb 87ms 1.1ms 32.1MB 52ms 18ms ruby 3.2.0
ruby 1.rb 91ms 4.1ms 32.3MB 64ms 14ms ruby/yjit 3.2.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 9.rs 435ms 4.1ms 4.9MB 423ms 0ms rustc 1.69.0-nightly
rust 8.rs 512ms 3.2ms 4.9MB 497ms 0ms rustc 1.67.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 9.rs 20ms 0.1ms 1.0MB 10ms 0ms rustc 1.69.0-nightly
rust 8.rs 25ms 1.2ms 1.0MB 13ms 0ms rustc 1.67.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 255ms 0.3ms 1.0MB 237ms 0ms rustc 1.67.0
rust 7-i.rs 376ms 6.0ms 1.0MB 363ms 0ms rustc 1.67.0
rust 3.rs 404ms 0.9ms 1.1MB 390ms 0ms rustc 1.69.0-nightly
rust 2.rs 446ms 30ms 1.1MB 433ms 0ms rustc 1.67.0
rust 1.rs 503ms 8.7ms 1.1MB 490ms 0ms rustc 1.67.0
ruby 2.rb 1435ms 12ms 298.5MB 1713ms 100ms truffleruby 22.3.1
ruby 2.rb timeout 0.0ms 32.2MB 4970ms 13ms ruby 3.2.0
ruby 2.rb timeout 0.0ms 33.0MB 4963ms 13ms ruby/yjit 3.2.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 29ms 0.5ms 1.0MB 20ms 0ms rustc 1.67.0
rust 7-i.rs 41ms 0.3ms 1.0MB 30ms 0ms rustc 1.67.0
rust 3.rs 43ms 0.1ms 1.0MB 30ms 0ms rustc 1.69.0-nightly
rust 2.rs 45ms 0.5ms 1.0MB 37ms 0ms rustc 1.67.0
rust 1.rs 55ms 4.2ms 1.0MB 43ms 0ms rustc 1.67.0
ruby 2-m.rb 513ms 25ms 309.9MB 770ms 127ms truffleruby 22.3.1
ruby 2.rb 2528ms 32ms 33.1MB 2487ms 23ms ruby/yjit 3.2.0
ruby 2.rb 4072ms 73ms 32.2MB 4043ms 13ms ruby 3.2.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 1083ms 2.6ms 2.5MB 2073ms 3ms rustc 1.69.0-nightly
rust 7-m.rs 1085ms 14ms 2.1MB 2083ms 0ms rustc 1.67.0
rust 8.rs 2075ms 12ms 2.4MB 2067ms 0ms rustc 1.69.0-nightly
rust 7.rs 2099ms 40ms 2.2MB 2080ms 0ms rustc 1.67.0
rust 2-m.rs 2234ms 16ms 2.3MB 4307ms 3ms rustc 1.67.0
ruby 4.rb timeout 0.0ms 32.2MB 4967ms 10ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.9MB 4973ms 13ms ruby/yjit 3.2.0
ruby 4.rb timeout 0.0ms 404.5MB 5227ms 213ms truffleruby 22.3.1
rust 2.rs timeout 0.0ms 2.0MB 4987ms 0ms rustc 1.67.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7-m.rs 280ms 0.9ms 1.1MB 513ms 0ms rustc 1.67.0
rust 8-m.rs 280ms 2.6ms 2.2MB 510ms 0ms rustc 1.69.0-nightly
rust 7.rs 523ms 1.8ms 1.1MB 510ms 0ms rustc 1.67.0
rust 2-m.rs 561ms 0.8ms 2.1MB 1063ms 0ms rustc 1.67.0
rust 8.rs 565ms 14ms 2.1MB 553ms 0ms rustc 1.69.0-nightly
rust 2.rs 1966ms 23ms 1.0MB 1950ms 0ms rustc 1.67.0
ruby 4.rb timeout 0.0ms 32.2MB 4970ms 17ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4957ms 20ms ruby/yjit 3.2.0
ruby 4.rb timeout 0.0ms 460.5MB 5583ms 183ms truffleruby 22.3.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 77ms 1.9ms 1.1MB 127ms 0ms rustc 1.69.0-nightly
rust 7-m.rs 79ms 1.6ms 1.0MB 123ms 0ms rustc 1.67.0
rust 8.rs 137ms 2.1ms 1.1MB 123ms 0ms rustc 1.69.0-nightly
rust 7.rs 138ms 2.1ms 1.1MB 130ms 0ms rustc 1.67.0
rust 2-m.rs 151ms 2.4ms 1.0MB 267ms 0ms rustc 1.67.0
rust 2.rs 491ms 0.1ms 1.0MB 480ms 0ms rustc 1.67.0
ruby 4.rb 3275ms 18ms 360.5MB 3963ms 167ms truffleruby 22.3.1
ruby 4.rb timeout 0.0ms 32.0MB 4960ms 23ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.9MB 4967ms 10ms ruby/yjit 3.2.0

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4.rs 2015ms 13ms 33.7MB 1983ms 13ms rustc 1.67.0
rust 5.rs 2208ms 16ms 33.7MB 2180ms 13ms rustc 1.67.0
rust 3.rs 2379ms 46ms 49.8MB 2343ms 17ms rustc 1.67.0
ruby 1.rb timeout 0.0ms 72.6MB 4940ms 40ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 82.1MB 4923ms 57ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 471.3MB 8477ms 293ms truffleruby 22.3.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4.rs 179ms 1.1ms 5.7MB 170ms 0ms rustc 1.67.0
rust 5.rs 200ms 2.5ms 5.8MB 183ms 0ms rustc 1.67.0
rust 3.rs 211ms 2.3ms 7.7MB 190ms 0ms rustc 1.67.0
ruby 1.rb 718ms 9.3ms 40.7MB 673ms 30ms ruby/yjit 3.2.0
ruby 1.rb 1269ms 18ms 40.3MB 1233ms 20ms ruby 3.2.0
ruby 1-m.rb 1341ms 27ms 400.1MB 2230ms 170ms truffleruby 22.3.1

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 1161ms 4.4ms 6.2MB 2220ms 23ms rustc 1.67.0
rust 5-m.rs 1222ms 11ms 4.4MB 2347ms 30ms rustc 1.67.0
rust 3.rs 2254ms 3.6ms 6.2MB 2200ms 37ms rustc 1.67.0
rust 4.rs 3557ms 11ms 4.5MB 3540ms 0ms rustc 1.67.0
rust 1-m.rs 3918ms 52ms 4.9MB 7567ms 110ms rustc 1.67.0
ruby 1.rb 4296ms 59ms 82.8MB 4203ms 77ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 81.5MB 4900ms 73ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 1103.9MB 4400ms 1323ms truffleruby 22.3.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 105ms 17ms 2.9MB 173ms 7ms rustc 1.67.0
rust 3.rs 140ms 0.7ms 3.2MB 127ms 0ms rustc 1.67.0
rust 5-m.rs 141ms 26ms 2.7MB 243ms 7ms rustc 1.67.0
rust 4.rs 235ms 1.7ms 2.3MB 223ms 0ms rustc 1.67.0
rust 1-m.rs 271ms 6.3ms 2.9MB 480ms 13ms rustc 1.67.0
ruby 1.rb 292ms 1.0ms 44.9MB 247ms 33ms ruby/yjit 3.2.0
ruby 1.rb 341ms 17ms 44.5MB 290ms 33ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 1096.9MB 4293ms 1420ms truffleruby 22.3.1

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 165ms 0.5ms 3.6MB 150ms 0ms rustc 1.67.0
rust 2.rs 685ms 1.5ms 3.8MB 673ms 0ms rustc 1.67.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 46ms 0.8ms 2.9MB 37ms 0ms rustc 1.67.0
rust 2.rs 133ms 0.6ms 3.1MB 120ms 0ms rustc 1.67.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 750ms 1.1ms 1.0MB 1453ms 0ms rustc 1.67.0
rust 2-im.rs 1071ms 12ms 1.0MB 2070ms 0ms rustc 1.67.0
rust 5-m.rs 1427ms 22ms 1.1MB 2730ms 0ms rustc 1.67.0
rust 3-i.rs 1492ms 23ms 1.0MB 1473ms 0ms rustc 1.67.0
rust 2-i.rs 2205ms 4.9ms 1.0MB 2193ms 0ms rustc 1.67.0
rust 1-m.rs 2866ms 4.7ms 1.0MB 5527ms 0ms rustc 1.67.0
rust 1.rs 4707ms 34ms 1.0MB 4693ms 0ms rustc 1.67.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 70ms 0.7ms 1.0MB 117ms 0ms rustc 1.67.0
rust 2-im.rs 100ms 3.0ms 1.1MB 170ms 0ms rustc 1.67.0
rust 5-m.rs 125ms 1.7ms 1.0MB 220ms 0ms rustc 1.67.0
rust 3-i.rs 126ms 0.8ms 1.1MB 117ms 0ms rustc 1.67.0
rust 2-i.rs 191ms 8.6ms 1.1MB 183ms 0ms rustc 1.67.0
rust 1-m.rs 258ms 4.6ms 1.1MB 453ms 3ms rustc 1.67.0
rust 1.rs 394ms 1.2ms 1.1MB 383ms 0ms rustc 1.67.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 180ms 40ms 31.1MB 103ms 113ms rustc 1.67.0
rust 2-http2.rs 476ms 145ms 45.3MB 680ms 150ms rustc 1.67.0
rust 2-m.rs 614ms 14ms 105.6MB 340ms 603ms rustc 1.67.0
rust 1-http2.rs 1093ms 130ms 68.5MB 1283ms 613ms rustc 1.67.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 65ms 31ms 14.1MB 10ms 40ms rustc 1.67.0
rust 2.rs 137ms 5.4ms 22.4MB 30ms 107ms rustc 1.67.0
rust 2-http2.rs 353ms 76ms 22.7MB 487ms 107ms rustc 1.67.0
rust 1-http2.rs 457ms 18ms 25.5MB 650ms 127ms rustc 1.67.0

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 96ms 3.0ms 38.1MB 70ms 10ms rustc 1.67.0
rust 3.rs 96ms 2.4ms 36.2MB 73ms 10ms rustc 1.67.0
rust 1.rs 154ms 1.7ms 75.4MB 100ms 40ms rustc 1.67.0
ruby 1.rb 536ms 9.1ms 52.0MB 493ms 27ms ruby/yjit 3.2.0
ruby 1.rb 539ms 2.7ms 54.3MB 493ms 27ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 429.6MB 9103ms 237ms truffleruby 22.3.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 598ms 0.3ms 257.9MB 460ms 120ms rustc 1.67.0
rust 3.rs 611ms 20ms 258.6MB 460ms 137ms rustc 1.67.0
rust 1.rs 1117ms 11ms 605.2MB 760ms 340ms rustc 1.67.0
ruby 1.rb 4869ms 23ms 174.3MB 4730ms 123ms ruby/yjit 3.2.0
ruby 1.rb 4894ms 50ms 175.2MB 4767ms 110ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 404.1MB 9173ms 250ms truffleruby 22.3.1

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 422ms 12ms 28.2MB 733ms 17ms rustc 1.67.0
rust 8.rs 743ms 40ms 23.3MB 710ms 13ms rustc 1.67.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 57ms 1.0ms 15.7MB 77ms 3ms rustc 1.67.0
rust 8.rs 88ms 3.3ms 11.6MB 70ms 7ms rustc 1.67.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 65ms 6.5ms 1.8MB 57ms 0ms rustc 1.67.0
rust 1.rs 90ms 3.6ms 2.1MB 80ms 0ms rustc 1.67.0
ruby 1.rb 547ms 7.6ms 33.0MB 513ms 20ms ruby/yjit 3.2.0
ruby 1.rb 783ms 2.8ms 32.4MB 753ms 13ms ruby 3.2.0
ruby 1-m.rb 991ms 25ms 326.0MB 1430ms 137ms truffleruby 22.3.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 258ms 14ms 1.1MB 243ms 0ms rustc 1.67.0
rust 1.rs 369ms 2.5ms 1.0MB 360ms 0ms rustc 1.67.0
ruby 1.rb 1475ms 1.9ms 33.0MB 1447ms 13ms ruby/yjit 3.2.0
ruby 1.rb 1943ms 72ms 333.2MB 2463ms 183ms truffleruby 22.3.1
ruby 1.rb 2117ms 13ms 32.4MB 2083ms 17ms ruby 3.2.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 40ms 2.7ms 1.1MB 30ms 0ms rustc 1.67.0
rust 1.rs 60ms 1.7ms 1.0MB 50ms 0ms rustc 1.67.0
ruby 1.rb 319ms 2.1ms 32.8MB 290ms 13ms ruby/yjit 3.2.0
ruby 1.rb 426ms 2.6ms 32.3MB 397ms 10ms ruby 3.2.0
ruby 1-m.rb 739ms 68ms 311.2MB 1117ms 130ms truffleruby 22.3.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 1082ms 5.4ms 33.7MB 1050ms 17ms rustc 1.67.0
ruby 1.rb timeout 0.0ms 96.5MB 4910ms 73ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 97.0MB 4913ms 70ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 511.3MB 9013ms 283ms truffleruby 22.3.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 226ms 4.6ms 9.9MB 207ms 0ms rustc 1.67.0
ruby 1-m.rb 4229ms 57ms 589.3MB 7687ms 320ms truffleruby 22.3.1
ruby 1.rb 4784ms 22ms 53.7MB 4710ms 57ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 52.8MB 4943ms 37ms ruby 3.2.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 497ms 1.2ms 6.6MB 480ms 0ms rustc 1.67.0
rust 1.rs 1080ms 27ms 40.8MB 1050ms 13ms rustc 1.67.0
ruby 1.rb timeout 0.0ms 344.6MB 4780ms 197ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 344.9MB 4787ms 190ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 682.1MB 5030ms 217ms truffleruby 22.3.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 111ms 0.5ms 3.1MB 100ms 0ms rustc 1.67.0
rust 1.rs 147ms 6.8ms 11.6MB 133ms 0ms rustc 1.67.0
ruby 1.rb 3780ms 6.1ms 431.4MB 4390ms 167ms truffleruby 22.3.1
ruby 1.rb timeout 0.0ms 151.0MB 4900ms 77ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 151.5MB 4893ms 90ms ruby/yjit 3.2.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 1979ms 8.1ms 2.7MB 1890ms 73ms rustc 1.67.0
rust 1.rs 2064ms 22ms 2.8MB 1870ms 173ms rustc 1.67.0
ruby 1.rb timeout 0.0ms 159.1MB 4913ms 67ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 159.8MB 4903ms 73ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 430.8MB 9380ms 223ms truffleruby 22.3.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 441ms 3.4ms 2.4MB 423ms 0ms rustc 1.67.0
rust 2.rs 459ms 11ms 2.5MB 447ms 0ms rustc 1.67.0
ruby 1-m.rb 2551ms 7.6ms 419.5MB 4673ms 190ms truffleruby 22.3.1
ruby 1.rb 3739ms 3.7ms 158.8MB 3630ms 87ms ruby/yjit 3.2.0
ruby 1.rb 3746ms 14ms 158.0MB 3647ms 80ms ruby 3.2.0

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7.rs 672ms 6.4ms 77.6MB 867ms 30ms rustc 1.67.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7.rs 74ms 3.0ms 11.6MB 87ms 0ms rustc 1.67.0

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0.rs 164ms 0.4ms 1.1MB 153ms 0ms rustc 1.67.0
rust 1.rs 2258ms 26ms 1.1MB 2243ms 0ms rustc 1.67.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0.rs 45ms 1.5ms 1.1MB 33ms 0ms rustc 1.67.0
rust 1.rs 559ms 2.7ms 1.1MB 550ms 0ms rustc 1.67.0