Crystal VS Ruby benchmarks

Current benchmark data was generated on Wed Sep 28 2022, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz (Model 106)

* -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
crystal 1.cr 1546ms 11ms 66.3MB 1850ms 13ms crystal 1.5.1
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.2.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 131ms 2.0ms 13.1MB 133ms 7ms crystal 1.5.1
ruby 1-m.rb 876ms 6.5ms 391.6MB 1427ms 120ms truffleruby 22.2.0
ruby 1.rb 901ms 1.2ms 292.0MB 743ms 147ms ruby/yjit 3.1.2
ruby 1.rb 975ms 28ms 35.5MB 947ms 10ms ruby 3.1.2

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1885ms 14ms 20.5MB 1843ms 30ms crystal 1.5.1
ruby 1.rb 3086ms 135ms 336.7MB 2877ms 193ms ruby/yjit 3.1.2
ruby 1.rb 3557ms 173ms 80.1MB 3480ms 57ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 108ms 3.0ms 9.4MB 93ms 3ms crystal 1.5.1
ruby 1.rb 244ms 1.2ms 42.3MB 210ms 20ms ruby 3.1.2
ruby 1.rb 382ms 8.4ms 298.8MB 223ms 140ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 84ms 0.5ms 7.3MB 70ms 0ms crystal 1.5.1

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 32ms 0.7ms 7.3MB 13ms 0ms crystal 1.5.1

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 3970ms 3.9ms 5.0MB 3960ms 0ms crystal 1.5.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 322ms 2.7ms 3.0MB 310ms 0ms crystal 1.5.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 860ms 0.3ms 3.5MB 740ms 107ms crystal 1.5.1
crystal 1.cr 1054ms 0.6ms 14.7MB 907ms 133ms crystal 1.5.1
ruby 6.rb 2858ms 22ms 296.0MB 2707ms 133ms ruby/yjit 3.1.2
ruby 6.rb 4371ms 79ms 39.5MB 4343ms 17ms ruby 3.1.2
ruby 6.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.2.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 91ms 1.0ms 5.2MB 67ms 7ms crystal 1.5.1
crystal 1.cr 111ms 1.8ms 6.5MB 97ms 3ms crystal 1.5.1
ruby 6.rb 500ms 2.0ms 287.7MB 340ms 143ms ruby/yjit 3.1.2
ruby 6.rb 508ms 11ms 31.1MB 480ms 10ms ruby 3.1.2
ruby 6-m.rb 1299ms 7.3ms 329.0MB 2303ms 103ms truffleruby 22.2.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 3.5ms 0.7ms 3.2MB 0ms 0ms crystal 1.5.1
ruby 1.rb 40ms 2.2ms 146.9MB 22ms 18ms truffleruby 22.2.0
ruby 1.rb 70ms 0.7ms 29.9MB 48ms 10ms ruby 3.1.2
ruby 1.rb 233ms 0.5ms 286.6MB 96ms 124ms ruby/yjit 3.1.2

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2919ms 976ms 134.4MB 287ms 280ms crystal 1.5.1

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1309ms 5.1ms 31.3MB 37ms 47ms crystal 1.5.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 62ms 1.9ms 4.9MB 50ms 0ms crystal 1.5.1
crystal 1.cr 107ms 1.7ms 3.1MB 100ms 0ms crystal 1.5.1
ruby 1.rb 608ms 8.8ms 30.2MB 583ms 10ms ruby 3.1.2
ruby 1.rb 618ms 2.7ms 286.7MB 470ms 137ms ruby/yjit 3.1.2
ruby 1-m.rb 796ms 85ms 353.7MB 1177ms 83ms truffleruby 22.2.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 174ms 1.4ms 5.1MB 160ms 0ms crystal 1.5.1
crystal 1.cr 314ms 2.6ms 3.1MB 300ms 0ms crystal 1.5.1
ruby 1.rb 1376ms 7.7ms 286.7MB 1237ms 123ms ruby/yjit 3.1.2
ruby 1.rb 1392ms 11ms 339.9MB 1927ms 120ms truffleruby 22.2.0
ruby 1.rb 1664ms 3.2ms 30.2MB 1647ms 7ms ruby 3.1.2

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 31ms 0.6ms 4.9MB 20ms 0ms crystal 1.5.1
crystal 1.cr 53ms 0.6ms 3.1MB 47ms 0ms crystal 1.5.1
ruby 1.rb 335ms 4.9ms 29.9MB 320ms 3ms ruby 3.1.2
ruby 1.rb 427ms 1.6ms 286.6MB 283ms 127ms ruby/yjit 3.1.2
ruby 1-m.rb 536ms 8.3ms 301.8MB 823ms 80ms truffleruby 22.2.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 994ms 0.9ms 7.6MB 987ms 0ms crystal 1.5.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 45ms 0.2ms 6.4MB 33ms 0ms crystal 1.5.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1021ms 28ms 64.4MB 1143ms 27ms crystal 1.5.1
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.2.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 197ms 2.5ms 17.7MB 210ms 3ms crystal 1.5.1
ruby 1-m.rb 3188ms 28ms 570.1MB 5863ms 187ms truffleruby 22.2.0
ruby 1.rb 3898ms 7.4ms 300.7MB 3730ms 153ms ruby/yjit 3.1.2
ruby 1.rb 4753ms 18ms 44.3MB 4720ms 17ms ruby 3.1.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 509ms 0.5ms 4.9MB 500ms 0ms crystal 1.5.1
crystal 2.cr 540ms 0.8ms 3.0MB 530ms 0ms crystal 1.5.1
ruby 2.rb 1099ms 4.0ms 307.0MB 1397ms 73ms truffleruby 22.2.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
crystal 1.cr 56ms 1.9ms 4.9MB 43ms 0ms crystal 1.5.1
crystal 2.cr 60ms 0.4ms 4.8MB 47ms 0ms crystal 1.5.1
ruby 2-m.rb 424ms 5.3ms 303.8MB 673ms 80ms truffleruby 22.2.0
ruby 2.rb 2352ms 3.8ms 286.7MB 2193ms 140ms ruby/yjit 3.1.2
ruby 2.rb 3236ms 19ms 29.9MB 3217ms 0ms ruby 3.1.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 470ms 6.4ms 8.1MB 457ms 0ms crystal 1.5.1
crystal 1.cr 748ms 29ms 42.2MB 727ms 0ms crystal 1.5.1
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.2.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 111ms 1.8ms 6.3MB 97ms 3ms crystal 1.5.1
crystal 1.cr 155ms 0.2ms 12.9MB 143ms 0ms crystal 1.5.1
ruby 1.rb 3222ms 43ms 475.3MB 3633ms 153ms truffleruby 22.2.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
crystal 1.cr 2672ms 123ms 8.8MB 2923ms 230ms crystal 1.5.1
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.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 644ms 8.4ms 5.5MB 687ms 57ms crystal 1.5.1
ruby 1-m.rb 1915ms 11ms 398.1MB 3513ms 133ms truffleruby 22.2.0
ruby 1.rb 2479ms 4.7ms 162.9MB 2393ms 70ms ruby 3.1.2
ruby 1.rb 2632ms 6.4ms 420.7MB 2430ms 183ms ruby/yjit 3.1.2

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2462ms 7.1ms 194.3MB 2383ms 60ms crystal 1.5.1

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 253ms 0.8ms 22.8MB 233ms 7ms crystal 1.5.1

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr timeout 0.0ms 0.0MB 0ms 0ms crystal 1.5.1
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.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1504ms 0.6ms 4.1MB 1490ms 3ms crystal 1.5.1
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.2.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 382ms 2.0ms 5.6MB 370ms 0ms crystal 1.5.1
ruby 4.rb 2453ms 17ms 460.5MB 2993ms 143ms truffleruby 22.2.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