[ruby-core:122681] [Ruby Bug#21396] Set#initialize should call Set#add on items passed in
From:
"knu (Akinori MUSHA) via ruby-core" <ruby-core@...>
Date:
2025-07-08 14:57:37 UTC
List:
ruby-core #122681
Issue #21396 has been updated by knu (Akinori MUSHA).
Considering the feedback we've received about compatibility in the new experimental Set implementation, it may be in our best interest to revert to the pure-Ruby version.
If improving performance and reducing memory footprint remain crucial, one option would be to keep only the underlying data structure and a few core methods from set.c, while leaving the rest written in pure Ruby.
I also considered introducing a separate base class (RbSet, Set::Ruby, Set::Base, or whatever) for compatibility, but that approach feels neither elegant nor the Ruby way, and it risks becoming permanent technical debt. Since 3.5 hasn't been finalized yet, I'm leaning toward making Set itself subclass-friendly again.
----------------------------------------
Bug #21396: Set#initialize should call Set#add on items passed in
https://bugs.ruby-lang.org/issues/21396#change-113961
* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
```ruby
class Foo < Set
def add(item) = super(item.bytesize)
end
x = Foo.new(["foo"])
p x
p x.include?(3)
```
On Ruby 3.4 the output is this:
```
> ruby -v test.rb
ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [arm64-darwin24]
#<Foo: {3}>
true
```
On Ruby master the output is this:
```
> make run
./miniruby -I./lib -I. -I.ext/common -r./arm64-darwin24-fake ./test.rb
#<Set: {"foo"}>
false
```
The bug is that `initialize` is not calling `add` for the elements passed in, so the subclass doesn't get a chance to change them.
I've sent a PR here: https://github.com/ruby/ruby/pull/13518
--
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/