From: "knu (Akinori MUSHA) via ruby-core" Date: 2025-07-08T14:57:37+00:00 Subject: [ruby-core:122681] [Ruby Bug#21396] Set#initialize should call Set#add on items passed in 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] # true ``` On Ruby master the output is this: ``` > make run ./miniruby -I./lib -I. -I.ext/common -r./arm64-darwin24-fake ./test.rb # 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/