summaryrefslogtreecommitdiff
path: root/include/ruby
diff options
context:
space:
mode:
authoreileencodes <eileencodes@gmail.com>2025-11-18 11:56:09 -0500
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2025-11-19 07:47:19 +0900
commit6f6a9ead961feb5c2d794bf9d1594c9e8e1de6ab (patch)
tree27416b1aa45d9abeca67ba1539308bff7d03fb03 /include/ruby
parentd5d12efde75515997d046448aa36eb9ed893517b (diff)
[ruby/rubygems] Replace instance method look up in plugin installer
`Gem::Installer.instance_methods(false).include?(:generate_plugins)` is 63x slower than `Gem::Installer.method_defined?(:generate_plugins)` in a microbenchmark. The latter is a direct lookup, whereas the former will create an array, which will be slower. ```ruby require "benchmark/ips" Benchmark.ips do |x| x.report "instance_methods" do Gem::Installer.instance_methods(false).include?(:generate_plugins) end x.report "method_defined" do Gem::Installer.method_defined?(:generate_plugins) end x.compare! end ``` ``` $ ruby -I lib/ benchmark_methods.rb ruby 3.4.4 (2025-05-14 revision https://github.com/ruby/rubygems/commit/a38531fd3f) +PRISM [arm64-darwin23] Warming up -------------------------------------- instance_methods 58.449k i/100ms method_defined 3.375M i/100ms Calculating ------------------------------------- instance_methods 541.874k (± 5.7%) i/s (1.85 μs/i) - 2.747M in 5.087825s method_defined 34.263M (± 1.1%) i/s (29.19 ns/i) - 172.135M in 5.024524s Comparison: method_defined: 34263189.1 i/s instance_methods: 541874.3 i/s - 63.23x slower ``` This does not make much difference in an overall benchmark or profile, but this is more idiomatic Ruby than the prior code. https://github.com/ruby/rubygems/commit/49dec52cb2
Diffstat (limited to 'include/ruby')
0 files changed, 0 insertions, 0 deletions