Ruby VS Python benchmarks

Current benchmark data was generated on Mon May 19 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
python 1.py 1208ms 7.9ms 96.1MB 1143ms 53ms pypy 3.10.16
ruby 1-m.rb 4550ms 58ms 807.5MB 6423ms 470ms truffleruby 24.2.1
ruby 1.rb 4702ms 91ms 150.6MB 4603ms 87ms ruby/yjit 3.4.4
python 1.py timeout 0.0ms 40.9MB 4963ms 20ms cpython 3.13.3
python 1.py timeout 0.0ms 40.5MB 4757ms 230ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 70.4MB 4947ms 40ms ruby 3.4.4

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 97ms 2.2ms 68.8MB 70ms 13ms pypy 3.10.16
python 1.py 476ms 3.5ms 11.9MB 453ms 10ms pyston 3.8.12
ruby 1.rb 493ms 7.5ms 20.3MB 467ms 10ms ruby/yjit 3.4.4
ruby 1-m.rb 536ms 62ms 418.0MB 1057ms 167ms truffleruby 24.2.1
python 1.py 736ms 14ms 12.8MB 723ms 0ms cpython 3.13.3
ruby 1.rb 939ms 7.1ms 19.5MB 917ms 13ms ruby 3.4.4

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1227ms 12ms 104.8MB 1183ms 33ms pypy 3.10.16
ruby 1.rb 1437ms 31ms 63.8MB 1357ms 67ms ruby/yjit 3.4.4
ruby 1.rb 1867ms 6.6ms 63.0MB 1790ms 63ms ruby 3.4.4
python 1.py 2739ms 28ms 25.2MB 2720ms 7ms cpython 3.13.3
python 1.py timeout 0.0ms 17.4MB 4987ms 0ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 340.6MB 4643ms 1510ms truffleruby 24.2.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 152ms 2.8ms 25.8MB 120ms 20ms ruby/yjit 3.4.4
ruby 1.rb 181ms 2.5ms 25.0MB 147ms 17ms ruby 3.4.4
python 1.py 230ms 1.7ms 84.9MB 190ms 27ms pypy 3.10.16
python 1.py 234ms 2.7ms 20.5MB 213ms 10ms cpython 3.13.3
python 1.py 662ms 11ms 16.8MB 647ms 0ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 353.7MB 4770ms 1417ms truffleruby 24.2.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1852ms 2.6ms 88.9MB 1803ms 30ms pypy 3.10.16
ruby 6.rb 2027ms 13ms 23.0MB 1997ms 10ms ruby/yjit 3.4.4
ruby 6-m.rb 2068ms 126ms 407.9MB 5310ms 330ms truffleruby 24.2.1
python 5-m.py 2288ms 4.5ms 65.6MB 3530ms 820ms pypy 3.10.16
python 5-m.py 2438ms 9.1ms 12.5MB 3527ms 990ms pyston 3.8.12
python 1.py 3053ms 14ms 8.1MB 3040ms 0ms pyston 3.8.12
python 5-m.py 3439ms 104ms 13.9MB 4590ms 917ms cpython 3.13.3
ruby 6.rb 3712ms 34ms 22.4MB 3683ms 13ms ruby 3.4.4
python 1.py 4786ms 32ms 8.8MB 4770ms 0ms cpython 3.13.3

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 249ms 3.9ms 63.3MB 223ms 13ms pypy 3.10.16
ruby 6.rb 259ms 3.2ms 15.2MB 237ms 7ms ruby/yjit 3.4.4
python 5-m.py 311ms 2.2ms 12.5MB 393ms 150ms pyston 3.8.12
python 1.py 314ms 3.8ms 8.1MB 300ms 0ms pyston 3.8.12
python 5-m.py 405ms 4.1ms 13.9MB 497ms 133ms cpython 3.13.3
ruby 6.rb 421ms 2.0ms 14.4MB 400ms 7ms ruby 3.4.4
python 5-m.py 442ms 3.9ms 65.6MB 733ms 303ms pypy 3.10.16
python 1.py 495ms 2.8ms 8.9MB 483ms 0ms cpython 3.13.3
ruby 6-m.rb 817ms 16ms 366.6MB 2047ms 163ms truffleruby 24.2.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 11ms 0.3ms 7.6MB 0ms 0ms pyston 3.8.12
python 1.py 13ms 0.5ms 8.8MB 10ms 0ms cpython 3.13.3
python 1.py 29ms 1.2ms 51.7MB 10ms 10ms pypy 3.10.16
ruby 1.rb 35ms 0.5ms 141.3MB 14ms 24ms truffleruby 24.2.1
ruby 1.rb 51ms 1.3ms 12.9MB 36ms 2ms ruby/yjit 3.4.4
ruby 1.rb 51ms 1.6ms 12.8MB 38ms 4ms ruby 3.4.4

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 200ms 3.6ms 38.1MB 167ms 20ms pyston 3.8.12
python 1.py 218ms 3.4ms 38.6MB 190ms 13ms cpython 3.13.3
ruby 1.rb 251ms 4.9ms 27.8MB 223ms 17ms ruby 3.4.4
ruby 1.rb 254ms 3.9ms 29.0MB 227ms 13ms ruby/yjit 3.4.4
python 1.py 298ms 5.1ms 88.7MB 257ms 27ms pypy 3.10.16
ruby 1-m.rb 4221ms 61ms 553.6MB 11127ms 323ms truffleruby 24.2.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1826ms 8.1ms 220.5MB 1657ms 157ms pyston 3.8.12
python 1.py 1924ms 22ms 223.8MB 1837ms 73ms pypy 3.10.16
python 1.py 1928ms 3.1ms 221.3MB 1837ms 80ms cpython 3.13.3
ruby 1.rb 2088ms 11ms 135.5MB 2000ms 73ms ruby/yjit 3.4.4
ruby 1.rb 2089ms 18ms 130.9MB 2003ms 70ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 486.0MB 13307ms 333ms truffleruby 24.2.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 147ms 4.7ms 58.4MB 123ms 10ms pypy 3.10.16
python 1.py 178ms 0.9ms 59.5MB 153ms 10ms pypy 3.10.16
ruby 1.rb 346ms 5.9ms 13.5MB 327ms 7ms ruby/yjit 3.4.4
ruby 1.rb 528ms 2.9ms 12.9MB 510ms 10ms ruby 3.4.4
ruby 1-m.rb 672ms 40ms 371.0MB 1197ms 137ms truffleruby 24.2.1
python 1.py 729ms 8.4ms 8.9MB 720ms 0ms pyston 3.8.12
python 2.py 843ms 5.9ms 8.5MB 833ms 0ms pyston 3.8.12
python 1.py 1162ms 0.5ms 9.5MB 1150ms 0ms cpython 3.13.3
python 2.py 1336ms 11ms 9.1MB 1327ms 0ms cpython 3.13.3

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 340ms 1.6ms 59.2MB 317ms 10ms pypy 3.10.16
python 1.py 379ms 2.4ms 60.4MB 353ms 13ms pypy 3.10.16
ruby 1.rb 910ms 1.8ms 13.5MB 890ms 3ms ruby/yjit 3.4.4
ruby 1-m.rb 1245ms 2.3ms 411.8MB 1757ms 167ms truffleruby 24.2.1
ruby 1.rb 1482ms 5.6ms 12.9MB 1460ms 10ms ruby 3.4.4
python 1.py 2141ms 9.4ms 8.9MB 2127ms 0ms pyston 3.8.12
python 2.py 2517ms 56ms 8.5MB 2507ms 0ms pyston 3.8.12
python 1.py 3461ms 59ms 9.5MB 3450ms 0ms cpython 3.13.3
python 2.py 3968ms 103ms 9.1MB 3957ms 0ms cpython 3.13.3

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 105ms 0.4ms 58.2MB 80ms 10ms pypy 3.10.16
python 1.py 122ms 3.4ms 58.8MB 100ms 10ms pypy 3.10.16
ruby 1.rb 197ms 3.9ms 13.4MB 183ms 3ms ruby/yjit 3.4.4
ruby 1.rb 290ms 4.2ms 12.8MB 273ms 0ms ruby 3.4.4
python 1.py 349ms 0.5ms 8.5MB 340ms 0ms pyston 3.8.12
python 2.py 388ms 5.3ms 8.1MB 373ms 0ms pyston 3.8.12
ruby 1-m.rb 503ms 50ms 362.6MB 967ms 137ms truffleruby 24.2.1
python 1.py 561ms 4.3ms 9.3MB 547ms 0ms cpython 3.13.3
python 2.py 636ms 2.8ms 8.8MB 627ms 0ms cpython 3.13.3

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 2218ms 7.5ms 202.7MB 2107ms 100ms pypy 3.10.16
ruby 1-m.rb 3839ms 65ms 570.9MB 9800ms 350ms truffleruby 24.2.1
python 1.py timeout 0.0ms 94.0MB 4950ms 33ms cpython 3.13.3
python 1.py timeout 0.0ms 130.3MB 4933ms 50ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 94.1MB 4943ms 47ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 97.2MB 4943ms 43ms ruby/yjit 3.4.4

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 379ms 3.2ms 104.7MB 323ms 47ms pypy 3.10.16
ruby 1-m.rb 2093ms 126ms 535.8MB 5357ms 270ms truffleruby 24.2.1
python 1.py 3095ms 22ms 37.3MB 3067ms 10ms cpython 3.13.3
ruby 1.rb 3224ms 7.7ms 38.3MB 3190ms 17ms ruby/yjit 3.4.4
ruby 1.rb 4324ms 12ms 37.6MB 4293ms 13ms ruby 3.4.4
python 1.py timeout 0.0ms 48.9MB 4950ms 33ms pyston 3.8.12

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 2.rb 816ms 4.0ms 312.1MB 1050ms 113ms truffleruby 24.2.1
python 2.py 1353ms 3.9ms 58.1MB 1330ms 10ms pypy 3.10.16
python 1.py 2669ms 18ms 57.1MB 2643ms 10ms pypy 3.10.16
python 1.py timeout 0.0ms 8.9MB 4990ms 0ms cpython 3.13.3
python 2.py timeout 0.0ms 8.9MB 4987ms 0ms cpython 3.13.3
python 1.py timeout 0.0ms 8.3MB 4990ms 0ms pyston 3.8.12
python 2.py timeout 0.0ms 8.1MB 4983ms 0ms pyston 3.8.12
ruby 2.rb timeout 0.0ms 12.8MB 4987ms 0ms ruby 3.4.4
ruby 2.rb timeout 0.0ms 13.5MB 4980ms 7ms ruby/yjit 3.4.4

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 177ms 1.3ms 58.1MB 157ms 10ms pypy 3.10.16
python 1.py 305ms 3.3ms 57.0MB 280ms 10ms pypy 3.10.16
ruby 2-m.rb 308ms 14ms 317.9MB 567ms 110ms truffleruby 24.2.1
python 1.py 928ms 11ms 8.3MB 917ms 0ms pyston 3.8.12
ruby 2.rb 1025ms 1.2ms 13.5MB 1003ms 10ms ruby/yjit 3.4.4
python 2.py 1294ms 2.1ms 8.1MB 1280ms 0ms pyston 3.8.12
ruby 2.rb 2921ms 95ms 12.8MB 2903ms 3ms ruby 3.4.4
python 1.py 2942ms 8.2ms 8.8MB 2930ms 0ms cpython 3.13.3
python 2.py 3274ms 97ms 8.9MB 3263ms 0ms cpython 3.13.3

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 2512ms 35ms 369.6MB 2440ms 57ms pypy 3.10.16
python 2.py 2965ms 38ms 632.9MB 2797ms 153ms pyston 3.8.12
python 1.py 4719ms 55ms 320.4MB 4660ms 47ms pyston 3.8.12
python 1.py timeout 0.0ms 321.4MB 4957ms 30ms cpython 3.13.3
python 2.py timeout 0.0ms 633.8MB 4843ms 143ms cpython 3.13.3
python 2.py timeout 0.0ms 959.9MB 4710ms 280ms pypy 3.10.16
ruby 1.rb timeout 0.0ms 325.3MB 4857ms 133ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 327.0MB 4853ms 130ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 732.0MB 5073ms 150ms truffleruby 24.2.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 526ms 2.9ms 135.2MB 490ms 23ms pypy 3.10.16
python 2.py 713ms 3.4ms 164.2MB 670ms 30ms pyston 3.8.12
python 1.py 1069ms 35ms 86.0MB 1047ms 10ms pyston 3.8.12
python 2.py 1424ms 21ms 165.0MB 1380ms 30ms cpython 3.13.3
python 2.py 1518ms 19ms 290.3MB 1427ms 77ms pypy 3.10.16
ruby 1-m.rb 1691ms 6.2ms 486.6MB 2437ms 163ms truffleruby 24.2.1
python 1.py 2702ms 14ms 86.9MB 2680ms 10ms cpython 3.13.3
ruby 1.rb 3458ms 150ms 131.6MB 3363ms 80ms ruby/yjit 3.4.4
ruby 1.rb 4471ms 23ms 131.1MB 4383ms 73ms ruby 3.4.4

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 4.py 1916ms 21ms 8.9MB 1867ms 33ms pyston 3.8.12
python 4.py 1987ms 11ms 9.4MB 1930ms 43ms cpython 3.13.3
python 4.py 2204ms 6.9ms 89.5MB 2160ms 30ms pypy 3.10.16
ruby 1.rb timeout 0.0ms 130.1MB 4853ms 137ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 131.0MB 4833ms 157ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 441.9MB 13307ms 403ms truffleruby 24.2.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 4.py 454ms 4.5ms 8.6MB 443ms 0ms pyston 3.8.12
python 4.py 480ms 17ms 9.3MB 470ms 0ms cpython 3.13.3
python 4.py 559ms 7.0ms 83.9MB 527ms 20ms pypy 3.10.16
ruby 1.rb 1737ms 69ms 130.2MB 1657ms 63ms ruby 3.4.4
ruby 1-m.rb 1762ms 210ms 387.2MB 4653ms 207ms truffleruby 24.2.1
ruby 1.rb 1805ms 4.1ms 131.2MB 1680ms 113ms ruby/yjit 3.4.4

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 8.py timeout 0.0ms 14.9MB 37ms 10ms cpython 3.13.3
python 8.py timeout 0.0ms 95.9MB 810ms 90ms pypy 3.10.16
python 8.py timeout 0.0ms 14.1MB 30ms 13ms pyston 3.8.12
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 3ms ruby 3.4.4
ruby 4.rb timeout 0.0ms 13.5MB 4980ms 3ms ruby/yjit 3.4.4
ruby 4.rb timeout 0.0ms 442.8MB 5163ms 247ms truffleruby 24.2.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 4.rb 4839ms 22ms 427.6MB 5120ms 207ms truffleruby 24.2.1
python 8.py timeout 0.0ms 14.6MB 47ms 10ms cpython 3.13.3
python 8.py timeout 0.0ms 96.4MB 1343ms 187ms pypy 3.10.16
python 8.py timeout 0.0ms 13.6MB 57ms 10ms pyston 3.8.12
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 3ms ruby 3.4.4
ruby 4.rb timeout 0.0ms 13.5MB 4983ms 3ms ruby/yjit 3.4.4

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 4.rb 1449ms 47ms 375.2MB 1810ms 133ms truffleruby 24.2.1
python 8-m.py 1983ms 24ms 93.1MB 6417ms 257ms pypy 3.10.16
python 8.py timeout 0.0ms 14.3MB 87ms 23ms cpython 3.13.3
python 8.py timeout 0.0ms 13.4MB 140ms 33ms pyston 3.8.12
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 0ms ruby 3.4.4
ruby 4.rb timeout 0.0ms 13.6MB 4980ms 7ms ruby/yjit 3.4.4