[#117021] [Ruby master Feature#20318] Pattern matching `case ... in` support for triple-dot arguments — "bradgessler (Brad Gessler) via ruby-core" <ruby-core@...>

Issue #20318 has been reported by bradgessler (Brad Gessler).

11 messages 2024/03/01

[#117027] [Ruby master Bug#20319] Singleton class is being frozen lazily in some cases — "andrykonchin (Andrew Konchin) via ruby-core" <ruby-core@...>

Issue #20319 has been reported by andrykonchin (Andrew Konchin).

8 messages 2024/03/01

[#117036] [Ruby master Bug#20321] `require': cannot load such file — "Justman10000 (Justin Nogossek) via ruby-core" <ruby-core@...>

Issue #20321 has been reported by Justman10000 (Justin Nogossek).

14 messages 2024/03/01

[#117067] [Ruby master Feature#20326] Add an `undefined` for use as a default argument. — "shan (Shannon Skipper) via ruby-core" <ruby-core@...>

Issue #20326 has been reported by shan (Shannon Skipper).

7 messages 2024/03/06

[#117115] [Ruby master Feature#20331] Should parser warn hash duplication and when clause? — "yui-knk (Kaneko Yuichiro) via ruby-core" <ruby-core@...>

Issue #20331 has been reported by yui-knk (Kaneko Yuichiro).

11 messages 2024/03/12

[#117147] [Ruby master Feature#20335] `Thread.each_caller_location` should accept the same arguments as `caller` and `caller_locations` — "byroot (Jean Boussier) via ruby-core" <ruby-core@...>

Issue #20335 has been reported by byroot (Jean Boussier).

13 messages 2024/03/14

[#117157] [Ruby master Misc#20336] DevMeeting-2024-04-17 — "mame (Yusuke Endoh) via ruby-core" <ruby-core@...>

Issue #20336 has been reported by mame (Yusuke Endoh).

15 messages 2024/03/14

[#117212] [Ruby master Feature#20345] Add `--target-rbconfig` option to mkmf — "katei (Yuta Saito) via ruby-core" <ruby-core@...>

Issue #20345 has been reported by katei (Yuta Saito).

9 messages 2024/03/18

[#117240] [Ruby master Feature#20350] Return chilled string from Symbol#to_s — "Dan0042 (Daniel DeLorme) via ruby-core" <ruby-core@...>

Issue #20350 has been reported by Dan0042 (Daniel DeLorme).

10 messages 2024/03/19

[#117288] [Ruby master Misc#20387] Meta-ticket for ASAN support — "kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>

Issue #20387 has been reported by kjtsanaktsidis (KJ Tsanaktsidis).

10 messages 2024/03/22

[#117321] [Ruby master Bug#20393] `after_fork_ruby` clears all pending interrupts for both parent and child process. — "ioquatix (Samuel Williams) via ruby-core" <ruby-core@...>

Issue #20393 has been reported by ioquatix (Samuel Williams).

6 messages 2024/03/26

[#117324] [Ruby master Feature#20394] Add an offset parameter to `String#to_i` — "byroot (Jean Boussier) via ruby-core" <ruby-core@...>

Issue #20394 has been reported by byroot (Jean Boussier).

16 messages 2024/03/26

[#117341] [Ruby master Feature#20396] ObjectSpace.dump_all(string_value: false): skip dumping the String contents — "byroot (Jean Boussier) via ruby-core" <ruby-core@...>

Issue #20396 has been reported by byroot (Jean Boussier).

8 messages 2024/03/27

[#117390] [Ruby master Feature#20404] `2pi` — "mame (Yusuke Endoh) via ruby-core" <ruby-core@...>

Issue #20404 has been reported by mame (Yusuke Endoh).

9 messages 2024/03/31

[ruby-core:117078] [Ruby master Bug#20325] Enumerator.product.size bug with zero * infinite enumerators

From: "shan (Shannon Skipper) via ruby-core" <ruby-core@...>
Date: 2024-03-07 17:39:12 UTC
List: ruby-core #117078
Issue #20325 has been updated by shan (Shannon Skipper).


I agree the behavior aligns with the documentation and tests. On the other hand, there seem to be two scenarios where the lazily calculated size of infinity doesn't line up with the determinable product count.

One, referenced above, is when there's both an infinite size and a `0` so we know the product will be `0` but infinity is returned. Another is when an infinite size precedes a `nil` so the product isn't actually lazily determinable but it returns infinity rather than `nil`.

``` ruby
##
# Product count will be zero.
enums_zero = [[], 1..]

##
# Product count is unknown.
enums_nil = [1.., Enumerator.new {}]
```

Considering the current `enum_product_total_size(VALUE enums)` roughly translated to Ruby:

``` ruby
def enum_product_total_size(enums)
  enums.reduce(1) do |total, enum|
    size = enum.size

    return size if size.nil? || size.infinite?
    return nil unless size.is_a?(Integer)

    total * size
  end
end

enum_product_total_size(enums_zero)
#=> Float::INFINITY

p enum_product_total_size(enums_nil)
#=> Float::INFINITY
```

It feels like we should short circuit and return `nil` if any size is `nil` and return `0` rather than `Float::INFINITY` when both are present. One option would be to first check for any `nil` then add a check for any `0` before proceeding with infinity and integer checks and multiplication.

``` ruby
def enum_product_total_size(enums)
  sizes = enums.map(&:size)

  return nil if sizes.include?(nil)
  return 0 if sizes.include?(0)
  return Float::INFINITY if sizes.include?(Float::INFINITY)
  return nil unless sizes.all?(Integer)

  sizes.reduce(1, :*)
end

enum_product_total_size(enums_zero)
#=> 0

p enum_product_total_size(enums_nil)
#=> nil
```

It seems to me the documented lazy sizes are wrong in these two cases. Would fixing these lazily calculated sizes to align with the actual product count be worth doing? It seems like a nice things to do to me, unless there are concerns that it's a breaking change since folk are relying on a dubious lazy `Float::INFINITY` size that doesn't match the count.

----------------------------------------
Bug #20325: Enumerator.product.size bug with zero * infinite enumerators
https://bugs.ruby-lang.org/issues/20325#change-107152

* Author: marcandre (Marc-Andre Lafortune)
* Status: Open
* Target version: 3.4
* ruby -v: ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin22]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
``` ruby
Enumerator.product([], 1..).to_a # => [] (OK)
Enumerator.product([], 1..).size # => Infinity (Should be 0)
```




-- 
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/postorius/lists/ruby-core.ml.ruby-lang.org/

In This Thread