Skip to content

Instantly share code, notes, and snippets.

@headius
Created November 4, 2025 04:47
Show Gist options
  • Select an option

  • Save headius/15413f657dad8d83c474114f8f9cf26a to your computer and use it in GitHub Desktop.

Select an option

Save headius/15413f657dad8d83c474114f8f9cf26a to your computer and use it in GitHub Desktop.
fast-ruby benchmarks comparing JRuby 10.0.3.0-head with CRuby 3.4.7
$ ruby -e 'files = Dir["code/**/*.rb"]; files.each_with_index {|file, i| puts "#{i+1}/#{files.size}: #{file}"; system "jruby #{file}"; system "/Users/headius/.rubies/ruby-3.4.7/bin/ruby --jit #{file}" }'
1/68: code/array/array-concat-vs-+.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#concat 289.000 i/100ms
Array#+ 1.000 i/100ms
Calculating -------------------------------------
Array#concat 3.037k (± 1.1%) i/s (329.29 μs/i) - 15.317k in 5.044432s
Array#+ 13.653 (± 0.0%) i/s (73.24 ms/i) - 69.000 in 5.059999s
Comparison:
Array#concat: 3036.8 i/s
Array#+: 13.7 i/s - 222.43x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#concat 164.000 i/100ms
Array#+ 1.000 i/100ms
Calculating -------------------------------------
Array#concat 1.456k (± 3.6%) i/s (686.71 μs/i) - 7.380k in 5.075646s
Array#+ 3.420 (± 0.0%) i/s (292.42 ms/i) - 18.000 in 5.286420s
Comparison:
Array#concat: 1456.2 i/s
Array#+: 3.4 i/s - 425.83x slower
2/68: code/array/array-first-vs-index.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#[0] 1.692M i/100ms
Array#first 1.803M i/100ms
Calculating -------------------------------------
Array#[0] 139.774M (±19.3%) i/s (7.15 ns/i) - 550.019M in 5.001346s
Array#first 149.433M (±22.6%) i/s (6.69 ns/i) - 539.074M in 4.998836s
Comparison:
Array#first: 149432579.2 i/s
Array#[0]: 139774108.6 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#[0] 4.662M i/100ms
Array#first 4.435M i/100ms
Calculating -------------------------------------
Array#[0] 63.141M (± 5.9%) i/s (15.84 ns/i) - 317.022M in 5.049422s
Array#first 61.177M (± 2.7%) i/s (16.35 ns/i) - 306.001M in 5.005671s
Comparison:
Array#[0]: 63141486.4 i/s
Array#first: 61177483.2 i/s - same-ish: difference falls within error
3/68: code/array/array-last-vs-index.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#[-1] 1.618M i/100ms
Array#last 1.659M i/100ms
Calculating -------------------------------------
Array#[-1] 125.315M (±27.9%) i/s (7.98 ns/i) - 297.669M in 5.005618s
Array#last 141.013M (±25.9%) i/s (7.09 ns/i) - 353.470M in 4.999853s
Comparison:
Array#last: 141013400.0 i/s
Array#[-1]: 125315294.6 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#[-1] 4.488M i/100ms
Array#last 4.418M i/100ms
Calculating -------------------------------------
Array#[-1] 64.548M (± 1.4%) i/s (15.49 ns/i) - 323.117M in 5.006857s
Array#last 60.672M (± 2.3%) i/s (16.48 ns/i) - 304.815M in 5.026823s
Comparison:
Array#[-1]: 64547807.4 i/s
Array#last: 60671621.5 i/s - 1.06x slower
4/68: code/array/array-new-vs-fixnum-times-map.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#new 632.276k i/100ms
Fixnum#times + map 281.039k i/100ms
Calculating -------------------------------------
Array#new 9.899M (±19.6%) i/s (101.02 ns/i) - 47.421M in 5.042800s
Fixnum#times + map 3.085M (±12.9%) i/s (324.19 ns/i) - 15.176M in 5.008429s
Comparison:
Array#new: 9899160.9 i/s
Fixnum#times + map: 3084634.9 i/s - 3.21x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#new 473.884k i/100ms
Fixnum#times + map 274.423k i/100ms
Calculating -------------------------------------
Array#new 5.028M (± 1.9%) i/s (198.89 ns/i) - 25.590M in 5.091458s
Fixnum#times + map 2.920M (± 2.0%) i/s (342.41 ns/i) - 14.819M in 5.076252s
Comparison:
Array#new: 5027944.2 i/s
Fixnum#times + map: 2920461.1 i/s - 1.72x slower
5/68: code/array/bsearch-vs-find.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
find 1.000 i/100ms
bsearch 353.536k i/100ms
Calculating -------------------------------------
find 0.939 (± 0.0%) i/s (1.06 s/i) - 5.000 in 5.381076s
bsearch 3.455M (±30.7%) i/s (289.47 ns/i) - 15.909M in 5.122523s
Comparison:
bsearch: 3454573.1 i/s
find: 0.9 i/s - 3677531.90x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
find 1.000 i/100ms
bsearch 223.976k i/100ms
Calculating -------------------------------------
find 0.538 (± 0.0%) i/s (1.86 s/i) - 3.000 in 5.576027s
bsearch 2.293M (± 1.7%) i/s (436.15 ns/i) - 11.647M in 5.081265s
Comparison:
bsearch: 2292811.9 i/s
find: 0.5 i/s - 4261489.72x slower
6/68: code/array/insert-vs-unshift.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#unshift 1.000 i/100ms
Array#insert 1.000 i/100ms
Calculating -------------------------------------
Array#unshift 2.923 (± 0.0%) i/s (342.12 ms/i) - 15.000 in 5.140667s
Array#insert 2.976 (± 0.0%) i/s (336.04 ms/i) - 15.000 in 5.040885s
Comparison:
Array#insert: 3.0 i/s
Array#unshift: 2.9 i/s - 1.02x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#unshift 100.000 i/100ms
Array#insert 1.000 i/100ms
Calculating -------------------------------------
Array#unshift 1.001k (± 4.6%) i/s (999.30 μs/i) - 5.000k in 5.007383s
Array#insert 1.649 (± 0.0%) i/s (606.50 ms/i) - 9.000 in 5.459798s
Comparison:
Array#unshift: 1000.7 i/s
Array#insert: 1.6 i/s - 606.93x slower
7/68: code/array/length-vs-size-vs-count.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#length 1.023M i/100ms
Array#size 1.033M i/100ms
Array#count 1.031M i/100ms
Calculating -------------------------------------
Array#length 151.628M (±15.5%) i/s (6.60 ns/i) - 641.290M in 4.999864s
Array#size 150.605M (±15.3%) i/s (6.64 ns/i) - 638.399M in 5.003935s
Array#count 149.240M (±15.0%) i/s (6.70 ns/i) - 634.371M in 4.999961s
Comparison:
Array#length: 151627762.5 i/s
Array#size: 150605071.1 i/s - same-ish: difference falls within error
Array#count: 149239899.6 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#length 5.370M i/100ms
Array#size 5.444M i/100ms
Array#count 4.659M i/100ms
Calculating -------------------------------------
Array#length 81.687M (± 0.4%) i/s (12.24 ns/i) - 413.506M in 5.062129s
Array#size 80.844M (± 0.8%) i/s (12.37 ns/i) - 408.284M in 5.050586s
Array#count 62.770M (± 1.0%) i/s (15.93 ns/i) - 316.825M in 5.047892s
Comparison:
Array#length: 81687219.4 i/s
Array#size: 80844376.5 i/s - same-ish: difference falls within error
Array#count: 62770029.7 i/s - 1.30x slower
8/68: code/array/shuffle-first-vs-sample.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#shuffle.first 79.560k i/100ms
Array#sample 1.462M i/100ms
Calculating -------------------------------------
Array#shuffle.first 840.223k (± 3.3%) i/s (1.19 μs/i) - 4.217M in 5.024343s
Array#sample 66.948M (±22.9%) i/s (14.94 ns/i) - 274.777M in 4.998980s
Comparison:
Array#sample: 66947518.7 i/s
Array#shuffle.first: 840223.0 i/s - 79.68x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#shuffle.first 87.698k i/100ms
Array#sample 3.208M i/100ms
Calculating -------------------------------------
Array#shuffle.first 899.621k (± 1.6%) i/s (1.11 μs/i) - 4.560M in 5.070471s
Array#sample 40.593M (± 1.5%) i/s (24.63 ns/i) - 205.321M in 5.059246s
Comparison:
Array#sample: 40592954.4 i/s
Array#shuffle.first: 899621.2 i/s - 45.12x slower
9/68: code/array/sort-reverse-vs-sort_by-with-block.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#sort.reverse 45.833k i/100ms
Array#sort_by &:-@ 14.651k i/100ms
Calculating -------------------------------------
Array#sort.reverse 464.612k (± 2.2%) i/s (2.15 μs/i) - 2.337M in 5.033456s
Array#sort_by &:-@ 137.573k (± 8.4%) i/s (7.27 μs/i) - 688.597k in 5.043389s
Comparison:
Array#sort.reverse: 464611.5 i/s
Array#sort_by &:-@: 137572.8 i/s - 3.38x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#sort.reverse 54.899k i/100ms
Array#sort_by &:-@ 23.572k i/100ms
Calculating -------------------------------------
Array#sort.reverse 561.315k (± 0.8%) i/s (1.78 μs/i) - 2.855M in 5.086127s
Array#sort_by &:-@ 235.759k (± 4.3%) i/s (4.24 μs/i) - 1.179M in 5.011222s
Comparison:
Array#sort.reverse: 561315.2 i/s
Array#sort_by &:-@: 235759.1 i/s - 2.38x slower
10/68: code/date/iso8601-vs-parse.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Date.iso8601 179.298k i/100ms
Date.parse 131.232k i/100ms
Calculating -------------------------------------
Date.iso8601 1.940M (± 7.3%) i/s (515.36 ns/i) - 9.682M in 5.019914s
Date.parse 1.433M (± 4.9%) i/s (697.65 ns/i) - 7.218M in 5.048060s
Comparison:
Date.iso8601: 1940376.7 i/s
Date.parse: 1433390.6 i/s - 1.35x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Date.iso8601 193.365k i/100ms
Date.parse 90.766k i/100ms
Calculating -------------------------------------
Date.iso8601 2.079M (± 0.6%) i/s (481.04 ns/i) - 10.442M in 5.023091s
Date.parse 922.638k (± 1.5%) i/s (1.08 μs/i) - 4.629M in 5.018419s
Comparison:
Date.iso8601: 2078813.3 i/s
Date.parse: 922638.2 i/s - 2.25x slower
11/68: code/enumerable/each-push-vs-map.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#each + push 81.928k i/100ms
Array#map 119.836k i/100ms
Calculating -------------------------------------
Array#each + push 837.308k (± 2.5%) i/s (1.19 μs/i) - 4.260M in 5.091426s
Array#map 1.225M (± 2.8%) i/s (816.31 ns/i) - 6.231M in 5.091113s
Comparison:
Array#map: 1225020.6 i/s
Array#each + push: 837307.8 i/s - 1.46x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#each + push 84.064k i/100ms
Array#map 125.918k i/100ms
Calculating -------------------------------------
Array#each + push 878.012k (± 1.4%) i/s (1.14 μs/i) - 4.455M in 5.075490s
Array#map 1.296M (± 0.7%) i/s (771.36 ns/i) - 6.548M in 5.050888s
Comparison:
Array#map: 1296410.4 i/s
Array#each + push: 878012.2 i/s - 1.48x slower
12/68: code/enumerable/each-vs-for-loop.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
For loop 114.452k i/100ms
#each 132.086k i/100ms
Calculating -------------------------------------
For loop 1.184M (± 3.4%) i/s (844.83 ns/i) - 5.952M in 5.033887s
#each 1.379M (± 4.2%) i/s (725.20 ns/i) - 7.001M in 5.085950s
Comparison:
#each: 1378933.4 i/s
For loop: 1183672.3 i/s - 1.16x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
For loop 196.093k i/100ms
#each 249.295k i/100ms
Calculating -------------------------------------
For loop 2.002M (± 1.3%) i/s (499.60 ns/i) - 10.197M in 5.095157s
#each 2.498M (± 1.8%) i/s (400.32 ns/i) - 12.714M in 5.091509s
Comparison:
#each: 2497981.1 i/s
For loop: 2001602.4 i/s - 1.25x slower
13/68: code/enumerable/each_with_index-vs-while-loop.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
While Loop 239.045k i/100ms
each_with_index 75.294k i/100ms
Calculating -------------------------------------
While Loop 2.519M (± 6.7%) i/s (396.94 ns/i) - 12.669M in 5.052241s
each_with_index 707.403k (± 3.8%) i/s (1.41 μs/i) - 3.539M in 5.010123s
Comparison:
While Loop: 2519283.2 i/s
each_with_index: 707403.3 i/s - 3.56x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
While Loop 362.920k i/100ms
each_with_index 42.902k i/100ms
Calculating -------------------------------------
While Loop 3.738M (± 0.8%) i/s (267.55 ns/i) - 18.872M in 5.049501s
each_with_index 436.295k (± 2.3%) i/s (2.29 μs/i) - 2.188M in 5.017584s
Comparison:
While Loop: 3737617.4 i/s
each_with_index: 436294.8 i/s - 8.57x slower
14/68: code/enumerable/inject-symbol-vs-block.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
inject symbol 12.343k i/100ms
inject to_proc 3.352k i/100ms
inject block 5.672k i/100ms
Calculating -------------------------------------
inject symbol 134.599k (± 1.7%) i/s (7.43 μs/i) - 678.865k in 5.045163s
inject to_proc 32.326k (± 2.1%) i/s (30.93 μs/i) - 164.248k in 5.083392s
inject block 57.405k (± 1.4%) i/s (17.42 μs/i) - 289.272k in 5.040216s
Comparison:
inject symbol: 134599.4 i/s
inject block: 57404.7 i/s - 2.34x slower
inject to_proc: 32326.2 i/s - 4.16x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
inject symbol 178.806k i/100ms
inject to_proc 4.637k i/100ms
inject block 4.981k i/100ms
Calculating -------------------------------------
inject symbol 1.828M (± 0.5%) i/s (547.17 ns/i) - 9.298M in 5.087682s
inject to_proc 46.469k (± 0.5%) i/s (21.52 μs/i) - 236.487k in 5.089287s
inject block 49.789k (± 1.8%) i/s (20.08 μs/i) - 249.050k in 5.003825s
Comparison:
inject symbol: 1827576.1 i/s
inject block: 49789.2 i/s - 36.71x slower
inject to_proc: 46468.6 i/s - 39.33x slower
15/68: code/enumerable/map-flatten-vs-flat_map.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#map.flatten(1) 31.610k i/100ms
Array#map.flatten 10.797k i/100ms
Array#flat_map 49.686k i/100ms
Calculating -------------------------------------
Array#map.flatten(1) 313.233k (± 1.8%) i/s (3.19 μs/i) - 1.580M in 5.047510s
Array#map.flatten 108.452k (± 0.7%) i/s (9.22 μs/i) - 550.647k in 5.077591s
Array#flat_map 492.829k (± 1.7%) i/s (2.03 μs/i) - 2.484M in 5.042347s
Comparison:
Array#flat_map: 492828.9 i/s
Array#map.flatten(1): 313232.9 i/s - 1.57x slower
Array#map.flatten: 108451.8 i/s - 4.54x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#map.flatten(1) 23.202k i/100ms
Array#map.flatten 9.816k i/100ms
Array#flat_map 23.911k i/100ms
Calculating -------------------------------------
Array#map.flatten(1) 236.296k (± 2.0%) i/s (4.23 μs/i) - 1.183M in 5.009771s
Array#map.flatten 95.187k (± 0.7%) i/s (10.51 μs/i) - 480.984k in 5.053254s
Array#flat_map 236.921k (± 1.7%) i/s (4.22 μs/i) - 1.196M in 5.047618s
Comparison:
Array#flat_map: 236920.7 i/s
Array#map.flatten(1): 236295.9 i/s - same-ish: difference falls within error
Array#map.flatten: 95187.1 i/s - 2.49x slower
16/68: code/enumerable/reverse-each-vs-reverse_each.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Array#reverse.each 116.195k i/100ms
Array#reverse_each 136.179k i/100ms
Calculating -------------------------------------
Array#reverse.each 1.226M (± 7.6%) i/s (815.42 ns/i) - 6.158M in 5.057447s
Array#reverse_each 1.407M (± 7.7%) i/s (710.63 ns/i) - 7.081M in 5.081461s
Comparison:
Array#reverse_each: 1407211.3 i/s
Array#reverse.each: 1226360.0 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Array#reverse.each 202.806k i/100ms
Array#reverse_each 70.936k i/100ms
Calculating -------------------------------------
Array#reverse.each 1.977M (± 1.1%) i/s (505.82 ns/i) - 9.937M in 5.027224s
Array#reverse_each 732.096k (± 1.8%) i/s (1.37 μs/i) - 3.689M in 5.040180s
Comparison:
Array#reverse.each: 1976988.2 i/s
Array#reverse_each: 732096.4 i/s - 2.70x slower
17/68: code/enumerable/select-first-vs-detect.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Enumerable#select.first
106.031k i/100ms
Enumerable#detect 493.965k i/100ms
Calculating -------------------------------------
Enumerable#select.first
1.173M (± 2.1%) i/s (852.68 ns/i) - 23.539M in 20.080133s
Enumerable#detect 6.649M (±11.4%) i/s (150.40 ns/i) - 130.901M in 20.024575s
Comparison:
Enumerable#detect: 6648770.4 i/s
Enumerable#select.first: 1172774.2 i/s - 5.67x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Enumerable#select.first
114.682k i/100ms
Enumerable#detect 182.864k i/100ms
Calculating -------------------------------------
Enumerable#select.first
1.241M (± 2.2%) i/s (805.96 ns/i) - 24.886M in 20.066692s
Enumerable#detect 1.908M (± 1.1%) i/s (524.22 ns/i) - 38.219M in 20.037805s
Comparison:
Enumerable#detect: 1907578.8 i/s
Enumerable#select.first: 1240758.0 i/s - 1.54x slower
18/68: code/enumerable/select-last-vs-reverse-detect.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Enumerable#reverse.detect
14.204k i/100ms
Enumerable#select.last
985.000 i/100ms
Calculating -------------------------------------
Enumerable#reverse.detect
143.214k (± 2.0%) i/s (6.98 μs/i) - 724.404k in 5.060228s
Enumerable#select.last
8.664k (± 0.7%) i/s (115.42 μs/i) - 43.340k in 5.002338s
Comparison:
Enumerable#reverse.detect: 143213.6 i/s
Enumerable#select.last: 8664.3 i/s - 16.53x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Enumerable#reverse.detect
17.640k i/100ms
Enumerable#select.last
2.133k i/100ms
Calculating -------------------------------------
Enumerable#reverse.detect
180.088k (± 1.9%) i/s (5.55 μs/i) - 917.280k in 5.095455s
Enumerable#select.last
21.354k (± 0.8%) i/s (46.83 μs/i) - 108.783k in 5.094574s
Comparison:
Enumerable#reverse.detect: 180088.3 i/s
Enumerable#select.last: 21354.2 i/s - 8.43x slower
19/68: code/enumerable/sort-vs-sort_by.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Enumerable#sort_by (Symbol#to_proc)
13.718k i/100ms
Enumerable#sort_by 14.667k i/100ms
Enumerable#sort 9.575k i/100ms
Calculating -------------------------------------
Enumerable#sort_by (Symbol#to_proc)
129.957k (± 1.9%) i/s (7.69 μs/i) - 658.464k in 5.068744s
Enumerable#sort_by 127.999k (± 0.7%) i/s (7.81 μs/i) - 645.348k in 5.042090s
Enumerable#sort 94.807k (± 1.2%) i/s (10.55 μs/i) - 478.750k in 5.050518s
Comparison:
Enumerable#sort_by (Symbol#to_proc): 129957.0 i/s
Enumerable#sort_by: 127998.8 i/s - same-ish: difference falls within error
Enumerable#sort: 94807.0 i/s - 1.37x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Enumerable#sort_by (Symbol#to_proc)
16.128k i/100ms
Enumerable#sort_by 15.147k i/100ms
Enumerable#sort 6.378k i/100ms
Calculating -------------------------------------
Enumerable#sort_by (Symbol#to_proc)
154.039k (± 2.5%) i/s (6.49 μs/i) - 774.144k in 5.028711s
Enumerable#sort_by 157.595k (± 2.2%) i/s (6.35 μs/i) - 787.644k in 5.000467s
Enumerable#sort 64.114k (± 1.1%) i/s (15.60 μs/i) - 325.278k in 5.074097s
Comparison:
Enumerable#sort_by: 157594.9 i/s
Enumerable#sort_by (Symbol#to_proc): 154039.1 i/s - same-ish: difference falls within error
Enumerable#sort: 64113.8 i/s - 2.46x slower
20/68: code/enumerable/sort_by-first-vs-min_by.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Enumerable#min_by 51.322k i/100ms
Enumerable#sort_by...first
45.253k i/100ms
Calculating -------------------------------------
Enumerable#min_by 544.566k (± 2.9%) i/s (1.84 μs/i) - 2.720M in 4.999239s
Enumerable#sort_by...first
440.197k (± 2.3%) i/s (2.27 μs/i) - 2.217M in 5.040002s
Comparison:
Enumerable#min_by: 544566.5 i/s
Enumerable#sort_by...first: 440197.0 i/s - 1.24x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Enumerable#min_by 52.267k i/100ms
Enumerable#sort_by...first
38.106k i/100ms
Calculating -------------------------------------
Enumerable#min_by 525.028k (± 0.4%) i/s (1.90 μs/i) - 2.666M in 5.077174s
Enumerable#sort_by...first
383.153k (± 1.4%) i/s (2.61 μs/i) - 1.943M in 5.073186s
Comparison:
Enumerable#min_by: 525028.0 i/s
Enumerable#sort_by...first: 383153.4 i/s - 1.37x slower
21/68: code/general/array-argument-vs-splat-arguments.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Function with single Array argument
1.604M i/100ms
Function with splat arguments
91.797k i/100ms
Calculating -------------------------------------
Function with single Array argument
109.686M (±19.3%) i/s (9.12 ns/i) - 449.141M in 5.004273s
Function with splat arguments
928.453k (± 4.7%) i/s (1.08 μs/i) - 4.682M in 5.056724s
Comparison:
Function with single Array argument: 109686099.4 i/s
Function with splat arguments: 928452.5 i/s - 118.14x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Function with single Array argument
4.631M i/100ms
Function with splat arguments
4.437M i/100ms
Calculating -------------------------------------
Function with single Array argument
62.683M (± 1.7%) i/s (15.95 ns/i) - 314.906M in 5.025306s
Function with splat arguments
58.063M (± 5.1%) i/s (17.22 ns/i) - 292.812M in 5.064637s
Comparison:
Function with single Array argument: 62682887.3 i/s
Function with splat arguments: 58062909.7 i/s - 1.08x slower
22/68: code/general/attr-accessor-vs-getter-and-setter.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
getter_and_setter 1.544M i/100ms
attr_accessor 1.585M i/100ms
Calculating -------------------------------------
getter_and_setter 91.700M (±22.5%) i/s (10.91 ns/i) - 365.927M in 5.001198s
attr_accessor 91.383M (±21.6%) i/s (10.94 ns/i) - 372.520M in 5.011595s
Comparison:
getter_and_setter: 91699753.2 i/s
attr_accessor: 91382816.1 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
getter_and_setter 1.321M i/100ms
attr_accessor 1.402M i/100ms
Calculating -------------------------------------
getter_and_setter 15.125M (± 1.3%) i/s (66.12 ns/i) - 76.599M in 5.065262s
attr_accessor 15.627M (± 0.7%) i/s (63.99 ns/i) - 78.507M in 5.023972s
Comparison:
attr_accessor: 15627284.4 i/s
getter_and_setter: 15125104.3 i/s - 1.03x slower
23/68: code/general/begin-rescue-vs-respond-to.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
begin...rescue 259.142k i/100ms
respond_to? 1.053M i/100ms
Calculating -------------------------------------
begin...rescue 2.863M (± 8.2%) i/s (349.31 ns/i) - 14.253M in 5.013499s
respond_to? 40.748M (±25.6%) i/s (24.54 ns/i) - 167.468M in 5.000022s
Comparison:
respond_to?: 40747802.4 i/s
begin...rescue: 2862755.4 i/s - 14.23x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
begin...rescue 233.859k i/100ms
respond_to? 2.733M i/100ms
Calculating -------------------------------------
begin...rescue 2.307M (± 2.1%) i/s (433.47 ns/i) - 11.693M in 5.070676s
respond_to? 32.611M (± 0.4%) i/s (30.66 ns/i) - 163.972M in 5.028237s
Comparison:
respond_to?: 32610708.6 i/s
begin...rescue: 2306964.7 i/s - 14.14x slower
24/68: code/general/block-apply-method.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
normal 900.554k i/100ms
&method 584.011k i/100ms
Calculating -------------------------------------
normal 16.630M (±22.4%) i/s (60.13 ns/i) - 77.448M in 5.023276s
&method 7.686M (±16.8%) i/s (130.10 ns/i) - 37.377M in 5.023526s
Comparison:
normal: 16629686.6 i/s
&method: 7686358.0 i/s - 2.16x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
normal 1.220M i/100ms
&method 288.496k i/100ms
Calculating -------------------------------------
normal 7.431M (±13.1%) i/s (134.58 ns/i) - 36.600M in 5.010952s
&method 2.453M (±18.8%) i/s (407.61 ns/i) - 11.828M in 5.019798s
Comparison:
normal: 7430597.6 i/s
&method: 2453343.3 i/s - 3.03x slower
25/68: code/general/constantize-vs-comparison.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
using an if statement
1.195M i/100ms
String#constantize 1.126M i/100ms
Calculating -------------------------------------
using an if statement
58.698M (±22.8%) i/s (17.04 ns/i) - 242.519M in 5.006992s
String#constantize 40.882M (±24.4%) i/s (24.46 ns/i) - 173.333M in 5.006453s
Comparison:
using an if statement: 58698364.1 i/s
String#constantize: 40882456.7 i/s - same-ish: difference falls within error
<internal:/Users/headius/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require': cannot load such file -- active_support/core_ext/string/inflections.rb (LoadError)
from <internal:/Users/headius/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require'
from code/general/constantize-vs-comparison.rb:1:in '<main>'
26/68: code/general/define_method-vs-module-eval.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
module_eval with string
663.000 i/100ms
define_method 1.656k i/100ms
Calculating -------------------------------------
module_eval with string
7.096k (±21.9%) i/s (140.93 μs/i) - 33.813k in 5.070870s
define_method 11.409k (±23.1%) i/s (87.65 μs/i) - 54.648k in 5.114822s
Comparison:
define_method: 11408.8 i/s
module_eval with string: 7095.6 i/s - 1.61x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
module_eval with string
581.000 i/100ms
define_method 581.000 i/100ms
Calculating -------------------------------------
module_eval with string
5.871k (±21.4%) i/s (170.33 μs/i) - 27.307k in 5.036301s
define_method 7.839k (±18.1%) i/s (127.56 μs/i) - 37.184k in 5.057675s
Comparison:
define_method: 7839.5 i/s
module_eval with string: 5870.9 i/s - same-ish: difference falls within error
27/68: code/general/format-vs-round-and-to-s.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Float#round 220.168k i/100ms
Kernel#format 247.548k i/100ms
String#% 365.477k i/100ms
Calculating -------------------------------------
Float#round 3.541M (±11.2%) i/s (282.39 ns/i) - 17.613M in 5.044795s
Kernel#format 4.389M (± 9.7%) i/s (227.85 ns/i) - 21.784M in 5.019593s
String#% 4.673M (±12.2%) i/s (213.99 ns/i) - 23.025M in 5.010207s
Comparison:
String#%: 4673068.5 i/s
Kernel#format: 4388846.8 i/s - same-ish: difference falls within error
Float#round: 3541142.6 i/s - 1.32x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Float#round 294.562k i/100ms
Kernel#format 529.872k i/100ms
String#% 475.911k i/100ms
Calculating -------------------------------------
Float#round 3.913M (±13.4%) i/s (255.54 ns/i) - 19.147M in 5.007875s
Kernel#format 4.386M (±16.0%) i/s (228.00 ns/i) - 21.725M in 5.104095s
String#% 4.908M (± 9.7%) i/s (203.76 ns/i) - 24.747M in 5.104908s
Comparison:
String#%: 4907816.9 i/s
Kernel#format: 4386053.4 i/s - same-ish: difference falls within error
Float#round: 3913286.7 i/s - same-ish: difference falls within error
28/68: code/general/hash-vs-openstruct-on-access.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash 1.270M i/100ms
OpenStruct 743.375k i/100ms
Calculating -------------------------------------
Hash 66.438M (±28.0%) i/s (15.05 ns/i) - 248.920M in 5.008483s
OpenStruct 12.803M (±23.4%) i/s (78.11 ns/i) - 60.213M in 5.049277s
Comparison:
Hash: 66437558.7 i/s
OpenStruct: 12802780.7 i/s - 5.19x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash 2.198M i/100ms
OpenStruct 1.340M i/100ms
Calculating -------------------------------------
Hash 27.079M (± 4.2%) i/s (36.93 ns/i) - 136.298M in 5.042802s
OpenStruct 16.237M (± 0.8%) i/s (61.59 ns/i) - 81.710M in 5.032771s
Comparison:
Hash: 27079451.1 i/s
OpenStruct: 16236584.5 i/s - 1.67x slower
29/68: code/general/hash-vs-openstruct.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash 1.408M i/100ms
OpenStruct 64.442k i/100ms
Calculating -------------------------------------
Hash 43.522M (±29.8%) i/s (22.98 ns/i) - 178.847M in 5.025162s
OpenStruct 633.714k (±10.7%) i/s (1.58 μs/i) - 3.158M in 5.038647s
Comparison:
Hash: 43522087.7 i/s
OpenStruct: 633714.4 i/s - 68.68x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash 2.651M i/100ms
OpenStruct 26.064k i/100ms
Calculating -------------------------------------
Hash 30.948M (± 4.6%) i/s (32.31 ns/i) - 156.401M in 5.066532s
OpenStruct 294.069k (± 2.5%) i/s (3.40 μs/i) - 1.486M in 5.055509s
Comparison:
Hash: 30947938.4 i/s
OpenStruct: 294069.0 i/s - 105.24x slower
30/68: code/general/inheritance-check.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
less than or equal 1.081M i/100ms
ancestors.include? 421.980k i/100ms
Calculating -------------------------------------
less than or equal 25.982M (±25.6%) i/s (38.49 ns/i) - 114.542M in 4.999702s
ancestors.include? 5.196M (±11.7%) i/s (192.44 ns/i) - 25.741M in 5.031213s
Comparison:
less than or equal: 25981917.0 i/s
ancestors.include?: 5196487.6 i/s - 5.00x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
less than or equal 3.082M i/100ms
ancestors.include? 198.999k i/100ms
Calculating -------------------------------------
less than or equal 35.257M (± 3.8%) i/s (28.36 ns/i) - 178.760M in 5.078661s
ancestors.include? 2.124M (± 8.6%) i/s (470.70 ns/i) - 10.547M in 5.013891s
Comparison:
less than or equal: 35257395.5 i/s
ancestors.include?: 2124473.7 i/s - 16.60x slower
31/68: code/general/loop-vs-while-true.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
While Loop 1.000 i/100ms
Kernel loop 1.000 i/100ms
Calculating -------------------------------------
While Loop 4.550 (± 0.0%) i/s (219.78 ms/i) - 23.000 in 5.059162s
Kernel loop 0.819 (± 0.0%) i/s (1.22 s/i) - 5.000 in 6.102952s
Comparison:
While Loop: 4.5 i/s
Kernel loop: 0.8 i/s - 5.55x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
While Loop 1.000 i/100ms
Kernel loop 1.000 i/100ms
Calculating -------------------------------------
While Loop 1.104 (± 0.0%) i/s (905.58 ms/i) - 6.000 in 5.441366s
Kernel loop 1.074 (± 0.0%) i/s (931.06 ms/i) - 6.000 in 5.587214s
Comparison:
While Loop: 1.1 i/s
Kernel loop: 1.1 i/s - 1.03x slower
32/68: code/general/raise-vs-e2mmap.rb
Ignoring resolv-0.6.3 because its extensions are not built. Try: gem pristine resolv --version 0.6.3
LoadError: cannot load such file -- e2mmap
require at org/jruby/RubyKernel.java:1193
require at /Users/headius/work/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:136
<main> at code/general/raise-vs-e2mmap.rb:2
<internal:/Users/headius/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require': cannot load such file -- e2mmap (LoadError)
from <internal:/Users/headius/.rubies/ruby-3.4.7/lib/ruby/3.4.0/rubygems/core_ext/kernel_require.rb>:136:in 'Kernel#require'
from code/general/raise-vs-e2mmap.rb:2:in '<main>'
33/68: code/hash/bracket-vs-dup.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash[] 850.178k i/100ms
Hash#dup 747.376k i/100ms
Calculating -------------------------------------
Hash[] 14.369M (±19.7%) i/s (69.60 ns/i) - 68.014M in 5.007168s
Hash#dup 11.931M (±19.7%) i/s (83.81 ns/i) - 56.801M in 5.030377s
Comparison:
Hash[]: 14368600.2 i/s
Hash#dup: 11931360.6 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash[] 784.234k i/100ms
Hash#dup 611.692k i/100ms
Calculating -------------------------------------
Hash[] 6.480M (±20.8%) i/s (154.32 ns/i) - 31.369M in 5.056335s
Hash#dup 5.611M (±12.5%) i/s (178.23 ns/i) - 27.526M in 5.001331s
Comparison:
Hash[]: 6480130.5 i/s
Hash#dup: 5610837.3 i/s - same-ish: difference falls within error
34/68: code/hash/bracket-vs-fetch.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#[], symbol 979.134k i/100ms
Hash#fetch, symbol 1.174M i/100ms
Hash#[], string 1.340M i/100ms
Hash#fetch, string 1.297M i/100ms
Calculating -------------------------------------
Hash#[], symbol 95.951M (±30.1%) i/s (10.42 ns/i) - 325.072M in 5.000547s
Hash#fetch, symbol 125.486M (±18.3%) i/s (7.97 ns/i) - 505.995M in 4.999148s
Hash#[], string 60.940M (±24.7%) i/s (16.41 ns/i) - 245.286M in 5.009566s
Hash#fetch, string 59.145M (±24.3%) i/s (16.91 ns/i) - 241.262M in 5.010161s
Comparison:
Hash#fetch, symbol: 125485807.1 i/s
Hash#[], symbol: 95950915.2 i/s - same-ish: difference falls within error
Hash#[], string: 60940209.3 i/s - 2.06x slower
Hash#fetch, string: 59145125.8 i/s - 2.12x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#[], symbol 3.959M i/100ms
Hash#fetch, symbol 3.778M i/100ms
Hash#[], string 3.903M i/100ms
Hash#fetch, string 1.483M i/100ms
Calculating -------------------------------------
Hash#[], symbol 53.639M (± 2.9%) i/s (18.64 ns/i) - 269.233M in 5.023543s
Hash#fetch, symbol 46.295M (± 4.5%) i/s (21.60 ns/i) - 234.206M in 5.072606s
Hash#[], string 52.066M (± 2.3%) i/s (19.21 ns/i) - 261.532M in 5.025838s
Hash#fetch, string 22.836M (± 3.4%) i/s (43.79 ns/i) - 114.192M in 5.007284s
Comparison:
Hash#[], symbol: 53638556.7 i/s
Hash#[], string: 52065555.3 i/s - same-ish: difference falls within error
Hash#fetch, symbol: 46294506.3 i/s - 1.16x slower
Hash#fetch, string: 22836412.8 i/s - 2.35x slower
35/68: code/hash/dig-vs-[]-vs-fetch.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#dig 1.015M i/100ms
Hash#[] 1.062M i/100ms
Hash#[] || 1.088M i/100ms
Hash#[] && 782.318k i/100ms
Hash#fetch 1.144M i/100ms
Hash#fetch fallback 1.094M i/100ms
Calculating -------------------------------------
Hash#dig 28.474M (±29.5%) i/s (35.12 ns/i) - 114.702M in 5.010061s
Hash#[] 45.391M (±25.3%) i/s (22.03 ns/i) - 184.774M in 5.010381s
Hash#[] || 44.678M (±24.6%) i/s (22.38 ns/i) - 184.992M in 5.005759s
Hash#[] && 15.811M (±21.7%) i/s (63.25 ns/i) - 73.538M in 5.035852s
Hash#fetch 59.300M (±23.6%) i/s (16.86 ns/i) - 236.822M in 5.016740s
Hash#fetch fallback 42.136M (±26.0%) i/s (23.73 ns/i) - 172.796M in 5.006574s
Comparison:
Hash#fetch: 59299878.4 i/s
Hash#[]: 45390784.3 i/s - same-ish: difference falls within error
Hash#[] ||: 44678464.2 i/s - same-ish: difference falls within error
Hash#fetch fallback: 42136072.5 i/s - same-ish: difference falls within error
Hash#dig: 28474403.7 i/s - 2.08x slower
Hash#[] &&: 15811470.0 i/s - 3.75x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#dig 2.123M i/100ms
Hash#[] 2.163M i/100ms
Hash#[] || 2.352M i/100ms
Hash#[] && 989.852k i/100ms
Hash#fetch 1.745M i/100ms
Hash#fetch fallback 920.699k i/100ms
Calculating -------------------------------------
Hash#dig 24.505M (± 2.7%) i/s (40.81 ns/i) - 123.111M in 5.027883s
Hash#[] 27.180M (± 3.5%) i/s (36.79 ns/i) - 136.264M in 5.019952s
Hash#[] || 27.745M (± 3.7%) i/s (36.04 ns/i) - 138.756M in 5.008714s
Hash#[] && 11.347M (± 7.8%) i/s (88.13 ns/i) - 56.422M in 5.007859s
Hash#fetch 20.627M (± 1.9%) i/s (48.48 ns/i) - 104.675M in 5.076490s
Hash#fetch fallback 10.304M (± 1.5%) i/s (97.05 ns/i) - 51.559M in 5.004925s
Comparison:
Hash#[] ||: 27745036.2 i/s
Hash#[]: 27180257.8 i/s - same-ish: difference falls within error
Hash#dig: 24505132.5 i/s - 1.13x slower
Hash#fetch: 20627139.6 i/s - 1.35x slower
Hash#[] &&: 11346542.9 i/s - 2.45x slower
Hash#fetch fallback: 10304140.0 i/s - 2.69x slower
36/68: code/hash/fetch-vs-fetch-with-block.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#fetch + const 1.481M i/100ms
Hash#fetch + block 1.299M i/100ms
Hash#fetch + arg 1.346M i/100ms
Calculating -------------------------------------
Hash#fetch + const 115.444M (±23.2%) i/s (8.66 ns/i) - 448.743M in 5.005971s
Hash#fetch + block 43.754M (±25.7%) i/s (22.85 ns/i) - 181.850M in 5.014961s
Hash#fetch + arg 123.058M (±17.6%) i/s (8.13 ns/i) - 507.459M in 4.999065s
Comparison:
Hash#fetch + arg: 123058169.9 i/s
Hash#fetch + const: 115444148.2 i/s - same-ish: difference falls within error
Hash#fetch + block: 43754325.2 i/s - 2.81x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#fetch + const 4.075M i/100ms
Hash#fetch + block 3.977M i/100ms
Hash#fetch + arg 2.456M i/100ms
Calculating -------------------------------------
Hash#fetch + const 53.525M (± 2.5%) i/s (18.68 ns/i) - 268.966M in 5.028219s
Hash#fetch + block 54.225M (± 1.4%) i/s (18.44 ns/i) - 274.424M in 5.061742s
Hash#fetch + arg 29.546M (± 0.3%) i/s (33.85 ns/i) - 149.833M in 5.071209s
Comparison:
Hash#fetch + block: 54225485.2 i/s
Hash#fetch + const: 53524902.1 i/s - same-ish: difference falls within error
Hash#fetch + arg: 29545926.9 i/s - 1.84x slower
37/68: code/hash/hash-key-sort_by-vs-sort.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
sort_by + to_h 118.588k i/100ms
sort + to_h 59.461k i/100ms
Calculating -------------------------------------
sort_by + to_h 1.177M (± 5.0%) i/s (849.77 ns/i) - 5.929M in 5.053157s
sort + to_h 610.449k (± 2.4%) i/s (1.64 μs/i) - 3.092M in 5.068152s
Comparison:
sort_by + to_h: 1176788.9 i/s
sort + to_h: 610449.0 i/s - 1.93x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
sort_by + to_h 70.061k i/100ms
sort + to_h 27.801k i/100ms
Calculating -------------------------------------
sort_by + to_h 715.829k (± 5.2%) i/s (1.40 μs/i) - 3.573M in 5.010343s
sort + to_h 259.180k (± 7.2%) i/s (3.86 μs/i) - 1.307M in 5.073709s
Comparison:
sort_by + to_h: 715829.0 i/s
sort + to_h: 259180.5 i/s - 2.76x slower
38/68: code/hash/keys-each-vs-each_key.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#keys.each 518.287k i/100ms
Hash#each_key 526.307k i/100ms
Calculating -------------------------------------
Hash#keys.each 6.084M (±11.3%) i/s (164.36 ns/i) - 30.061M in 5.005296s
Hash#each_key 7.312M (±15.4%) i/s (136.75 ns/i) - 35.789M in 5.036763s
Comparison:
Hash#each_key: 7312430.2 i/s
Hash#keys.each: 6084055.0 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#keys.each 456.532k i/100ms
Hash#each_key 530.439k i/100ms
Calculating -------------------------------------
Hash#keys.each 4.822M (± 3.9%) i/s (207.36 ns/i) - 24.196M in 5.025770s
Hash#each_key 5.749M (± 1.8%) i/s (173.93 ns/i) - 29.174M in 5.076002s
Comparison:
Hash#each_key: 5749316.2 i/s
Hash#keys.each: 4822432.3 i/s - 1.19x slower
39/68: code/hash/keys-include-vs-key.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#keys.include? 977.000 i/100ms
Hash#key? 1.448M i/100ms
Calculating -------------------------------------
Hash#keys.include? 10.013k (± 6.3%) i/s (99.87 μs/i) - 50.804k in 5.098768s
Hash#key? 92.634M (±20.9%) i/s (10.80 ns/i) - 373.521M in 5.007659s
Comparison:
Hash#key?: 92633801.8 i/s
Hash#keys.include?: 10012.7 i/s - 9251.64x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#keys.include? 2.408k i/100ms
Hash#key? 3.320M i/100ms
Calculating -------------------------------------
Hash#keys.include? 22.691k (± 4.8%) i/s (44.07 μs/i) - 113.176k in 5.000087s
Hash#key? 41.146M (± 1.4%) i/s (24.30 ns/i) - 205.821M in 5.003220s
Comparison:
Hash#key?: 41146259.0 i/s
Hash#keys.include?: 22690.9 i/s - 1813.34x slower
40/68: code/hash/merge-bang-vs-[]=.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#merge! 21.816k i/100ms
Hash#[]= 32.092k i/100ms
Calculating -------------------------------------
Hash#merge! 218.984k (± 1.9%) i/s (4.57 μs/i) - 1.113M in 5.082607s
Hash#[]= 312.886k (± 1.1%) i/s (3.20 μs/i) - 1.573M in 5.026457s
Comparison:
Hash#[]=: 312886.0 i/s
Hash#merge!: 218984.2 i/s - 1.43x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#merge! 9.279k i/100ms
Hash#[]= 24.118k i/100ms
Calculating -------------------------------------
Hash#merge! 92.506k (± 1.2%) i/s (10.81 μs/i) - 463.950k in 5.016078s
Hash#[]= 240.737k (± 1.7%) i/s (4.15 μs/i) - 1.206M in 5.010665s
Comparison:
Hash#[]=: 240737.5 i/s
Hash#merge!: 92505.8 i/s - 2.60x slower
41/68: code/hash/merge-bang-vs-merge-vs-dup-merge-bang.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
{}#merge!(Hash) do end
16.650k i/100ms
Hash#merge({}) 14.630k i/100ms
Hash#dup#merge!({}) 14.174k i/100ms
Calculating -------------------------------------
{}#merge!(Hash) do end
173.695k (± 4.6%) i/s (5.76 μs/i) - 865.800k in 4.998455s
Hash#merge({}) 143.168k (± 4.2%) i/s (6.98 μs/i) - 716.870k in 5.016761s
Hash#dup#merge!({}) 138.003k (± 1.9%) i/s (7.25 μs/i) - 694.526k in 5.034612s
Comparison:
{}#merge!(Hash) do end: 173695.3 i/s
Hash#merge({}): 143167.7 i/s - 1.21x slower
Hash#dup#merge!({}): 138003.4 i/s - 1.26x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
{}#merge!(Hash) do end
12.524k i/100ms
Hash#merge({}) 9.851k i/100ms
Hash#dup#merge!({}) 7.681k i/100ms
Calculating -------------------------------------
{}#merge!(Hash) do end
126.165k (± 2.0%) i/s (7.93 μs/i) - 638.724k in 5.064675s
Hash#merge({}) 101.303k (± 1.5%) i/s (9.87 μs/i) - 512.252k in 5.057821s
Hash#dup#merge!({}) 77.029k (± 1.5%) i/s (12.98 μs/i) - 391.731k in 5.086599s
Comparison:
{}#merge!(Hash) do end: 126165.0 i/s
Hash#merge({}): 101303.3 i/s - 1.25x slower
Hash#dup#merge!({}): 77029.1 i/s - 1.64x slower
42/68: code/hash/merge-vs-double-splat-operator.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#**other 804.465k i/100ms
Hash#merge 804.656k i/100ms
Calculating -------------------------------------
Hash#**other 12.992M (±20.3%) i/s (76.97 ns/i) - 61.944M in 5.053015s
Hash#merge 13.253M (±19.1%) i/s (75.45 ns/i) - 63.568M in 5.054123s
Comparison:
Hash#merge: 13253127.6 i/s
Hash#**other: 12991773.5 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#**other 961.141k i/100ms
Hash#merge 843.656k i/100ms
Calculating -------------------------------------
Hash#**other 10.902M (± 2.1%) i/s (91.73 ns/i) - 54.785M in 5.027533s
Hash#merge 9.396M (± 0.4%) i/s (106.43 ns/i) - 47.245M in 5.028312s
Comparison:
Hash#**other: 10901898.0 i/s
Hash#merge: 9395860.3 i/s - 1.16x slower
43/68: code/hash/merge-vs-merge-bang.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#merge 3.144k i/100ms
Hash#merge! 18.049k i/100ms
Calculating -------------------------------------
Hash#merge 32.256k (± 4.9%) i/s (31.00 μs/i) - 163.488k in 5.083525s
Hash#merge! 168.941k (± 2.3%) i/s (5.92 μs/i) - 848.303k in 5.024062s
Comparison:
Hash#merge!: 168941.1 i/s
Hash#merge: 32256.4 i/s - 5.24x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#merge 4.465k i/100ms
Hash#merge! 9.463k i/100ms
Calculating -------------------------------------
Hash#merge 44.030k (± 3.1%) i/s (22.71 μs/i) - 223.250k in 5.075662s
Hash#merge! 90.819k (± 0.5%) i/s (11.01 μs/i) - 454.224k in 5.001541s
Comparison:
Hash#merge!: 90819.4 i/s
Hash#merge: 44029.8 i/s - 2.06x slower
44/68: code/hash/slice-native-vs-before-native.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#native-slice 922.174k i/100ms
Array#each 639.982k i/100ms
Array#each_w/_object 548.745k i/100ms
Hash#select-include 238.194k i/100ms
Calculating -------------------------------------
Hash#native-slice 18.667M (±23.8%) i/s (53.57 ns/i) - 85.762M in 5.034823s
Array#each 9.441M (±17.7%) i/s (105.92 ns/i) - 45.439M in 5.008655s
Array#each_w/_object 6.691M (±26.8%) i/s (149.45 ns/i) - 30.730M in 5.045174s
Hash#select-include 2.614M (± 7.6%) i/s (382.51 ns/i) - 13.101M in 5.041771s
Comparison:
Hash#native-slice : 18666874.9 i/s
Array#each : 9441250.6 i/s - 1.98x slower
Array#each_w/_object: 6691080.3 i/s - 2.79x slower
Hash#select-include : 2614302.7 i/s - 7.14x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#native-slice 1.006M i/100ms
Array#each 814.437k i/100ms
Array#each_w/_object 428.925k i/100ms
Hash#select-include 145.887k i/100ms
Calculating -------------------------------------
Hash#native-slice 11.232M (± 0.2%) i/s (89.03 ns/i) - 56.354M in 5.017256s
Array#each 8.753M (± 2.0%) i/s (114.25 ns/i) - 43.980M in 5.026846s
Array#each_w/_object 4.812M (± 1.2%) i/s (207.82 ns/i) - 24.449M in 5.081697s
Hash#select-include 1.500M (± 2.8%) i/s (666.49 ns/i) - 7.586M in 5.060365s
Comparison:
Hash#native-slice : 11231999.4 i/s
Array#each : 8752542.0 i/s - 1.28x slower
Array#each_w/_object: 4811783.4 i/s - 2.33x slower
Hash#select-include : 1500408.8 i/s - 7.49x slower
45/68: code/hash/update-vs-[]=.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#[]= 37.290k i/100ms
Hash#update 20.627k i/100ms
Calculating -------------------------------------
Hash#[]= 379.533k (± 2.3%) i/s (2.63 μs/i) - 1.902M in 5.013688s
Hash#update 242.816k (± 1.3%) i/s (4.12 μs/i) - 1.217M in 5.012882s
Comparison:
Hash#[]=: 379533.4 i/s
Hash#update: 242816.4 i/s - 1.56x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#[]= 23.571k i/100ms
Hash#update 9.492k i/100ms
Calculating -------------------------------------
Hash#[]= 231.059k (± 1.7%) i/s (4.33 μs/i) - 1.155M in 5.000061s
Hash#update 96.019k (± 0.5%) i/s (10.41 μs/i) - 484.092k in 5.041719s
Comparison:
Hash#[]=: 231058.5 i/s
Hash#update: 96019.4 i/s - 2.41x slower
46/68: code/hash/values-include-vs-value.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Hash#values.include? 1.122k i/100ms
Hash#value? 1.635k i/100ms
Calculating -------------------------------------
Hash#values.include? 11.047k (± 4.8%) i/s (90.52 μs/i) - 56.100k in 5.089963s
Hash#value? 15.870k (± 7.2%) i/s (63.01 μs/i) - 80.115k in 5.081033s
Comparison:
Hash#value?: 15870.0 i/s
Hash#values.include?: 11046.9 i/s - 1.44x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Hash#values.include? 3.071k i/100ms
Hash#value? 3.403k i/100ms
Calculating -------------------------------------
Hash#values.include? 33.793k (± 2.7%) i/s (29.59 μs/i) - 168.905k in 5.002067s
Hash#value? 30.397k (± 1.6%) i/s (32.90 μs/i) - 153.135k in 5.039025s
Comparison:
Hash#values.include?: 33792.6 i/s
Hash#value?: 30397.4 i/s - 1.11x slower
47/68: code/method/call-vs-send-vs-method_missing.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
call 1.191M i/100ms
send 1.334M i/100ms
method_missing 959.573k i/100ms
Calculating -------------------------------------
call 58.369M (±24.7%) i/s (17.13 ns/i) - 227.397M in 5.003538s
send 38.679M (±25.7%) i/s (25.85 ns/i) - 165.377M in 5.020314s
method_missing 37.097M (±27.8%) i/s (26.96 ns/i) - 145.855M in 5.019633s
Comparison:
call: 58369029.5 i/s
send: 38678628.4 i/s - same-ish: difference falls within error
method_missing: 37096792.1 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
call 1.956M i/100ms
send 1.879M i/100ms
method_missing 927.943k i/100ms
Calculating -------------------------------------
call 22.605M (± 2.8%) i/s (44.24 ns/i) - 113.461M in 5.023984s
send 21.882M (± 2.8%) i/s (45.70 ns/i) - 110.854M in 5.070702s
method_missing 10.696M (± 3.1%) i/s (93.49 ns/i) - 53.821M in 5.037400s
Comparison:
call: 22605343.9 i/s
send: 21882276.8 i/s - same-ish: difference falls within error
method_missing: 10695843.2 i/s - 2.11x slower
48/68: code/proc-and-block/block-vs-to_proc.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Block 52.446k i/100ms
Symbol#to_proc 49.669k i/100ms
Calculating -------------------------------------
Block 533.117k (± 2.0%) i/s (1.88 μs/i) - 2.675M in 5.019378s
Symbol#to_proc 498.059k (± 3.8%) i/s (2.01 μs/i) - 2.533M in 5.094498s
Comparison:
Block: 533116.7 i/s
Symbol#to_proc: 498059.4 i/s - 1.07x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Block 23.037k i/100ms
Symbol#to_proc 21.596k i/100ms
Calculating -------------------------------------
Block 230.467k (± 2.7%) i/s (4.34 μs/i) - 1.152M in 5.002422s
Symbol#to_proc 215.952k (± 1.8%) i/s (4.63 μs/i) - 1.080M in 5.001808s
Comparison:
Block: 230466.6 i/s
Symbol#to_proc: 215952.0 i/s - 1.07x slower
49/68: code/proc-and-block/proc-call-vs-yield.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
block.call 1.098M i/100ms
block + yield 1.334M i/100ms
unused block 1.364M i/100ms
yield 1.307M i/100ms
Calculating -------------------------------------
block.call 24.854M (±26.4%) i/s (40.24 ns/i) - 108.728M in 4.998733s
block + yield 35.527M (±30.2%) i/s (28.15 ns/i) - 150.717M in 5.036095s
unused block 31.017M (±23.8%) i/s (32.24 ns/i) - 139.172M in 5.025825s
yield 28.714M (±23.4%) i/s (34.83 ns/i) - 129.437M in 5.010193s
Comparison:
block + yield: 35526968.8 i/s
unused block: 31017374.6 i/s - same-ish: difference falls within error
yield: 28714014.6 i/s - same-ish: difference falls within error
block.call: 24853634.6 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
block.call 2.598M i/100ms
block + yield 4.186M i/100ms
unused block 5.357M i/100ms
yield 3.885M i/100ms
Calculating -------------------------------------
block.call 33.148M (± 2.0%) i/s (30.17 ns/i) - 166.288M in 5.018546s
block + yield 48.791M (± 1.4%) i/s (20.50 ns/i) - 246.969M in 5.062795s
unused block 80.739M (± 3.9%) i/s (12.39 ns/i) - 407.167M in 5.052323s
yield 48.451M (± 2.7%) i/s (20.64 ns/i) - 244.739M in 5.055857s
Comparison:
unused block: 80739236.8 i/s
block + yield: 48790610.1 i/s - 1.65x slower
yield: 48450746.9 i/s - 1.67x slower
block.call: 33148064.0 i/s - 2.44x slower
50/68: code/range/cover-vs-include.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
range#cover? 1.418M i/100ms
range#include? 61.496k i/100ms
range#member? 64.164k i/100ms
plain compare 1.639M i/100ms
value.between? 1.620M i/100ms
Calculating -------------------------------------
range#cover? 50.911M (±24.5%) i/s (19.64 ns/i) - 215.556M in 5.015297s
range#include? 605.016k (± 2.9%) i/s (1.65 μs/i) - 3.075M in 5.086426s
range#member? 602.379k (± 4.5%) i/s (1.66 μs/i) - 3.016M in 5.017895s
plain compare 74.960M (±22.9%) i/s (13.34 ns/i) - 309.770M in 5.018580s
value.between? 74.342M (±22.5%) i/s (13.45 ns/i) - 307.842M in 5.008928s
Comparison:
plain compare: 74960144.1 i/s
value.between?: 74341664.2 i/s - same-ish: difference falls within error
range#cover?: 50910633.8 i/s - same-ish: difference falls within error
range#include?: 605016.0 i/s - 123.90x slower
range#member?: 602378.7 i/s - 124.44x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
range#cover? 824.819k i/100ms
range#include? 33.833k i/100ms
range#member? 33.853k i/100ms
plain compare 1.605M i/100ms
value.between? 1.656M i/100ms
Calculating -------------------------------------
range#cover? 8.789M (± 1.7%) i/s (113.78 ns/i) - 44.540M in 5.069296s
range#include? 339.931k (± 2.7%) i/s (2.94 μs/i) - 1.725M in 5.080363s
range#member? 333.736k (± 3.4%) i/s (3.00 μs/i) - 1.693M in 5.078558s
plain compare 18.019M (± 3.2%) i/s (55.50 ns/i) - 91.495M in 5.084342s
value.between? 18.599M (± 2.2%) i/s (53.77 ns/i) - 94.386M in 5.077341s
Comparison:
value.between?: 18599130.0 i/s
plain compare: 18019444.0 i/s - same-ish: difference falls within error
range#cover?: 8788943.0 i/s - 2.12x slower
range#include?: 339930.8 i/s - 54.71x slower
range#member?: 333736.1 i/s - 55.73x slower
51/68: code/string/===-vs-=~-vs-match.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Regexp#match? 1.260M i/100ms
String#match? 1.253M i/100ms
String#=~ 1.240M i/100ms
Regexp#=== 1.207M i/100ms
Regexp#match 1.233M i/100ms
String#match 1.159M i/100ms
Calculating -------------------------------------
Regexp#match? 39.044M (±26.5%) i/s (25.61 ns/i) - 163.777M in 5.018182s
String#match? 39.699M (±24.7%) i/s (25.19 ns/i) - 171.712M in 5.020727s
String#=~ 34.446M (±26.3%) i/s (29.03 ns/i) - 147.605M in 5.023410s
Regexp#=== 35.240M (±25.3%) i/s (28.38 ns/i) - 152.133M in 5.018602s
Regexp#match 34.900M (±25.7%) i/s (28.65 ns/i) - 150.471M in 5.028081s
String#match 30.632M (±25.8%) i/s (32.65 ns/i) - 133.283M in 5.016226s
Comparison:
String#match?: 39699377.3 i/s
Regexp#match?: 39043826.2 i/s - same-ish: difference falls within error
Regexp#===: 35240227.2 i/s - same-ish: difference falls within error
Regexp#match: 34899501.3 i/s - same-ish: difference falls within error
String#=~: 34445982.8 i/s - same-ish: difference falls within error
String#match: 30632409.3 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Regexp#match? 2.582M i/100ms
String#match? 2.639M i/100ms
String#=~ 1.324M i/100ms
Regexp#=== 1.328M i/100ms
Regexp#match 1.260M i/100ms
String#match 1.075M i/100ms
Calculating -------------------------------------
Regexp#match? 31.776M (± 0.5%) i/s (31.47 ns/i) - 160.058M in 5.037191s
String#match? 31.636M (± 0.6%) i/s (31.61 ns/i) - 158.324M in 5.004687s
String#=~ 14.964M (± 0.9%) i/s (66.82 ns/i) - 75.477M in 5.044181s
Regexp#=== 14.966M (± 1.4%) i/s (66.82 ns/i) - 75.710M in 5.059963s
Regexp#match 14.024M (± 1.5%) i/s (71.31 ns/i) - 70.550M in 5.031872s
String#match 12.187M (± 9.1%) i/s (82.05 ns/i) - 60.198M in 5.020934s
Comparison:
Regexp#match?: 31776182.6 i/s
String#match?: 31636217.2 i/s - same-ish: difference falls within error
Regexp#===: 14965607.2 i/s - 2.12x slower
String#=~: 14964472.6 i/s - 2.12x slower
Regexp#match: 14024136.6 i/s - 2.27x slower
String#match: 12187261.0 i/s - 2.61x slower
52/68: code/string/casecmp-vs-downcase-==.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#casecmp? 1.054M i/100ms
String#downcase + == 1.158M i/100ms
String#casecmp 1.446M i/100ms
Calculating -------------------------------------
String#casecmp? 25.401M (±27.0%) i/s (39.37 ns/i) - 110.643M in 5.026351s
String#downcase + == 40.702M (±24.4%) i/s (24.57 ns/i) - 173.655M in 5.011940s
String#casecmp 73.944M (±22.9%) i/s (13.52 ns/i) - 299.336M in 5.005590s
Comparison:
String#casecmp: 73943952.9 i/s
String#downcase + ==: 40702246.1 i/s - 1.82x slower
String#casecmp?: 25401311.4 i/s - 2.91x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#casecmp? 1.142M i/100ms
String#downcase + == 1.600M i/100ms
String#casecmp 2.169M i/100ms
Calculating -------------------------------------
String#casecmp? 12.298M (± 1.8%) i/s (81.31 ns/i) - 61.667M in 5.016034s
String#downcase + == 17.728M (± 0.1%) i/s (56.41 ns/i) - 89.604M in 5.054486s
String#casecmp 24.461M (± 0.7%) i/s (40.88 ns/i) - 123.628M in 5.054435s
Comparison:
String#casecmp: 24460572.7 i/s
String#downcase + ==: 17727591.0 i/s - 1.38x slower
String#casecmp?: 12298290.3 i/s - 1.99x slower
53/68: code/string/concatenation.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#+ 1.364M i/100ms
String#concat 1.246M i/100ms
String#append 1.228M i/100ms
"foo" "bar" 1.331M i/100ms
"#{'foo'}#{'bar'}" 1.329M i/100ms
Calculating -------------------------------------
String#+ 42.633M (±24.6%) i/s (23.46 ns/i) - 184.189M in 5.028801s
String#concat 30.502M (±25.0%) i/s (32.79 ns/i) - 134.560M in 5.029932s
String#append 30.810M (±24.5%) i/s (32.46 ns/i) - 136.269M in 5.030499s
"foo" "bar" 98.978M (±21.8%) i/s (10.10 ns/i) - 371.303M in 5.003803s
"#{'foo'}#{'bar'}" 98.093M (±21.8%) i/s (10.19 ns/i) - 366.859M in 5.005345s
Comparison:
"foo" "bar": 98978398.6 i/s
"#{'foo'}#{'bar'}": 98093424.9 i/s - same-ish: difference falls within error
String#+: 42633280.8 i/s - 2.32x slower
String#append: 30809914.0 i/s - 3.21x slower
String#concat: 30501705.3 i/s - 3.25x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#+ 1.330M i/100ms
String#concat 1.399M i/100ms
String#append 1.630M i/100ms
"foo" "bar" 2.752M i/100ms
"#{'foo'}#{'bar'}" 2.810M i/100ms
Calculating -------------------------------------
String#+ 12.495M (±15.2%) i/s (80.03 ns/i) - 61.160M in 5.017669s
String#concat 12.970M (±11.0%) i/s (77.10 ns/i) - 64.367M in 5.027925s
String#append 15.555M (± 9.9%) i/s (64.29 ns/i) - 78.237M in 5.084051s
"foo" "bar" 28.091M (±14.8%) i/s (35.60 ns/i) - 137.575M in 5.046289s
"#{'foo'}#{'bar'}" 32.057M (± 8.7%) i/s (31.19 ns/i) - 160.159M in 5.037040s
Comparison:
"#{'foo'}#{'bar'}": 32056591.2 i/s
"foo" "bar": 28091396.7 i/s - same-ish: difference falls within error
String#append: 15555499.9 i/s - 2.06x slower
String#concat: 12970109.8 i/s - 2.47x slower
String#+: 12495117.2 i/s - 2.57x slower
54/68: code/string/concatenation_randomized.rb
55/68: code/string/dup-vs-unary-plus.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#+@ 1.268M i/100ms
String#dup 1.158M i/100ms
Calculating -------------------------------------
String#+@ 98.136M (±23.1%) i/s (10.19 ns/i) - 357.640M in 5.005987s
String#dup 103.511M (±20.4%) i/s (9.66 ns/i) - 391.272M in 5.002357s
Comparison:
String#dup: 103511251.1 i/s
String#+@: 98136253.6 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#+@ 2.873M i/100ms
String#dup 2.803M i/100ms
Calculating -------------------------------------
String#+@ 34.250M (± 0.4%) i/s (29.20 ns/i) - 172.373M in 5.032821s
String#dup 35.182M (± 6.1%) i/s (28.42 ns/i) - 176.588M in 5.043778s
Comparison:
String#dup: 35182384.6 i/s
String#+@: 34250295.3 i/s - same-ish: difference falls within error
56/68: code/string/end-string-checking-match-vs-end_with.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#=~ 429.164k i/100ms
String#match? 494.320k i/100ms
String#end_with? 1.286M i/100ms
Calculating -------------------------------------
String#=~ 5.237M (±12.5%) i/s (190.95 ns/i) - 25.750M in 5.005386s
String#match? 6.389M (±13.5%) i/s (156.53 ns/i) - 31.636M in 5.056608s
String#end_with? 50.583M (±23.5%) i/s (19.77 ns/i) - 214.695M in 5.016128s
Comparison:
String#end_with?: 50583427.5 i/s
String#match?: 6388668.6 i/s - 7.92x slower
String#=~: 5237087.8 i/s - 9.66x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#=~ 453.172k i/100ms
String#match? 749.370k i/100ms
String#end_with? 1.353M i/100ms
Calculating -------------------------------------
String#=~ 4.960M (± 0.9%) i/s (201.63 ns/i) - 24.924M in 5.025926s
String#match? 8.953M (± 2.9%) i/s (111.69 ns/i) - 44.962M in 5.026309s
String#end_with? 14.475M (± 0.4%) i/s (69.09 ns/i) - 73.082M in 5.049063s
Comparison:
String#end_with?: 14474614.0 i/s
String#match?: 8953087.7 i/s - 1.62x slower
String#=~: 4959565.0 i/s - 2.92x slower
57/68: code/string/gsub-vs-sub.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#gsub 406.068k i/100ms
String#sub 801.681k i/100ms
String#dup["string"]=
897.634k i/100ms
Calculating -------------------------------------
String#gsub 4.950M (±11.7%) i/s (202.03 ns/i) - 24.364M in 4.998617s
String#sub 13.181M (±19.4%) i/s (75.87 ns/i) - 62.531M in 5.005316s
String#dup["string"]=
15.641M (±23.4%) i/s (63.94 ns/i) - 72.708M in 5.031382s
Comparison:
String#dup["string"]=: 15640526.1 i/s
String#sub: 13181268.0 i/s - same-ish: difference falls within error
String#gsub: 4949678.5 i/s - 3.16x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#gsub 222.731k i/100ms
String#sub 462.726k i/100ms
String#dup["string"]=
888.277k i/100ms
Calculating -------------------------------------
String#gsub 2.284M (± 1.4%) i/s (437.92 ns/i) - 11.582M in 5.073024s
String#sub 4.716M (± 3.4%) i/s (212.05 ns/i) - 23.599M in 5.010569s
String#dup["string"]=
9.600M (± 2.1%) i/s (104.16 ns/i) - 48.855M in 5.091484s
Comparison:
String#dup["string"]=: 9600239.9 i/s
String#sub: 4715779.3 i/s - 2.04x slower
String#gsub: 2283537.2 i/s - 4.20x slower
58/68: code/string/gsub-vs-tr-vs-delete.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#gsub 409.939k i/100ms
String#tr 577.750k i/100ms
String#delete 574.898k i/100ms
String#delete const 595.716k i/100ms
Calculating -------------------------------------
String#gsub 5.015M (±13.1%) i/s (199.38 ns/i) - 24.596M in 5.004748s
String#tr 7.715M (±15.4%) i/s (129.61 ns/i) - 37.554M in 5.004718s
String#delete 7.965M (±17.0%) i/s (125.55 ns/i) - 38.518M in 5.012507s
String#delete const 8.212M (±16.9%) i/s (121.77 ns/i) - 39.913M in 5.030507s
Comparison:
String#delete const: 8212196.5 i/s
String#delete: 7964693.3 i/s - same-ish: difference falls within error
String#tr: 7715285.5 i/s - same-ish: difference falls within error
String#gsub: 5015426.9 i/s - 1.64x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#gsub 293.222k i/100ms
String#tr 1.003M i/100ms
String#delete 1.272M i/100ms
String#delete const 1.528M i/100ms
Calculating -------------------------------------
String#gsub 3.077M (± 2.3%) i/s (324.96 ns/i) - 15.541M in 5.052755s
String#tr 10.668M (± 4.2%) i/s (93.74 ns/i) - 54.183M in 5.091324s
String#delete 13.936M (± 0.3%) i/s (71.75 ns/i) - 69.965M in 5.020394s
String#delete const 17.184M (± 0.4%) i/s (58.19 ns/i) - 87.085M in 5.067968s
Comparison:
String#delete const: 17183719.8 i/s
String#delete: 13936362.2 i/s - 1.23x slower
String#tr: 10668103.0 i/s - 1.61x slower
String#gsub: 3077283.7 i/s - 5.58x slower
59/68: code/string/gsub-vs-tr.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#gsub 435.875k i/100ms
String#tr 798.391k i/100ms
Calculating -------------------------------------
String#gsub 5.299M (±11.6%) i/s (188.70 ns/i) - 26.152M in 5.009185s
String#tr 14.841M (±19.7%) i/s (67.38 ns/i) - 70.258M in 5.014123s
Comparison:
String#tr: 14841072.5 i/s
String#gsub: 5299353.3 i/s - 2.80x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#gsub 290.050k i/100ms
String#tr 941.767k i/100ms
Calculating -------------------------------------
String#gsub 3.065M (± 1.9%) i/s (326.25 ns/i) - 15.373M in 5.017401s
String#tr 9.919M (± 2.0%) i/s (100.81 ns/i) - 49.914M in 5.034252s
Comparison:
String#tr: 9919314.4 i/s
String#gsub: 3065088.1 i/s - 3.24x slower
60/68: code/string/mutable_vs_immutable_strings.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Without Freeze 1.666M i/100ms
With Freeze 1.769M i/100ms
Calculating -------------------------------------
Without Freeze 95.497M (±23.4%) i/s (10.47 ns/i) - 369.951M in 5.004643s
With Freeze 146.272M (±22.2%) i/s (6.84 ns/i) - 530.676M in 4.999524s
Comparison:
With Freeze: 146271854.2 i/s
Without Freeze: 95496649.2 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Without Freeze 2.709M i/100ms
With Freeze 4.650M i/100ms
Calculating -------------------------------------
Without Freeze 32.893M (± 0.4%) i/s (30.40 ns/i) - 165.254M in 5.024030s
With Freeze 63.729M (± 2.4%) i/s (15.69 ns/i) - 320.847M in 5.037339s
Comparison:
With Freeze: 63728820.2 i/s
Without Freeze: 32893244.5 i/s - 1.94x slower
61/68: code/string/remove-extra-spaces-or-other-chars.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#gsub/regex+/ 30.117k i/100ms
String#squeeze 236.363k i/100ms
Calculating -------------------------------------
String#gsub/regex+/ 311.912k (± 4.6%) i/s (3.21 μs/i) - 1.566M in 5.034450s
String#squeeze 2.585M (±10.3%) i/s (386.80 ns/i) - 12.764M in 5.002457s
Comparison:
String#squeeze: 2585338.7 i/s
String#gsub/regex+/: 311911.7 i/s - 8.29x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#gsub/regex+/ 8.906k i/100ms
String#squeeze 456.496k i/100ms
Calculating -------------------------------------
String#gsub/regex+/ 89.189k (± 1.2%) i/s (11.21 μs/i) - 454.206k in 5.093379s
String#squeeze 4.719M (± 0.6%) i/s (211.93 ns/i) - 23.738M in 5.030864s
Comparison:
String#squeeze: 4718597.0 i/s
String#gsub/regex+/: 89188.8 i/s - 52.91x slower
62/68: code/string/start-string-checking-match-vs-start_with.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#=~ 998.592k i/100ms
String#match? 1.134M i/100ms
String#start_with? 1.583M i/100ms
Calculating -------------------------------------
String#=~ 20.081M (±24.4%) i/s (49.80 ns/i) - 91.870M in 5.042714s
String#match? 27.632M (±24.3%) i/s (36.19 ns/i) - 123.655M in 5.031757s
String#start_with? 101.060M (±20.8%) i/s (9.90 ns/i) - 408.470M in 5.009016s
Comparison:
String#start_with?: 101059621.8 i/s
String#match?: 27632218.2 i/s - 3.66x slower
String#=~: 20080706.6 i/s - 5.03x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#=~ 707.586k i/100ms
String#match? 1.918M i/100ms
String#start_with? 2.092M i/100ms
Calculating -------------------------------------
String#=~ 7.885M (± 3.9%) i/s (126.82 ns/i) - 39.625M in 5.034740s
String#match? 22.636M (± 1.2%) i/s (44.18 ns/i) - 115.052M in 5.083496s
String#start_with? 24.145M (± 2.7%) i/s (41.42 ns/i) - 121.356M in 5.030641s
Comparison:
String#start_with?: 24144780.0 i/s
String#match?: 22635804.3 i/s - 1.07x slower
String#=~: 7885068.2 i/s - 3.06x slower
63/68: code/string/start_with-vs-substring-==.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#start_with? 225.693k i/100ms
String#[0, n] == 108.773k i/100ms
String#[RANGE] == 143.829k i/100ms
String#[0...n] == 108.104k i/100ms
Calculating -------------------------------------
String#start_with? 44.910M (±20.5%) i/s (22.27 ns/i) - 124.808M in 4.998255s
String#[0, n] == 6.410M (±35.5%) i/s (156.00 ns/i) - 17.077M in 5.008772s
String#[RANGE] == 10.508M (±29.2%) i/s (95.17 ns/i) - 32.218M in 5.011158s
String#[0...n] == 5.474M (±40.4%) i/s (182.69 ns/i) - 14.810M in 5.011960s
Comparison:
String#start_with?: 44909961.0 i/s
String#[RANGE] ==: 10507960.1 i/s - 4.27x slower
String#[0, n] ==: 6410108.5 i/s - 7.01x slower
String#[0...n] ==: 5473634.7 i/s - 8.20x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#start_with? 412.828k i/100ms
String#[0, n] == 178.223k i/100ms
String#[RANGE] == 175.756k i/100ms
String#[0...n] == 103.420k i/100ms
Calculating -------------------------------------
String#start_with? 6.135M (± 4.2%) i/s (162.99 ns/i) - 30.962M in 5.058094s
String#[0, n] == 2.503M (± 3.3%) i/s (399.55 ns/i) - 12.654M in 5.062817s
String#[RANGE] == 2.373M (± 0.8%) i/s (421.35 ns/i) - 11.951M in 5.036016s
String#[0...n] == 1.289M (± 2.8%) i/s (775.87 ns/i) - 6.515M in 5.060052s
Comparison:
String#start_with?: 6135332.4 i/s
String#[0, n] ==: 2502795.5 i/s - 2.45x slower
String#[RANGE] ==: 2373343.2 i/s - 2.59x slower
String#[0...n] ==: 1288878.7 i/s - 4.76x slower
64/68: code/string/sub!-vs-gsub!-vs-[]=.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#['string']= 978.219k i/100ms
String#sub!'string' 825.556k i/100ms
String#gsub!'string' 409.814k i/100ms
String#[/regexp/]= 706.908k i/100ms
String#sub!/regexp/ 698.270k i/100ms
String#gsub!/regexp/ 316.483k i/100ms
Calculating -------------------------------------
String#['string']= 20.389M (±26.5%) i/s (49.04 ns/i) - 90.974M in 5.017455s
String#sub!'string' 14.031M (±20.6%) i/s (71.27 ns/i) - 66.044M in 5.007605s
String#gsub!'string' 4.918M (±11.0%) i/s (203.33 ns/i) - 24.589M in 5.068347s
String#[/regexp/]= 10.716M (±18.7%) i/s (93.32 ns/i) - 51.604M in 5.047702s
String#sub!/regexp/ 10.334M (±18.5%) i/s (96.77 ns/i) - 49.577M in 5.023231s
String#gsub!/regexp/ 3.792M (± 9.9%) i/s (263.70 ns/i) - 18.989M in 5.062233s
Comparison:
String#['string']=: 20389444.7 i/s
String#sub!'string': 14030755.2 i/s - same-ish: difference falls within error
String#[/regexp/]=: 10716105.7 i/s - 1.90x slower
String#sub!/regexp/: 10333695.1 i/s - 1.97x slower
String#gsub!'string': 4918061.4 i/s - 4.15x slower
String#gsub!/regexp/: 3792207.7 i/s - 5.38x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#['string']= 949.644k i/100ms
String#sub!'string' 465.478k i/100ms
String#gsub!'string' 211.016k i/100ms
String#[/regexp/]= 501.462k i/100ms
String#sub!/regexp/ 465.248k i/100ms
String#gsub!/regexp/ 211.103k i/100ms
Calculating -------------------------------------
String#['string']= 9.810M (± 2.9%) i/s (101.93 ns/i) - 49.381M in 5.038304s
String#sub!'string' 5.011M (± 0.3%) i/s (199.56 ns/i) - 25.136M in 5.016158s
String#gsub!'string' 2.192M (± 1.5%) i/s (456.22 ns/i) - 10.973M in 5.007300s
String#[/regexp/]= 5.750M (± 0.9%) i/s (173.91 ns/i) - 29.085M in 5.058612s
String#sub!/regexp/ 5.091M (± 0.5%) i/s (196.43 ns/i) - 25.589M in 5.026413s
String#gsub!/regexp/ 2.196M (± 2.5%) i/s (455.45 ns/i) - 10.977M in 5.002916s
Comparison:
String#['string']=: 9810468.8 i/s
String#[/regexp/]=: 5750041.9 i/s - 1.71x slower
String#sub!/regexp/: 5090966.8 i/s - 1.93x slower
String#sub!'string': 5011025.5 i/s - 1.96x slower
String#gsub!/regexp/: 2195635.0 i/s - 4.47x slower
String#gsub!'string': 2191922.3 i/s - 4.48x slower
65/68: code/string/sub-vs-chomp-vs-delete_suffix.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#sub 773.807k i/100ms
String#chomp 1.280M i/100ms
String#delete_suffix 1.330M i/100ms
Calculating -------------------------------------
String#sub 12.479M (±30.5%) i/s (80.13 ns/i) - 53.393M in 5.040388s
String#chomp 47.295M (±37.3%) i/s (21.14 ns/i) - 130.593M in 5.013434s
String#delete_suffix 49.488M (±43.2%) i/s (20.21 ns/i) - 111.754M in 5.015847s
Comparison:
String#delete_suffix: 49487983.3 i/s
String#chomp: 47295094.2 i/s - same-ish: difference falls within error
String#sub: 12479290.8 i/s - 3.97x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#sub 468.456k i/100ms
String#chomp 1.370M i/100ms
String#delete_suffix 1.520M i/100ms
Calculating -------------------------------------
String#sub 5.127M (± 1.1%) i/s (195.06 ns/i) - 25.765M in 5.026384s
String#chomp 14.887M (± 0.7%) i/s (67.17 ns/i) - 75.331M in 5.060301s
String#delete_suffix 16.626M (± 1.1%) i/s (60.15 ns/i) - 83.575M in 5.027488s
Comparison:
String#delete_suffix: 16625695.1 i/s
String#chomp: 14887345.9 i/s - 1.12x slower
String#sub: 5126570.7 i/s - 3.24x slower
66/68: code/string/sub-vs-delete_prefix.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#delete_prefix 1.433M i/100ms
String#sub 823.170k i/100ms
Calculating -------------------------------------
String#delete_prefix 58.463M (±25.7%) i/s (17.10 ns/i) - 236.372M in 5.003109s
String#sub 13.310M (±19.5%) i/s (75.13 ns/i) - 63.384M in 5.024238s
Comparison:
String#delete_prefix: 58462809.9 i/s
String#sub: 13309992.0 i/s - 4.39x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#delete_prefix 1.471M i/100ms
String#sub 469.415k i/100ms
Calculating -------------------------------------
String#delete_prefix 17.347M (± 1.6%) i/s (57.65 ns/i) - 86.813M in 5.005879s
String#sub 5.090M (± 3.4%) i/s (196.48 ns/i) - 25.818M in 5.079685s
Comparison:
String#delete_prefix: 17346914.2 i/s
String#sub: 5089702.1 i/s - 3.41x slower
67/68: code/string/unpack1-vs-unpack[0].rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
String#unpack1 774.573k i/100ms
String#unpack[0] 1.056M i/100ms
Calculating -------------------------------------
String#unpack1 32.345M (±21.5%) i/s (30.92 ns/i) - 145.620M in 5.007055s
String#unpack[0] 19.996M (±49.1%) i/s (50.01 ns/i) - 57.032M in 5.011756s
Comparison:
String#unpack1: 32344960.3 i/s
String#unpack[0]: 19995876.0 i/s - same-ish: difference falls within error
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
String#unpack1 1.615M i/100ms
String#unpack[0] 1.199M i/100ms
Calculating -------------------------------------
String#unpack1 17.866M (± 0.6%) i/s (55.97 ns/i) - 90.443M in 5.062389s
String#unpack[0] 12.910M (± 0.7%) i/s (77.46 ns/i) - 64.764M in 5.016781s
Comparison:
String#unpack1: 17866341.0 i/s
String#unpack[0]: 12910066.3 i/s - 1.38x slower
68/68: code/time/iso8601-vs-parse.rb
jruby 10.0.3.0-SNAPSHOT (3.4.5) 2025-11-04 d74cb7a2e0 OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [arm64-darwin]
Warming up --------------------------------------
Time.iso8601 104.873k i/100ms
Time.parse 12.453k i/100ms
Calculating -------------------------------------
Time.iso8601 1.118M (± 6.6%) i/s (894.22 ns/i) - 5.558M in 4.999462s
Time.parse 149.746k (± 1.5%) i/s (6.68 μs/i) - 759.633k in 5.074042s
Comparison:
Time.iso8601: 1118288.2 i/s
Time.parse: 149746.1 i/s - 7.47x slower
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
Time.iso8601 102.071k i/100ms
Time.parse 27.151k i/100ms
Calculating -------------------------------------
Time.iso8601 1.037M (± 0.5%) i/s (964.44 ns/i) - 5.206M in 5.020641s
Time.parse 274.431k (± 0.7%) i/s (3.64 μs/i) - 1.385M in 5.045995s
Comparison:
Time.iso8601: 1036872.0 i/s
Time.parse: 274431.3 i/s - 3.78x slower
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment