* [ruby-core:122338] [Ruby Bug#21384] const_added is triggered twice when using autoload
@ 2025-05-29 23:02 petekinnecom (Pete Kinnecom) via ruby-core
2025-05-30 15:30 ` [ruby-core:122341] " fxn (Xavier Noria) via ruby-core
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: petekinnecom (Pete Kinnecom) via ruby-core @ 2025-05-29 23:02 UTC (permalink / raw)
To: ruby-core; +Cc: petekinnecom (Pete Kinnecom)
Issue #21384 has been reported by petekinnecom (Pete Kinnecom).
----------------------------------------
Bug #21384: const_added is triggered twice when using autoload
https://bugs.ruby-lang.org/issues/21384
* Author: petekinnecom (Pete Kinnecom)
* Status: Open
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
As the title says, I've noticed that `const_added` is invoked twice when using `autoload`. I'm wondering if this behavior is intended or perhaps a bug. Here's a small script to reproduce what I'm seeing:
``` ruby
require "tmpdir"
dir = Dir.mktmpdir
File.write(
File.join(dir, "const.rb"),
"class Const; end"
)
def Object.const_added(const_name)
super.tap { puts "const_added: #{const_name}" }
end
$LOAD_PATH << dir
puts "before autoload call"
autoload :Const, "const"
puts "after autoload call"
puts Const
# Produces output:
#
# => before autoload call
# => const_added: Const
# => after autoload call
# => const_added: Const
# => Const
```
I'm seeing the behavior using the following docker containers ruby:3.2 and ruby:3.5-rc when running like so: `docker run -v ./:/home ruby:3.5-rc ruby /home/script.rb`. Thanks.
--
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/
^ permalink raw reply [flat|nested] 5+ messages in thread
* [ruby-core:122341] [Ruby Bug#21384] const_added is triggered twice when using autoload
2025-05-29 23:02 [ruby-core:122338] [Ruby Bug#21384] const_added is triggered twice when using autoload petekinnecom (Pete Kinnecom) via ruby-core
@ 2025-05-30 15:30 ` fxn (Xavier Noria) via ruby-core
2025-05-30 15:32 ` [ruby-core:122342] " fxn (Xavier Noria) via ruby-core
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: fxn (Xavier Noria) via ruby-core @ 2025-05-30 15:30 UTC (permalink / raw)
To: ruby-core; +Cc: fxn (Xavier Noria)
Issue #21384 has been updated by fxn (Xavier Noria).
It is intended.
Reason is, `constants` includes the constant after a call to `autoload`.
----------------------------------------
Bug #21384: const_added is triggered twice when using autoload
https://bugs.ruby-lang.org/issues/21384#change-113488
* Author: petekinnecom (Pete Kinnecom)
* Status: Open
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
As the title says, I've noticed that `const_added` is invoked twice when using `autoload`. I'm wondering if this behavior is intended or perhaps a bug. Here's a small script to reproduce what I'm seeing:
``` ruby
require "tmpdir"
dir = Dir.mktmpdir
File.write(
File.join(dir, "const.rb"),
"class Const; end"
)
def Object.const_added(const_name)
super.tap { puts "const_added: #{const_name}" }
end
$LOAD_PATH << dir
puts "before autoload call"
autoload :Const, "const"
puts "after autoload call"
puts Const
# Produces output:
#
# => before autoload call
# => const_added: Const
# => after autoload call
# => const_added: Const
# => Const
```
I'm seeing the behavior using the following docker containers ruby:3.2 and ruby:3.5-rc when running like so: `docker run -v ./:/home ruby:3.5-rc ruby /home/script.rb`. Thanks.
--
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/
^ permalink raw reply [flat|nested] 5+ messages in thread
* [ruby-core:122342] [Ruby Bug#21384] const_added is triggered twice when using autoload
2025-05-29 23:02 [ruby-core:122338] [Ruby Bug#21384] const_added is triggered twice when using autoload petekinnecom (Pete Kinnecom) via ruby-core
2025-05-30 15:30 ` [ruby-core:122341] " fxn (Xavier Noria) via ruby-core
@ 2025-05-30 15:32 ` fxn (Xavier Noria) via ruby-core
2025-05-30 23:56 ` [ruby-core:122348] " petekinnecom (Pete Kinnecom) via ruby-core
2025-06-05 11:00 ` [ruby-core:122451] " mame (Yusuke Endoh) via ruby-core
3 siblings, 0 replies; 5+ messages in thread
From: fxn (Xavier Noria) via ruby-core @ 2025-05-30 15:32 UTC (permalink / raw)
To: ruby-core; +Cc: fxn (Xavier Noria)
Issue #21384 has been updated by fxn (Xavier Noria).
Let me add that I'd prefer that Ruby does not consider autoloads as constants in the API, I'd like autoloads to become constants if realized (autoloading can err, and even if succeeds, the owner may not be the receiver of the `autoload` call).
But that is the way it works.
----------------------------------------
Bug #21384: const_added is triggered twice when using autoload
https://bugs.ruby-lang.org/issues/21384#change-113489
* Author: petekinnecom (Pete Kinnecom)
* Status: Open
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
As the title says, I've noticed that `const_added` is invoked twice when using `autoload`. I'm wondering if this behavior is intended or perhaps a bug. Here's a small script to reproduce what I'm seeing:
``` ruby
require "tmpdir"
dir = Dir.mktmpdir
File.write(
File.join(dir, "const.rb"),
"class Const; end"
)
def Object.const_added(const_name)
super.tap { puts "const_added: #{const_name}" }
end
$LOAD_PATH << dir
puts "before autoload call"
autoload :Const, "const"
puts "after autoload call"
puts Const
# Produces output:
#
# => before autoload call
# => const_added: Const
# => after autoload call
# => const_added: Const
# => Const
```
I'm seeing the behavior using the following docker containers ruby:3.2 and ruby:3.5-rc when running like so: `docker run -v ./:/home ruby:3.5-rc ruby /home/script.rb`. Thanks.
--
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/
^ permalink raw reply [flat|nested] 5+ messages in thread
* [ruby-core:122348] [Ruby Bug#21384] const_added is triggered twice when using autoload
2025-05-29 23:02 [ruby-core:122338] [Ruby Bug#21384] const_added is triggered twice when using autoload petekinnecom (Pete Kinnecom) via ruby-core
2025-05-30 15:30 ` [ruby-core:122341] " fxn (Xavier Noria) via ruby-core
2025-05-30 15:32 ` [ruby-core:122342] " fxn (Xavier Noria) via ruby-core
@ 2025-05-30 23:56 ` petekinnecom (Pete Kinnecom) via ruby-core
2025-06-05 11:00 ` [ruby-core:122451] " mame (Yusuke Endoh) via ruby-core
3 siblings, 0 replies; 5+ messages in thread
From: petekinnecom (Pete Kinnecom) via ruby-core @ 2025-05-30 23:56 UTC (permalink / raw)
To: ruby-core; +Cc: petekinnecom (Pete Kinnecom)
Issue #21384 has been updated by petekinnecom (Pete Kinnecom).
I see, thank you for the clarification!
----------------------------------------
Bug #21384: const_added is triggered twice when using autoload
https://bugs.ruby-lang.org/issues/21384#change-113494
* Author: petekinnecom (Pete Kinnecom)
* Status: Open
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
As the title says, I've noticed that `const_added` is invoked twice when using `autoload`. I'm wondering if this behavior is intended or perhaps a bug. Here's a small script to reproduce what I'm seeing:
``` ruby
require "tmpdir"
dir = Dir.mktmpdir
File.write(
File.join(dir, "const.rb"),
"class Const; end"
)
def Object.const_added(const_name)
super.tap { puts "const_added: #{const_name}" }
end
$LOAD_PATH << dir
puts "before autoload call"
autoload :Const, "const"
puts "after autoload call"
puts Const
# Produces output:
#
# => before autoload call
# => const_added: Const
# => after autoload call
# => const_added: Const
# => Const
```
I'm seeing the behavior using the following docker containers ruby:3.2 and ruby:3.5-rc when running like so: `docker run -v ./:/home ruby:3.5-rc ruby /home/script.rb`. Thanks.
--
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/
^ permalink raw reply [flat|nested] 5+ messages in thread
* [ruby-core:122451] [Ruby Bug#21384] const_added is triggered twice when using autoload
2025-05-29 23:02 [ruby-core:122338] [Ruby Bug#21384] const_added is triggered twice when using autoload petekinnecom (Pete Kinnecom) via ruby-core
` (2 preceding siblings ...)
2025-05-30 23:56 ` [ruby-core:122348] " petekinnecom (Pete Kinnecom) via ruby-core
@ 2025-06-05 11:00 ` mame (Yusuke Endoh) via ruby-core
3 siblings, 0 replies; 5+ messages in thread
From: mame (Yusuke Endoh) via ruby-core @ 2025-06-05 11:00 UTC (permalink / raw)
To: ruby-core; +Cc: mame (Yusuke Endoh)
Issue #21384 has been updated by mame (Yusuke Endoh).
Briefly discussed at the dev meeting. @matz said that it was not intentional to fire the hook twice. But changing it now would be a compatibility concern, so he decided to keep the current behavior.
Conceptually, we may consider this behavior as:
* When `autoload` is set, the constant is (virtually) defined (and `const_added` fires)
* When the constant is actually defined by the firing of autoload, the constant is conceptually deleted once and defined again (and `const_added` fires again)
----------------------------------------
Bug #21384: const_added is triggered twice when using autoload
https://bugs.ruby-lang.org/issues/21384#change-113632
* Author: petekinnecom (Pete Kinnecom)
* Status: Closed
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
As the title says, I've noticed that `const_added` is invoked twice when using `autoload`. I'm wondering if this behavior is intended or perhaps a bug. Here's a small script to reproduce what I'm seeing:
``` ruby
require "tmpdir"
dir = Dir.mktmpdir
File.write(
File.join(dir, "const.rb"),
"class Const; end"
)
def Object.const_added(const_name)
super.tap { puts "const_added: #{const_name}" }
end
$LOAD_PATH << dir
puts "before autoload call"
autoload :Const, "const"
puts "after autoload call"
puts Const
# Produces output:
#
# => before autoload call
# => const_added: Const
# => after autoload call
# => const_added: Const
# => Const
```
I'm seeing the behavior using the following docker containers ruby:3.2 and ruby:3.5-rc when running like so: `docker run -v ./:/home ruby:3.5-rc ruby /home/script.rb`. Thanks.
--
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/
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-06-05 11:01 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-29 23:02 [ruby-core:122338] [Ruby Bug#21384] const_added is triggered twice when using autoload petekinnecom (Pete Kinnecom) via ruby-core
2025-05-30 15:30 ` [ruby-core:122341] " fxn (Xavier Noria) via ruby-core
2025-05-30 15:32 ` [ruby-core:122342] " fxn (Xavier Noria) via ruby-core
2025-05-30 23:56 ` [ruby-core:122348] " petekinnecom (Pete Kinnecom) via ruby-core
2025-06-05 11:00 ` [ruby-core:122451] " mame (Yusuke Endoh) via ruby-core
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).