[#102393] [Ruby master Feature#17608] Compact and sum in one step — sawadatsuyoshi@...

Issue #17608 has been reported by sawa (Tsuyoshi Sawada).

13 messages 2021/02/04

[#102438] [Ruby master Bug#17619] if false foo=42; end creates a foo local variable set to nil — pkmuldoon@...

Issue #17619 has been reported by pkmuldoon (Phil Muldoon).

10 messages 2021/02/10

[#102631] [Ruby master Feature#17660] Expose information about which basic methods have been redefined — tenderlove@...

Issue #17660 has been reported by tenderlovemaking (Aaron Patterson).

9 messages 2021/02/27

[#102639] [Ruby master Misc#17662] The herdoc pattern used in tests does not syntax highlight correctly in many editors — eregontp@...

Issue #17662 has been reported by Eregon (Benoit Daloze).

13 messages 2021/02/27

[#102652] [Ruby master Bug#17664] Behavior of sockets changed in Ruby 3.0 to non-blocking — ciconia@...

Issue #17664 has been reported by ciconia (Sharon Rosner).

23 messages 2021/02/28

[ruby-core:102559] [Ruby master Misc#17637] Endless ranges with `nil` boundary weird behavior

From: zverok.offline@...
Date: 2021-02-17 11:10:51 UTC
List: ruby-core #102559
Issue #17637 has been updated by zverok (Victor Shepelev).


I believe that using `nil` as a signifier of the "open end" is a compromise due to Ruby's ranges polymorphism. You can have range from a string, from time, from date, from any custom comparable class, how you'd signify the "open end" in this case? In some statically typed language it probably could've been some `Infinity<Type>`, but in Ruby... IDK, maybe the alternative would be some "generic" `Infinity` constant/special value (as incompatible with any type as `nil` is, but having different semantics), but it would be too large a change.

----------------------------------------
Misc #17637: Endless ranges with `nil` boundary weird behavior
https://bugs.ruby-lang.org/issues/17637#change-90462

* Author: gud (gud gud)
* Status: Open
* Priority: Normal
----------------------------------------

Basically it's about this https://andycroll.com/ruby/watch-out-for-nils-in-ranges/

Since Ruby 2.6 we have this weird syntax (0..nil) which is really really bug prone

e.g. we have dynamic upper boundary like

```
lower = 0
upper = some_method(arg1, arg2)

(lower..upper).each do { |s| some_method2(s) }
```

We rarely do `nil` checks in Ruby so it's really easy to have Infinity loop in the end.
Previous Argument error was more intuitive since it throws exception instead of silently looping forever.

+ some additional strange behavior:

```
(0..nil).count
=> Infinity

(0..Float::INFINITY).count
=> hangs, I guess same infinity loop
```

Having explicit parameter `Float::INFINITY` (as in previous versions) looks more like a proper design instead of allowing `nil` as a valid parameter.

You may think of it as **I would like to have a range from 0 to nothing, what is it actually ?**
And I guess the answer is **Nothing**.
Fixing `(0..Float::INFINITY).count` this case it also important I believe.

Tested on `ruby 2.7.1p83`



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread