Perl VS Ruby benchmarks

Current benchmark data was generated on Mon Apr 14 2025, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][4 cores] AMD EPYC 7763 64-Core Processor (Model 1)

* -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
ruby 1.rb 4815ms 21ms 109.4MB 4710ms 90ms ruby/yjit 3.4.2
perl 1.pl timeout 0.0ms 77.8MB 4957ms 30ms perl 5.40.1
ruby 1.rb timeout 0.0ms 70.5MB 4953ms 37ms ruby 3.4.2
ruby 1.rb timeout 0.0ms 758.8MB 6567ms 693ms truffleruby 24.2.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 492ms 5.0ms 20.4MB 467ms 10ms ruby/yjit 3.4.2
ruby 1-m.rb 537ms 66ms 418.7MB 1060ms 157ms truffleruby 24.2.0
ruby 1.rb 937ms 8.8ms 19.6MB 910ms 13ms ruby 3.4.2
perl 1.pl 1814ms 6.8ms 14.4MB 1800ms 0ms perl 5.40.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 6.rb 2050ms 4.6ms 23.0MB 2020ms 13ms ruby/yjit 3.4.2
ruby 6-m.rb 2229ms 245ms 437.5MB 5773ms 363ms truffleruby 24.2.0
perl 1.pl 3655ms 59ms 10.9MB 3640ms 0ms perl 5.40.1
ruby 6.rb 3848ms 19ms 22.4MB 3823ms 13ms ruby 3.4.2

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 6.rb 267ms 5.3ms 15.0MB 250ms 0ms ruby/yjit 3.4.2
perl 1.pl 377ms 6.8ms 6.6MB 363ms 0ms perl 5.40.1
ruby 6.rb 439ms 1.1ms 14.5MB 420ms 3ms ruby 3.4.2
ruby 6-m.rb 828ms 16ms 375.5MB 2057ms 180ms truffleruby 24.2.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
perl 1.pl 2.7ms 0.2ms 5.1MB 0ms 0ms perl 5.40.1
ruby 1.rb 35ms 0.5ms 141.8MB 14ms 24ms truffleruby 24.2.0
ruby 1.rb 51ms 1.1ms 12.9MB 38ms 0ms ruby 3.4.2
ruby 1.rb 53ms 1.6ms 13.1MB 38ms 2ms ruby/yjit 3.4.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 2.rb 825ms 4.5ms 309.8MB 1053ms 117ms truffleruby 24.2.0
perl 2.pl timeout 0.0ms 6.1MB 4990ms 0ms perl 5.40.1
ruby 2.rb timeout 0.0ms 12.9MB 4987ms 0ms ruby 3.4.2
ruby 2.rb timeout 0.0ms 13.5MB 4983ms 3ms ruby/yjit 3.4.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 2-m.rb 308ms 6.2ms 310.0MB 540ms 117ms truffleruby 24.2.0
ruby 2.rb 1062ms 3.2ms 13.5MB 1047ms 3ms ruby/yjit 3.4.2
ruby 2.rb 2806ms 75ms 12.9MB 2787ms 3ms ruby 3.4.2
perl 2.pl 2936ms 340ms 6.1MB 2927ms 0ms perl 5.40.1

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
perl 4.pl timeout 0.0ms 9.8MB 19750ms 10ms perl 5.40.1
ruby 4.rb timeout 0.0ms 13.0MB 4983ms 3ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.5MB 4983ms 7ms ruby/yjit 3.4.2
ruby 4.rb timeout 0.0ms 434.6MB 5167ms 233ms truffleruby 24.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 4.rb 4868ms 23ms 439.6MB 5153ms 217ms truffleruby 24.2.0
perl 4.pl timeout 0.0ms 10.1MB 19607ms 7ms perl 5.40.1
ruby 4.rb timeout 0.0ms 13.0MB 4987ms 3ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.5MB 4980ms 3ms ruby/yjit 3.4.2

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 4.rb 1435ms 5.1ms 375.6MB 1770ms 137ms truffleruby 24.2.0
perl 4-m.pl 3406ms 24ms 9.6MB 13197ms 10ms perl 5.40.1
ruby 4.rb timeout 0.0ms 13.0MB 4983ms 3ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.8MB 4980ms 3ms ruby/yjit 3.4.2