Ruby VS Python benchmarks

Current benchmark data was generated on Tue Jul 01 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 1158ms 1.0ms 96.1MB 1093ms 53ms pypy 3.10.16
ruby 1-m.rb 4407ms 191ms 804.1MB 6390ms 450ms truffleruby 24.2.1
ruby 1.rb 4955ms 35ms 109.4MB 4853ms 87ms ruby/yjit 3.4.4
python 1.py timeout 0.0ms 41.0MB 4963ms 17ms cpython 3.13.5
python 1.py timeout 0.0ms 40.5MB 4753ms 233ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 70.5MB 4940ms 40ms ruby 3.4.4

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 93ms 0.2ms 68.8MB 67ms 17ms pypy 3.10.16
python 1.py 477ms 1.2ms 11.9MB 453ms 13ms pyston 3.8.12
ruby 1.rb 505ms 6.5ms 20.3MB 480ms 10ms ruby/yjit 3.4.4
ruby 1-m.rb 570ms 55ms 424.9MB 1133ms 167ms truffleruby 24.2.1
python 1.py 718ms 3.5ms 13.0MB 707ms 0ms cpython 3.13.5
ruby 1.rb 967ms 21ms 19.5MB 943ms 10ms 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 1210ms 16ms 106.4MB 1167ms 30ms pypy 3.10.16
ruby 1.rb 1446ms 22ms 63.8MB 1363ms 67ms ruby/yjit 3.4.4
ruby 1.rb 1861ms 20ms 63.0MB 1787ms 63ms ruby 3.4.4
python 1.py 2689ms 24ms 25.4MB 2667ms 10ms cpython 3.13.5
python 1.py timeout 0.0ms 17.4MB 4980ms 7ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 327.3MB 4810ms 1417ms truffleruby 24.2.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 155ms 1.3ms 25.6MB 127ms 17ms ruby/yjit 3.4.4
ruby 1.rb 184ms 1.1ms 25.0MB 157ms 17ms ruby 3.4.4
python 1.py 220ms 5.3ms 84.7MB 183ms 27ms pypy 3.10.16
python 1.py 237ms 8.3ms 20.6MB 217ms 3ms cpython 3.13.5
python 1.py 648ms 13ms 16.8MB 633ms 0ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 351.7MB 4637ms 1527ms truffleruby 24.2.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1857ms 11ms 88.9MB 1810ms 30ms pypy 3.10.16
ruby 6.rb 2079ms 63ms 23.0MB 2053ms 10ms ruby/yjit 3.4.4
ruby 6-m.rb 2218ms 75ms 408.9MB 5653ms 337ms truffleruby 24.2.1
python 5-m.py 2292ms 35ms 65.6MB 3537ms 850ms pypy 3.10.16
python 5-m.py 2462ms 20ms 12.5MB 3543ms 983ms pyston 3.8.12
python 1.py 3024ms 23ms 8.1MB 3007ms 0ms pyston 3.8.12
python 5-m.py 3410ms 32ms 13.8MB 4480ms 947ms cpython 3.13.5
ruby 6.rb 3700ms 18ms 22.4MB 3673ms 10ms ruby 3.4.4
python 1.py 4667ms 43ms 9.0MB 4653ms 0ms cpython 3.13.5

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 250ms 0.9ms 63.4MB 220ms 10ms pypy 3.10.16
ruby 6.rb 257ms 1.5ms 15.2MB 240ms 3ms ruby/yjit 3.4.4
python 5-m.py 315ms 11ms 12.5MB 390ms 157ms pyston 3.8.12
python 1.py 315ms 4.7ms 8.1MB 303ms 0ms pyston 3.8.12
python 5-m.py 407ms 7.3ms 13.8MB 483ms 143ms cpython 3.13.5
ruby 6.rb 420ms 1.2ms 14.4MB 403ms 7ms ruby 3.4.4
python 5-m.py 446ms 3.8ms 65.6MB 753ms 297ms pypy 3.10.16
python 1.py 484ms 2.4ms 9.0MB 470ms 0ms cpython 3.13.5
ruby 6-m.rb 848ms 18ms 388.9MB 2133ms 180ms truffleruby 24.2.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 12ms 0.7ms 7.6MB 10ms 0ms pyston 3.8.12
python 1.py 15ms 1.2ms 8.8MB 10ms 0ms cpython 3.13.5
python 1.py 30ms 0.9ms 51.7MB 6ms 12ms pypy 3.10.16
ruby 1.rb 35ms 1.1ms 141.3MB 16ms 24ms truffleruby 24.2.1
ruby 1.rb 52ms 0.9ms 12.8MB 40ms 0ms ruby 3.4.4
ruby 1.rb 52ms 1.2ms 12.9MB 40ms 2ms ruby/yjit 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 1.3ms 38.1MB 163ms 23ms pyston 3.8.12
python 1.py 222ms 2.1ms 38.6MB 193ms 17ms cpython 3.13.5
ruby 1.rb 259ms 6.8ms 28.8MB 233ms 10ms ruby 3.4.4
ruby 1.rb 260ms 1.6ms 30.1MB 230ms 17ms ruby/yjit 3.4.4
python 1.py 302ms 3.5ms 88.8MB 263ms 27ms pypy 3.10.16
ruby 1-m.rb 4473ms 273ms 553.2MB 11820ms 333ms truffleruby 24.2.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 1850ms 9.9ms 220.5MB 1673ms 163ms pyston 3.8.12
python 1.py 1927ms 3.4ms 222.0MB 1820ms 93ms cpython 3.13.5
python 1.py 1928ms 14ms 222.7MB 1847ms 67ms pypy 3.10.16
ruby 1.rb 2100ms 16ms 135.4MB 2017ms 73ms ruby 3.4.4
ruby 1.rb 2102ms 15ms 135.2MB 2013ms 73ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 507.3MB 13217ms 343ms 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 1.1ms 58.3MB 120ms 10ms pypy 3.10.16
python 1.py 178ms 1.7ms 59.4MB 153ms 10ms pypy 3.10.16
ruby 1.rb 342ms 2.8ms 13.5MB 323ms 0ms ruby/yjit 3.4.4
ruby 1.rb 526ms 4.3ms 12.9MB 507ms 3ms ruby 3.4.4
ruby 1-m.rb 707ms 30ms 372.7MB 1240ms 147ms truffleruby 24.2.1
python 1.py 730ms 8.0ms 8.9MB 720ms 0ms pyston 3.8.12
python 2.py 850ms 11ms 8.5MB 840ms 0ms pyston 3.8.12
python 1.py 1141ms 7.1ms 9.5MB 1133ms 0ms cpython 3.13.5
python 2.py 1304ms 8.0ms 9.3MB 1290ms 0ms cpython 3.13.5

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 339ms 1.2ms 60.5MB 317ms 10ms pypy 3.10.16
python 1.py 380ms 4.2ms 60.3MB 357ms 10ms pypy 3.10.16
ruby 1.rb 913ms 4.6ms 13.5MB 897ms 0ms ruby/yjit 3.4.4
ruby 1-m.rb 1253ms 6.5ms 411.5MB 1750ms 167ms truffleruby 24.2.1
ruby 1.rb 1478ms 32ms 12.9MB 1457ms 7ms ruby 3.4.4
python 1.py 2148ms 10ms 8.9MB 2137ms 0ms pyston 3.8.12
python 2.py 2496ms 44ms 8.5MB 2483ms 0ms pyston 3.8.12
python 1.py 3362ms 46ms 9.5MB 3350ms 0ms cpython 3.13.5
python 2.py 3908ms 18ms 9.3MB 3897ms 0ms cpython 3.13.5

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 2.py 107ms 3.6ms 58.2MB 80ms 10ms pypy 3.10.16
python 1.py 122ms 3.9ms 58.8MB 97ms 10ms pypy 3.10.16
ruby 1.rb 198ms 2.3ms 13.5MB 180ms 10ms ruby/yjit 3.4.4
ruby 1.rb 289ms 3.7ms 12.8MB 270ms 7ms ruby 3.4.4
python 1.py 355ms 5.9ms 8.5MB 343ms 0ms pyston 3.8.12
python 2.py 385ms 2.9ms 8.1MB 373ms 0ms pyston 3.8.12
ruby 1-m.rb 530ms 42ms 354.3MB 1040ms 137ms truffleruby 24.2.1
python 1.py 537ms 11ms 9.3MB 527ms 0ms cpython 3.13.5
python 2.py 628ms 9.6ms 8.9MB 617ms 0ms cpython 3.13.5

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 2196ms 9.7ms 202.5MB 2077ms 100ms pypy 3.10.16
ruby 1-m.rb 4269ms 456ms 556.4MB 10877ms 377ms truffleruby 24.2.1
python 1.py timeout 0.0ms 94.1MB 4960ms 27ms cpython 3.13.5
python 1.py timeout 0.0ms 130.3MB 4930ms 57ms pyston 3.8.12
ruby 1.rb timeout 0.0ms 93.5MB 4947ms 40ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 97.2MB 4933ms 50ms ruby/yjit 3.4.4

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 385ms 4.5ms 104.7MB 323ms 50ms pypy 3.10.16
ruby 1-m.rb 1985ms 41ms 547.4MB 5130ms 257ms truffleruby 24.2.1
ruby 1.rb 3266ms 10ms 38.3MB 3233ms 20ms ruby/yjit 3.4.4
python 1.py 3347ms 32ms 37.4MB 3317ms 13ms cpython 3.13.5
ruby 1.rb 4383ms 23ms 37.6MB 4340ms 27ms ruby 3.4.4
python 1.py timeout 0.0ms 48.9MB 4953ms 37ms pyston 3.8.12

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 2.rb 835ms 11ms 315.3MB 1080ms 117ms truffleruby 24.2.1
python 2.py 1358ms 8.1ms 58.1MB 1333ms 10ms pypy 3.10.16
python 1.py 2644ms 7.4ms 57.0MB 2620ms 10ms pypy 3.10.16
python 1.py timeout 0.0ms 8.9MB 4990ms 0ms cpython 3.13.5
python 2.py timeout 0.0ms 9.0MB 4990ms 0ms cpython 3.13.5
python 1.py timeout 0.0ms 8.3MB 4990ms 0ms pyston 3.8.12
python 2.py timeout 0.0ms 8.1MB 4990ms 0ms pyston 3.8.12
ruby 2.rb timeout 0.0ms 12.8MB 4983ms 3ms 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 182ms 1.2ms 57.9MB 160ms 10ms pypy 3.10.16
python 1.py 304ms 1.2ms 57.1MB 280ms 10ms pypy 3.10.16
ruby 2-m.rb 323ms 13ms 309.9MB 563ms 123ms truffleruby 24.2.1
python 1.py 921ms 6.9ms 8.4MB 910ms 0ms pyston 3.8.12
ruby 2.rb 1026ms 2.7ms 13.5MB 1007ms 7ms ruby/yjit 3.4.4
python 2.py 1314ms 5.3ms 8.3MB 1300ms 0ms pyston 3.8.12
ruby 2.rb 2901ms 120ms 12.8MB 2887ms 0ms ruby 3.4.4
python 2.py 2943ms 21ms 9.0MB 2930ms 0ms cpython 3.13.5
python 1.py 3003ms 91ms 9.0MB 2990ms 0ms cpython 3.13.5

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 2563ms 130ms 369.7MB 2490ms 57ms pypy 3.10.16
python 2.py 2996ms 31ms 632.9MB 2817ms 167ms pyston 3.8.12
python 1.py 4717ms 60ms 320.4MB 4660ms 40ms pyston 3.8.12
python 1.py timeout 0.0ms 321.4MB 4967ms 23ms cpython 3.13.5
python 2.py timeout 0.0ms 633.8MB 4823ms 157ms cpython 3.13.5
python 2.py timeout 0.0ms 959.9MB 4717ms 263ms pypy 3.10.16
ruby 1.rb timeout 0.0ms 325.3MB 4850ms 137ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 327.0MB 4857ms 130ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 731.6MB 5057ms 170ms truffleruby 24.2.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 1.py 547ms 6.2ms 135.3MB 507ms 23ms pypy 3.10.16
python 2.py 723ms 2.9ms 164.2MB 683ms 27ms pyston 3.8.12
python 1.py 1065ms 10ms 86.0MB 1040ms 10ms pyston 3.8.12
python 2.py 1383ms 0.6ms 165.1MB 1343ms 27ms cpython 3.13.5
python 2.py 1508ms 4.4ms 290.3MB 1420ms 73ms pypy 3.10.16
ruby 1-m.rb 1708ms 13ms 494.0MB 2480ms 177ms truffleruby 24.2.1
python 1.py 2870ms 13ms 87.0MB 2847ms 10ms cpython 3.13.5
ruby 1.rb 3451ms 53ms 131.8MB 3363ms 73ms ruby/yjit 3.4.4
ruby 1.rb 4587ms 13ms 131.1MB 4493ms 77ms ruby 3.4.4

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 4.py 1929ms 6.9ms 8.9MB 1887ms 30ms pyston 3.8.12
python 4.py 1980ms 20ms 9.5MB 1927ms 43ms cpython 3.13.5
python 4.py 2185ms 3.8ms 89.6MB 2150ms 20ms pypy 3.10.16
ruby 1.rb timeout 0.0ms 46.4MB 4923ms 63ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 130.8MB 4903ms 83ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 451.3MB 13403ms 393ms truffleruby 24.2.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
python 4.py 462ms 1.2ms 8.6MB 450ms 0ms pyston 3.8.12
python 4.py 480ms 6.7ms 9.4MB 470ms 0ms cpython 3.13.5
python 4.py 553ms 3.7ms 83.9MB 513ms 23ms pypy 3.10.16
ruby 1-m.rb 1666ms 261ms 414.4MB 4383ms 213ms truffleruby 24.2.1
ruby 1.rb 1783ms 63ms 130.9MB 1673ms 97ms ruby/yjit 3.4.4
ruby 1.rb 1814ms 58ms 130.3MB 1703ms 93ms ruby 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.8MB 33ms 10ms cpython 3.13.5
python 8.py timeout 0.0ms 95.9MB 787ms 80ms pypy 3.10.16
python 8.py timeout 0.0ms 14.4MB 33ms 10ms 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.5MB 4983ms 3ms ruby/yjit 3.4.4
ruby 4.rb timeout 0.0ms 449.5MB 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 4909ms 38ms 442.4MB 5200ms 217ms truffleruby 24.2.1
python 8.py timeout 0.0ms 14.5MB 47ms 13ms cpython 3.13.5
python 8.py timeout 0.0ms 95.6MB 1280ms 180ms pypy 3.10.16
python 8.py timeout 0.0ms 13.6MB 60ms 13ms 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.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 1458ms 5.9ms 388.7MB 1803ms 150ms truffleruby 24.2.1
python 8-m.py 1948ms 18ms 92.9MB 6303ms 253ms pypy 3.10.16
python 8.py timeout 0.0ms 14.3MB 80ms 20ms cpython 3.13.5
python 8.py timeout 0.0ms 13.1MB 150ms 30ms 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 4983ms 0ms ruby/yjit 3.4.4