[ruby-core:121267] [Ruby master Bug#21032] `Module#autoload?` is slow when `$LOAD_PATH` contains a relative path
From:
"nagachika (Tomoyuki Chikanaga) via ruby-core" <ruby-core@...>
Date:
2025-03-08 08:40:47 UTC
List:
ruby-core #121267
Issue #21032 has been updated by nagachika (Tomoyuki Chikanaga).
Backport changed from 3.1: WONTFIX, 3.2: REQUIRED, 3.3: REQUIRED, 3.4: DONE to 3.1: WONTFIX, 3.2: REQUIRED, 3.3: DONE, 3.4: DONE
ruby_3_3 commit:54dd27d89d2e6814114f1aff18836a987d5a4ab1 merged revision(s) commit:d4a1a2780c39bc648496ac92fc6e6ce2eb38ab47.
----------------------------------------
Bug #21032: `Module#autoload?` is slow when `$LOAD_PATH` contains a relative path
https://bugs.ruby-lang.org/issues/21032#change-112223
* Author: byroot (Jean Boussier)
* Status: Closed
* Backport: 3.1: WONTFIX, 3.2: REQUIRED, 3.3: DONE, 3.4: DONE
----------------------------------------
Reproduction script:
```ruby
require 'benchmark'
$LOAD_PATH << 'relative-path'
autoload :FOO, '/tmp/foo.rb'
puts Benchmark.realtime {
500_000.times do
Object.autoload?(:FOO)
end
}
```
The above takes 2.5 to 3 seconds on my machine, but just removing `$LOAD_PATH << 'relative-path'` make it complete in 50ms.
It's such a stark difference that I think it is a bug, and it cause Zeitwerk, a very popular gem, to be way slower than it should
when the load path contains relative paths.
I have a patch for it, that passes all tests, but I'd appreciate some eyes on it: https://github.com/ruby/ruby/pull/12562
cc @fxn
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/