ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:50568] [Ruby trunk Bug#14845] Endless Range with nil
       [not found] <redmine.issue-14845.20180613075321@ruby-lang.org>
@ 2018-06-13  7:53 ` igaiga
  2018-06-13  8:06 ` [ruby-dev:50569] " mame
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 7+ messages in thread
From: igaiga @ 2018-06-13  7:53 UTC (permalink / raw)
  To: ruby-dev

Issue #14845 has been reported by igaiga (Kuniaki IGARASHI).

----------------------------------------
Bug #14845: Endless Range with nil
https://bugs.ruby-lang.org/issues/14845

* Author: igaiga (Kuniaki IGARASHI)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.6.0preview2
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
endless Rangeで次のケースで困ることがあります。

- 1..nilはendless Rangeになる
- endless Rangeはto_aすると返ってこなくなる
- 1..変数 のケースで意図せずendless Rangeになる可能性があり、そのときto_aすると返ってこなくなる

Ruby 2.5.1 では 1..nil はArgumentError (bad value for range) になります。

たとえば、 1..nil がendless Rangeではなくエラーになればこの問題は解決します。

### Info
- An endless range `(1..)` : https://bugs.ruby-lang.org/issues/12912
- twitter での話 : https://twitter.com/igaiga555/status/1006715631796813824



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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50569] [Ruby trunk Bug#14845] Endless Range with nil
       [not found] <redmine.issue-14845.20180613075321@ruby-lang.org>
  2018-06-13  7:53 ` [ruby-dev:50568] [Ruby trunk Bug#14845] Endless Range with nil igaiga
@ 2018-06-13  8:06 ` mame
  2018-06-13  9:06 ` [ruby-dev:50570] [Ruby trunk Bug#14845][Assigned] " mame
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 7+ messages in thread
From: mame @ 2018-06-13  8:06 UTC (permalink / raw)
  To: ruby-dev

Issue #14845 has been updated by mame (Yusuke Endoh).


現状の挙動はそれはそれで便利そう※なので、early failure と便利さとのトレードオフです。どっちがいいでしょうね。

※たとえば SQL の DSL で `count: (min..max)` という Range を書いたとき、`max = nil` にするだけで「上限なし」を表現できるという使い方が考えられます。`(1..nil)` がエラーになると、`count: max ? (min..max) : (min..)` とかいう記述が必要になり、DSL としては終了です。

問題を `to_a` に限れば、`(1..nil).to_a` や `enum.cycle.to_a` のように、明らかに停止しない `to_a` 呼び出しを例外にするという解決もありえると思います(「明らかに停止しない」が本当に正しいかどうか自信が持てないところですが)。

うっかり `(1..nil)` を作ってしまったというリアルな例などがあると、議論が捗りそうです。

----------------------------------------
Bug #14845: Endless Range with nil
https://bugs.ruby-lang.org/issues/14845#change-72478

* Author: igaiga (Kuniaki IGARASHI)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.6.0preview2
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
endless Rangeで次のケースで困ることがあります。

- 1..nilはendless Rangeになる
- endless Rangeはto_aすると返ってこなくなる
- 1..変数 のケースで意図せずendless Rangeになる可能性があり、そのときto_aすると返ってこなくなる

Ruby 2.5.1 では 1..nil はArgumentError (bad value for range) になります。

たとえば、 1..nil がendless Rangeではなくエラーになればこの問題は解決します。

### Info
- An endless range `(1..)` : https://bugs.ruby-lang.org/issues/12912
- twitter での話 : https://twitter.com/igaiga555/status/1006715631796813824



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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50570] [Ruby trunk Bug#14845][Assigned] Endless Range with nil
       [not found] <redmine.issue-14845.20180613075321@ruby-lang.org>
  2018-06-13  7:53 ` [ruby-dev:50568] [Ruby trunk Bug#14845] Endless Range with nil igaiga
  2018-06-13  8:06 ` [ruby-dev:50569] " mame
@ 2018-06-13  9:06 ` mame
  2018-06-13 10:07 ` [ruby-dev:50571] [Ruby trunk Bug#14845] " matz
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 7+ messages in thread
From: mame @ 2018-06-13  9:06 UTC (permalink / raw)
  To: ruby-dev

Issue #14845 has been updated by mame (Yusuke Endoh).

Status changed from Closed to Assigned
Assignee set to matz (Yukihiro Matsumoto)

https://twitter.com/yukihiro_matz/status/1006737384820445184
> いやあ、エラーではねた方がいいんじゃないですかね。

ていうのがあったので、とりあえず r63646 で `(1..nil)` を禁止しました。ただし `Range.new(1, nil)` は許しています(そうしないと Range のサブクラスを endless にする手段がないので)。

個人的には、DSL が終了してしまったのと、無駄に複雑になった気がして、あんまり好きじゃないです。次の開発者会議で相談させてください。

----------------------------------------
Bug #14845: Endless Range with nil
https://bugs.ruby-lang.org/issues/14845#change-72480

* Author: igaiga (Kuniaki IGARASHI)
* Status: Assigned
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: 
* ruby -v: 2.6.0preview2
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
endless Rangeで次のケースで困ることがあります。

- 1..nilはendless Rangeになる
- endless Rangeはto_aすると返ってこなくなる
- 1..変数 のケースで意図せずendless Rangeになる可能性があり、そのときto_aすると返ってこなくなる

Ruby 2.5.1 では 1..nil はArgumentError (bad value for range) になります。

たとえば、 1..nil がendless Rangeではなくエラーになればこの問題は解決します。

### Info
- An endless range `(1..)` : https://bugs.ruby-lang.org/issues/12912
- twitter での話 : https://twitter.com/igaiga555/status/1006715631796813824



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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50571] [Ruby trunk Bug#14845] Endless Range with nil
       [not found] <redmine.issue-14845.20180613075321@ruby-lang.org>
                   ` (2 preceding siblings ...)
  2018-06-13  9:06 ` [ruby-dev:50570] [Ruby trunk Bug#14845][Assigned] " mame
@ 2018-06-13 10:07 ` matz
  2018-06-13 11:01 ` [ruby-dev:50572] [Ruby trunk Bug#14845][Assigned] " mame
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 7+ messages in thread
From: matz @ 2018-06-13 10:07 UTC (permalink / raw)
  To: ruby-dev

Issue #14845 has been updated by matz (Yukihiro Matsumoto).


I meant `(1..).to_a` to raise an exception (for apparent infinity loop), not prohibiting `1..nil`'.

Matz.


----------------------------------------
Bug #14845: Endless Range with nil
https://bugs.ruby-lang.org/issues/14845#change-72484

* Author: igaiga (Kuniaki IGARASHI)
* Status: Closed
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: 
* ruby -v: 2.6.0preview2
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
endless Rangeで次のケースで困ることがあります。

- 1..nilはendless Rangeになる
- endless Rangeはto_aすると返ってこなくなる
- 1..変数 のケースで意図せずendless Rangeになる可能性があり、そのときto_aすると返ってこなくなる

Ruby 2.5.1 では 1..nil はArgumentError (bad value for range) になります。

たとえば、 1..nil がendless Rangeではなくエラーになればこの問題は解決します。

### Info
- An endless range `(1..)` : https://bugs.ruby-lang.org/issues/12912
- twitter での話 : https://twitter.com/igaiga555/status/1006715631796813824



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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50572] [Ruby trunk Bug#14845][Assigned] Endless Range with nil
       [not found] <redmine.issue-14845.20180613075321@ruby-lang.org>
                   ` (3 preceding siblings ...)
  2018-06-13 10:07 ` [ruby-dev:50571] [Ruby trunk Bug#14845] " matz
@ 2018-06-13 11:01 ` mame
  2018-06-13 11:20 ` [ruby-dev:50573] [Ruby trunk Bug#14845] " mame
  2018-06-13 15:45 ` [ruby-dev:50574] " zn
  6 siblings, 0 replies; 7+ messages in thread
From: mame @ 2018-06-13 11:01 UTC (permalink / raw)
  To: ruby-dev

Issue #14845 has been updated by mame (Yusuke Endoh).

Status changed from Closed to Assigned

matz (Yukihiro Matsumoto) wrote:
> I meant `(1..).to_a` to raise an exception (for apparent infinity loop), not prohibiting `1..nil`'.
> 
> Matz.

Sorry for my misunderstanding.  I reverted r63646.

----------------------------------------
Bug #14845: Endless Range with nil
https://bugs.ruby-lang.org/issues/14845#change-72485

* Author: igaiga (Kuniaki IGARASHI)
* Status: Assigned
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: 
* ruby -v: 2.6.0preview2
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
endless Rangeで次のケースで困ることがあります。

- 1..nilはendless Rangeになる
- endless Rangeはto_aすると返ってこなくなる
- 1..変数 のケースで意図せずendless Rangeになる可能性があり、そのときto_aすると返ってこなくなる

Ruby 2.5.1 では 1..nil はArgumentError (bad value for range) になります。

たとえば、 1..nil がendless Rangeではなくエラーになればこの問題は解決します。

### Info
- An endless range `(1..)` : https://bugs.ruby-lang.org/issues/12912
- twitter での話 : https://twitter.com/igaiga555/status/1006715631796813824



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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50573] [Ruby trunk Bug#14845] Endless Range with nil
       [not found] <redmine.issue-14845.20180613075321@ruby-lang.org>
                   ` (4 preceding siblings ...)
  2018-06-13 11:01 ` [ruby-dev:50572] [Ruby trunk Bug#14845][Assigned] " mame
@ 2018-06-13 11:20 ` mame
  2018-06-13 15:45 ` [ruby-dev:50574] " zn
  6 siblings, 0 replies; 7+ messages in thread
From: mame @ 2018-06-13 11:20 UTC (permalink / raw)
  To: ruby-dev

Issue #14845 has been updated by mame (Yusuke Endoh).

File range_to_a.patch added

I'm attaching a patch for `Range#to_a` that raises an RangeError for an endless range, and that calls super to `Enumerable#to_a` for a normal range.

----------------------------------------
Bug #14845: Endless Range with nil
https://bugs.ruby-lang.org/issues/14845#change-72486

* Author: igaiga (Kuniaki IGARASHI)
* Status: Assigned
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: 
* ruby -v: 2.6.0preview2
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
endless Rangeで次のケースで困ることがあります。

- 1..nilはendless Rangeになる
- endless Rangeはto_aすると返ってこなくなる
- 1..変数 のケースで意図せずendless Rangeになる可能性があり、そのときto_aすると返ってこなくなる

Ruby 2.5.1 では 1..nil はArgumentError (bad value for range) になります。

たとえば、 1..nil がendless Rangeではなくエラーになればこの問題は解決します。

### Info
- An endless range `(1..)` : https://bugs.ruby-lang.org/issues/12912
- twitter での話 : https://twitter.com/igaiga555/status/1006715631796813824

---Files--------------------------------
range_to_a.patch (1.56 KB)


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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-dev:50574] [Ruby trunk Bug#14845] Endless Range with nil
       [not found] <redmine.issue-14845.20180613075321@ruby-lang.org>
                   ` (5 preceding siblings ...)
  2018-06-13 11:20 ` [ruby-dev:50573] [Ruby trunk Bug#14845] " mame
@ 2018-06-13 15:45 ` zn
  6 siblings, 0 replies; 7+ messages in thread
From: zn @ 2018-06-13 15:45 UTC (permalink / raw)
  To: ruby-dev

Issue #14845 has been updated by znz (Kazuhiro NISHIYAMA).


別チケットにした方が良いのかもしれませんが、関連するのでここにコメントしておきます。

`Range.new(1)` のように終端を省略できるようにするのはどうでしょうか?
endless range の時は exclude_end を指定できても違いがないようなので、現状では問題がなさそうに思います。

beginless などの可能性を考えるとキーワード引数も受け付けるようにして、 `Range.new(begin: 1, endless: true)` や `Range.new(begin: 1, end: 9, exclude_end: true)` のようにかけると良いかもしれません。

----------------------------------------
Bug #14845: Endless Range with nil
https://bugs.ruby-lang.org/issues/14845#change-72487

* Author: igaiga (Kuniaki IGARASHI)
* Status: Assigned
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: 
* ruby -v: 2.6.0preview2
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
endless Rangeで次のケースで困ることがあります。

- 1..nilはendless Rangeになる
- endless Rangeはto_aすると返ってこなくなる
- 1..変数 のケースで意図せずendless Rangeになる可能性があり、そのときto_aすると返ってこなくなる

Ruby 2.5.1 では 1..nil はArgumentError (bad value for range) になります。

たとえば、 1..nil がendless Rangeではなくエラーになればこの問題は解決します。

### Info
- An endless range `(1..)` : https://bugs.ruby-lang.org/issues/12912
- twitter での話 : https://twitter.com/igaiga555/status/1006715631796813824

---Files--------------------------------
range_to_a.patch (1.56 KB)


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

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-06-13 15:45 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <redmine.issue-14845.20180613075321@ruby-lang.org>
2018-06-13  7:53 ` [ruby-dev:50568] [Ruby trunk Bug#14845] Endless Range with nil igaiga
2018-06-13  8:06 ` [ruby-dev:50569] " mame
2018-06-13  9:06 ` [ruby-dev:50570] [Ruby trunk Bug#14845][Assigned] " mame
2018-06-13 10:07 ` [ruby-dev:50571] [Ruby trunk Bug#14845] " matz
2018-06-13 11:01 ` [ruby-dev:50572] [Ruby trunk Bug#14845][Assigned] " mame
2018-06-13 11:20 ` [ruby-dev:50573] [Ruby trunk Bug#14845] " mame
2018-06-13 15:45 ` [ruby-dev:50574] " zn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).