[ruby-core:123614] [Ruby Bug#21654] Set#new calls extra methods compared to previous versions
From:
"ufuk (Ufuk Kayserilioglu) via ruby-core" <ruby-core@...>
Date:
2025-10-30 14:52:28 UTC
List:
ruby-core #123614
Issue #21654 has been updated by ufuk (Ufuk Kayserilioglu).
IMO, ranges should behave the same when `end == Float::INFINITY` and when `end == nil`. They are both practically endless ranges, but nothing normalizes them so that they always behave the same. Maybe `(1..1/0.0)` should be internally treated the same as `(1..)` and have `end == nil`?
Regardless, I think that is a problem for the `Range` class to solve, so that other classes don't have to check for `nil` and infinity and whatever else separately.
----------------------------------------
Bug #21654: Set#new calls extra methods compared to previous versions
https://bugs.ruby-lang.org/issues/21654#change-115000
* 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/