From: "tenderlovemaking (Aaron Patterson) via ruby-core" Date: 2025-10-31T19:05:13+00:00 Subject: [ruby-core:123624] [Ruby Bug#21654] Set#new calls extra methods compared to previous versions Issue #21654 has been updated by tenderlovemaking (Aaron Patterson). mame (Yusuke Endoh) wrote in #note-13: > I understand your point, but I personally disagree. > > My concern is that the expectation to "if it's at all possible to raise early" is a slippery slope with no clear boundary. > > For example, an operation like `(1..1<<100).to_a` will also effectively hang (or crash with an OOM) on any modern computer. This seems to fit the "unrestrained memory allocation" case you mentioned. Should we also preemptively raise an exception for this? If we do, what should the threshold be? ���� > That said, I recall @matz expressing a similar concern to yours. I would like to hear his opinion on this matter. I'll add this to the dev meeting. I think we should just revert d4020dd5faf28486123853e7f00c36139fc07793 ---------------------------------------- Bug #21654: Set#new calls extra methods compared to previous versions https://bugs.ruby-lang.org/issues/21654#change-115011 * Author: tenderlovemaking (Aaron Patterson) * Status: Open * ruby -v: ruby 3.5.0dev (2025-10-24T15:50:47Z master a9f24aaccb) +PRISM [arm64-darwin25] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- I'm trying to test Ruby 3.5.0 with our Rails application and we've found that `Set.new` is now causing extra database queries to happen. The changes in d4020dd5faf call "size" on enumerable objects that are passed to the `new` method, and this causes extra "COUNT" queries to happen with ActiveRecord associations. For example: ```ruby Set.new(some_activerecord_association) ``` Previously, the above code would only do one query by iterating over the association. Now it issues two queries, a count query, and then the normal query for results. Since d4020dd5faf is dealing with endless ranges, I would like to narrow the scope from all Enumerable objects to just Ranges. Unfortunately, I noticed we have a test like this: ```ruby assert_raise(ArgumentError) { Set.new(1.upto(Float::INFINITY)) } ``` I'm not sure how we can handle such a case without testing `size`. -- 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/