ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂
@ 2011-10-30  8:19 tadayoshi funaba
  2011-10-31 18:45 ` [ruby-dev:44747] " Yukihiro Matsumoto
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: tadayoshi funaba @ 2011-10-30  8:19 UTC (permalink / raw
  To: ruby developers list


Issue #5512 has been reported by tadayoshi funaba.

----------------------------------------
Feature #5512: Integer#/ の改訂
http://redmine.ruby-lang.org/issues/5512

Author: tadayoshi funaba
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 2.0


Integer#/ を Integer#quo の別名として定義しなおす事を提案します。

現在の Integer#/ はオペランドが整数である場合値が整数になります。整数を
与えた場合の結果だけを見て、あるいは整数ではない場合の結果だけを見て自
分の望み通りの結果を得たと思い込んでしまうかもしれません。

これついての対処として、Integer#div、または Integer#quo を利用するよう
啓蒙するなどいくつかの提案がありうるでしょうが、本質的な解決法は、やは
り仕様を変更するしかないと思われます。

これはプログラミングにおける総称性の確保の邪魔になり、Numeric#/ を利用
はバグの温床になり得えます。



-- 
http://redmine.ruby-lang.org

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

* [ruby-dev:44747] Re: [ruby-trunk - Feature #5512][Open] Integer#/ の改訂
  2011-10-30  8:19 [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂 tadayoshi funaba
@ 2011-10-31 18:45 ` Yukihiro Matsumoto
  2011-11-01  0:52   ` [ruby-dev:44753] " Kenta Murata
  2011-11-01 13:12   ` [ruby-dev:44765] " Yusuke Endoh
  2013-02-26  0:48 ` [ruby-dev:47116] [ruby-trunk - Feature #5512] " ko1 (Koichi Sasada)
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 13+ messages in thread
From: Yukihiro Matsumoto @ 2011-10-31 18:45 UTC (permalink / raw
  To: ruby developers list

まつもと ゆきひろです

In message "Re: [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂"
    on Sun, 30 Oct 2011 17:19:45 +0900, tadayoshi funaba <redmine@ruby-lang.org> writes:

|Integer#/ を Integer#quo の別名として定義しなおす事を提案します。

長期的には賛成しますが、2.0にはあまり過去との非互換性を入れ
たくないので、その次(3.0?)にしようと思います。

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

* [ruby-dev:44753] Re: [ruby-trunk - Feature #5512][Open] Integer#/  の改訂
  2011-10-31 18:45 ` [ruby-dev:44747] " Yukihiro Matsumoto
@ 2011-11-01  0:52   ` Kenta Murata
  2011-11-01 13:12   ` [ruby-dev:44765] " Yusuke Endoh
  1 sibling, 0 replies; 13+ messages in thread
From: Kenta Murata @ 2011-11-01  0:52 UTC (permalink / raw
  To: ruby developers list

(2011.11.01 03:45 ), Yukihiro Matsumoto wrote:
> まつもと ゆきひろです
> 
> In message "Re: [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂"
>     on Sun, 30 Oct 2011 17:19:45 +0900, tadayoshi funaba <redmine@ruby-lang.org> writes:
> 
> |Integer#/ を Integer#quo の別名として定義しなおす事を提案します。
> 
> 長期的には賛成しますが、2.0にはあまり過去との非互換性を入れ
> たくないので、その次(3.0?)にしようと思います。

2.0 がリリースされたら trunk で実装できると解釈して良いですか?
それとも、2.0 のリリース後にもう一度考えますか?

-- 
Kenta Murata <muraken@gmail•com>
1D69 ADDE 081C 9CC2 2E54 98C1 CEFE 8AFB 6081 B062

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

* [ruby-dev:44765] Re: [ruby-trunk - Feature #5512][Open] Integer#/  の改訂
  2011-10-31 18:45 ` [ruby-dev:44747] " Yukihiro Matsumoto
  2011-11-01  0:52   ` [ruby-dev:44753] " Kenta Murata
@ 2011-11-01 13:12   ` Yusuke Endoh
  2011-11-01 13:46     ` [ruby-dev:44766] " Tadayoshi Funaba
                       ` (2 more replies)
  1 sibling, 3 replies; 13+ messages in thread
From: Yusuke Endoh @ 2011-11-01 13:12 UTC (permalink / raw
  To: ruby developers list

遠藤です。

2011年11月1日3:45 Yukihiro Matsumoto <matz@ruby-lang.org>:
> In message "Re: [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂"
>    on Sun, 30 Oct 2011 17:19:45 +0900, tadayoshi funaba <redmine@ruby-lang.org> writes:
>
> |Integer#/ を Integer#quo の別名として定義しなおす事を提案します。
>
> 長期的には賛成しますが、2.0にはあまり過去との非互換性を入れ
> たくないので、その次(3.0?)にしようと思います。


本気で変える予定があるのなら、特大の非互換になりますので、今のうちに
切り捨てたい場合の推奨代替策を決めて ( (x/y).round ですかね?) 、
2.0 から啓蒙しておいたほうがいいと思います。(つまり推奨形式になって
いない場合に warning を出す)


個人的には、Integer#// とか別の演算子を導入して、Integer#/ は変えない
方が嬉しいです。切り捨てを期待したコードをすごく書いてきた。。。

-- 
Yusuke Endoh <mame@tsg•ne.jp>

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

* [ruby-dev:44766] Re: [ruby-trunk - Feature #5512][Open] Integer#/ の改訂
  2011-11-01 13:12   ` [ruby-dev:44765] " Yusuke Endoh
@ 2011-11-01 13:46     ` Tadayoshi Funaba
  2011-11-01 14:00     ` [ruby-dev:44767] " Yukihiro Matsumoto
  2011-11-22 12:27     ` [ruby-dev:44896] " Masaya TARUI
  2 siblings, 0 replies; 13+ messages in thread
From: Tadayoshi Funaba @ 2011-11-01 13:46 UTC (permalink / raw
  To: ruby developers list

> 本気で変える予定があるのなら、特大の非互換になりますので、今のうちに
> 切り捨てたい場合の推奨代替策を決めて ( (x/y).round ですかね?) 、
> 2.0 から啓蒙しておいたほうがいいと思います。(つまり推奨形式になって
> いない場合に warning を出す)

それは賛成です。これまでの事を考えるとあまり期待できないですが。
python2 でやったような事ですが、ruby だと div をつかえってくらいでしょ
う。

> 個人的には、Integer#// とか別の演算子を導入して、Integer#/ は変えない
> 方が嬉しいです。切り捨てを期待したコードをすごく書いてきた。。。

smalltalk では、// が切捨て \\ がそれの対になる余りなっていますが、
ruby では // は正規表現に被るのでダメだと言われました。どっちにしても
Integer#/ を変える事に意味があるので、それだったら、div と quo をつかい
ましょうで終りですね。後はつかいやすいように div メソッドではなく、div
演算子を用意するくらいか。

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

* [ruby-dev:44767] Re: [ruby-trunk - Feature #5512][Open] Integer#/  の改訂
  2011-11-01 13:12   ` [ruby-dev:44765] " Yusuke Endoh
  2011-11-01 13:46     ` [ruby-dev:44766] " Tadayoshi Funaba
@ 2011-11-01 14:00     ` Yukihiro Matsumoto
  2011-11-01 14:40       ` [ruby-dev:44768] " Yusuke Endoh
  2011-11-22 12:27     ` [ruby-dev:44896] " Masaya TARUI
  2 siblings, 1 reply; 13+ messages in thread
From: Yukihiro Matsumoto @ 2011-11-01 14:00 UTC (permalink / raw
  To: ruby developers list

まつもと ゆきひろです

In message "Re: [ruby-dev:44765] Re: [ruby-trunk - Feature #5512][Open] Integer#/ 	の改訂"
    on Tue, 1 Nov 2011 22:12:54 +0900, Yusuke Endoh <mame@tsg•ne.jp> writes:

|本気で変える予定があるのなら、特大の非互換になりますので、今のうちに
|切り捨てたい場合の推奨代替策を決めて ( (x/y).round ですかね?) 、
|2.0 から啓蒙しておいたほうがいいと思います。(つまり推奨形式になって
|いない場合に warning を出す)

方針としては賛成ですが、「推奨形式になっていない」ことをどう
やって検出しますか? Integer#/ が呼ばれる度に警告を出す?

|個人的には、Integer#// とか別の演算子を導入して、Integer#/ は変えない
|方が嬉しいです。切り捨てを期待したコードをすごく書いてきた。。。

別の演算子という意味では quo があるので、「変えない」という
のはこの提案の意味がなくなるのではないでしょうか。また、整数
が要求されるところではほとんどの場合切り捨てが行われているは
ずなので、実際にはあまり問題にならないことが多いかもしれませ
ん。つまり、

  p 1/2

みたいのは影響を受けるけど

  ary[1/2]

みたいのは影響を受けないってこと。

                                まつもと ゆきひろ /:|)

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

* [ruby-dev:44768] Re: [ruby-trunk - Feature #5512][Open] Integer#/  の改訂
  2011-11-01 14:00     ` [ruby-dev:44767] " Yukihiro Matsumoto
@ 2011-11-01 14:40       ` Yusuke Endoh
  2011-11-01 14:46         ` [ruby-dev:44769] " Yukihiro Matsumoto
  2011-11-02  0:28         ` [ruby-dev:44770] " Kenta Murata
  0 siblings, 2 replies; 13+ messages in thread
From: Yusuke Endoh @ 2011-11-01 14:40 UTC (permalink / raw
  To: ruby developers list

ふなばさん、まつもとさん、
お返事ありがとうございます。

2011年11月1日22:46 Tadayoshi Funaba <tadf@dotrb•org>:
>> 本気で変える予定があるのなら、特大の非互換になりますので、今のうちに
>> 切り捨てたい場合の推奨代替策を決めて ( (x/y).round ですかね?) 、
>> 2.0 から啓蒙しておいたほうがいいと思います。(つまり推奨形式になって
>> いない場合に warning を出す)
>
> それは賛成です。これまでの事を考えるとあまり期待できないですが。
> python2 でやったような事ですが、ruby だと div をつかえってくらいでしょ
> う。

なるほど。
「代わりに Integer#div 使え」ということなので、Integer#/ が
呼ばれるたび、もしくは初めて呼ばれた時だけに警告する感じですかね。


>> 個人的には、Integer#// とか別の演算子を導入して、Integer#/ は変えない
>> 方が嬉しいです。切り捨てを期待したコードをすごく書いてきた。。。
>
> smalltalk では、// が切捨て \\ がそれの対になる余りなっていますが、
> ruby では // は正規表現に被るのでダメだと言われました。どっちにしても
> Integer#/ を変える事に意味があるので、それだったら、div と quo をつかい
> ましょうで終りですね。後はつかいやすいように div メソッドではなく、div
> 演算子を用意するくらいか。

見やすい中置演算子がないことが不満なのかなと思ったのですが、
変えること自体が目的なんですかね。



2011年11月1日23:00 Yukihiro Matsumoto <matz@ruby-lang.org>:
> また、整数
> が要求されるところではほとんどの場合切り捨てが行われているは
> ずなので、実際にはあまり問題にならないことが多いかもしれませ
> ん。

x を n の倍数にアラインさせるために

  x / n * n

というイディオムをかなり書いてきてるんですよね。

このイディオムが具体的にどういうときに必要かというと、簡単には
説明しにくいんですが、ええと、タイルを対称的に並べるため個数を
偶数に限定する (x / 2 * 2) とか、10^14 .. 10^14 + 1000000 の
範囲の素数を列挙する (2 段階エラトステネス) とか。
妙な例ですみません。


あと、現状の quo だと、4.quo(2) が Rational になるみたいですが、
整数で済む時は整数になるようにしませんか?

-- 
Yusuke Endoh <mame@tsg•ne.jp>

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

* [ruby-dev:44769] Re: [ruby-trunk - Feature #5512][Open] Integer#/  の改訂
  2011-11-01 14:40       ` [ruby-dev:44768] " Yusuke Endoh
@ 2011-11-01 14:46         ` Yukihiro Matsumoto
  2011-11-02  0:28         ` [ruby-dev:44770] " Kenta Murata
  1 sibling, 0 replies; 13+ messages in thread
From: Yukihiro Matsumoto @ 2011-11-01 14:46 UTC (permalink / raw
  To: ruby developers list

まつもと ゆきひろです

In message "Re: [ruby-dev:44768] Re: [ruby-trunk - Feature #5512][Open] Integer#/ 	の改訂"
    on Tue, 1 Nov 2011 23:40:20 +0900, Yusuke Endoh <mame@tsg•ne.jp> writes:

|x を n の倍数にアラインさせるために
|
|  x / n * n
|
|というイディオムをかなり書いてきてるんですよね。

なるほど。互換性問題の解決にはなりませんが、整数をアラインさ
せるメソッドが欲しいこともあるかもしれませんね。

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

* [ruby-dev:44770] Re: [ruby-trunk - Feature #5512][Open] Integer#/  の改訂
  2011-11-01 14:40       ` [ruby-dev:44768] " Yusuke Endoh
  2011-11-01 14:46         ` [ruby-dev:44769] " Yukihiro Matsumoto
@ 2011-11-02  0:28         ` Kenta Murata
  1 sibling, 0 replies; 13+ messages in thread
From: Kenta Murata @ 2011-11-02  0:28 UTC (permalink / raw
  To: ruby developers list

むらたです。

(2011.11.01 23:40 ), Yusuke Endoh wrote:
> あと、現状の quo だと、4.quo(2) が Rational になるみたいですが、
> 整数で済む時は整数になるようにしませんか?
> 

どうせなら、分母が 1 の Rational はすべて整数に正準化させるように
変更しませんか?

-- 
Kenta Murata <muraken@gmail•com>
1D69 ADDE 081C 9CC2 2E54 98C1 CEFE 8AFB 6081 B062

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

* [ruby-dev:44896] Re: [ruby-trunk - Feature #5512][Open] Integer#/  の改訂
  2011-11-01 13:12   ` [ruby-dev:44765] " Yusuke Endoh
  2011-11-01 13:46     ` [ruby-dev:44766] " Tadayoshi Funaba
  2011-11-01 14:00     ` [ruby-dev:44767] " Yukihiro Matsumoto
@ 2011-11-22 12:27     ` Masaya TARUI
  2 siblings, 0 replies; 13+ messages in thread
From: Masaya TARUI @ 2011-11-22 12:27 UTC (permalink / raw
  To: ruby developers list

たるいです。

2011年11月1日22:12 Yusuke Endoh <mame@tsg•ne.jp>:
> 本気で変える予定があるのなら、特大の非互換になりますので、今のうちに
> 切り捨てたい場合の推奨代替策を決めて ( (x/y).round ですかね?) 、
> 2.0 から啓蒙しておいたほうがいいと思います。(つまり推奨形式になって
> いない場合に warning を出す)

推奨代替案ってx.div(y)ですよね?


> 個人的には、Integer#// とか別の演算子を導入して、Integer#/ は変えない
> 方が嬉しいです。切り捨てを期待したコードをすごく書いてきた。。。

私も x / a * b みたいなコードはずいぶん沢山書いてきたので、
非互換は嬉しくないです。

普段は演算子で整数に閉じた演算をしたいのですが、
Numericの総称性の確保と上手く混ぜた解はないでしょうか?

-- 
樽家昌也(Masaya TARUI)
No Tool,No Life.

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

* [ruby-dev:47116] [ruby-trunk - Feature #5512] Integer#/ の改訂
  2011-10-30  8:19 [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂 tadayoshi funaba
  2011-10-31 18:45 ` [ruby-dev:44747] " Yukihiro Matsumoto
@ 2013-02-26  0:48 ` ko1 (Koichi Sasada)
  2013-02-26  2:27 ` [ruby-dev:47117] [ruby-trunk - Feature #5512][Assigned] " shugo (Shugo Maeda)
  2018-05-17  8:56 ` [ruby-dev:50546] [Ruby trunk Feature#5512][Rejected] " matz
  3 siblings, 0 replies; 13+ messages in thread
From: ko1 (Koichi Sasada) @ 2013-02-26  0:48 UTC (permalink / raw
  To: ruby developers list


Issue #5512 has been updated by ko1 (Koichi Sasada).

Category set to core
Assignee set to matz (Yukihiro Matsumoto)

宙ぶらりんになっているようなので、まつもとさんにアサインしておきます。
ご検討下さい。

----------------------------------------
Feature #5512: Integer#/ の改訂
https://bugs.ruby-lang.org/issues/5512#change-37021

Author: tadf (tadayoshi funaba)
Status: Open
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: Next Major


Integer#/ を Integer#quo の別名として定義しなおす事を提案します。

現在の Integer#/ はオペランドが整数である場合値が整数になります。整数を
与えた場合の結果だけを見て、あるいは整数ではない場合の結果だけを見て自
分の望み通りの結果を得たと思い込んでしまうかもしれません。

これついての対処として、Integer#div、または Integer#quo を利用するよう
啓蒙するなどいくつかの提案がありうるでしょうが、本質的な解決法は、やは
り仕様を変更するしかないと思われます。

これはプログラミングにおける総称性の確保の邪魔になり、Numeric#/ を利用
はバグの温床になり得えます。



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

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

* [ruby-dev:47117] [ruby-trunk - Feature #5512][Assigned] Integer#/ の改訂
  2011-10-30  8:19 [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂 tadayoshi funaba
  2011-10-31 18:45 ` [ruby-dev:44747] " Yukihiro Matsumoto
  2013-02-26  0:48 ` [ruby-dev:47116] [ruby-trunk - Feature #5512] " ko1 (Koichi Sasada)
@ 2013-02-26  2:27 ` shugo (Shugo Maeda)
  2018-05-17  8:56 ` [ruby-dev:50546] [Ruby trunk Feature#5512][Rejected] " matz
  3 siblings, 0 replies; 13+ messages in thread
From: shugo (Shugo Maeda) @ 2013-02-26  2:27 UTC (permalink / raw
  To: ruby developers list


Issue #5512 has been updated by shugo (Shugo Maeda).

Status changed from Open to Assigned

ko1 (Koichi Sasada) wrote:
> 宙ぶらりんになっているようなので、まつもとさんにアサインしておきます。
> ご検討下さい。

そういえば、mrubyでは1 / 2が0.5 (Float)になる(ので規格に準拠していない)ようなのですが、
将来CRubyで仕様変更するための布石でしょうか。

後方互換性については、

  using OldIntegerDivision

としたらInteger#/が現在の挙動に戻るといった対応は考えられるかなと思いますが、その前に
Refinementsを何とかしないといけないですね…。

----------------------------------------
Feature #5512: Integer#/ の改訂
https://bugs.ruby-lang.org/issues/5512#change-37076

Author: tadf (tadayoshi funaba)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: Next Major


Integer#/ を Integer#quo の別名として定義しなおす事を提案します。

現在の Integer#/ はオペランドが整数である場合値が整数になります。整数を
与えた場合の結果だけを見て、あるいは整数ではない場合の結果だけを見て自
分の望み通りの結果を得たと思い込んでしまうかもしれません。

これついての対処として、Integer#div、または Integer#quo を利用するよう
啓蒙するなどいくつかの提案がありうるでしょうが、本質的な解決法は、やは
り仕様を変更するしかないと思われます。

これはプログラミングにおける総称性の確保の邪魔になり、Numeric#/ を利用
はバグの温床になり得えます。



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

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

* [ruby-dev:50546] [Ruby trunk Feature#5512][Rejected] Integer#/ の改訂
  2011-10-30  8:19 [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂 tadayoshi funaba
                   ` (2 preceding siblings ...)
  2013-02-26  2:27 ` [ruby-dev:47117] [ruby-trunk - Feature #5512][Assigned] " shugo (Shugo Maeda)
@ 2018-05-17  8:56 ` matz
  3 siblings, 0 replies; 13+ messages in thread
From: matz @ 2018-05-17  8:56 UTC (permalink / raw
  To: ruby-dev

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

Status changed from Assigned to Rejected

Too big incompatibility. Abandoned.

Matz.


----------------------------------------
Feature #5512: Integer#/ の改訂
https://bugs.ruby-lang.org/issues/5512#change-72107

* Author: tadf (tadayoshi funaba)
* Status: Rejected
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: Next Major
----------------------------------------
Integer#/ を Integer#quo の別名として定義しなおす事を提案します。

現在の Integer#/ はオペランドが整数である場合値が整数になります。整数を
与えた場合の結果だけを見て、あるいは整数ではない場合の結果だけを見て自
分の望み通りの結果を得たと思い込んでしまうかもしれません。

これついての対処として、Integer#div、または Integer#quo を利用するよう
啓蒙するなどいくつかの提案がありうるでしょうが、本質的な解決法は、やは
り仕様を変更するしかないと思われます。

これはプログラミングにおける総称性の確保の邪魔になり、Numeric#/ を利用
はバグの温床になり得えます。




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

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

end of thread, other threads:[~2018-05-17  8:56 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-30  8:19 [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂 tadayoshi funaba
2011-10-31 18:45 ` [ruby-dev:44747] " Yukihiro Matsumoto
2011-11-01  0:52   ` [ruby-dev:44753] " Kenta Murata
2011-11-01 13:12   ` [ruby-dev:44765] " Yusuke Endoh
2011-11-01 13:46     ` [ruby-dev:44766] " Tadayoshi Funaba
2011-11-01 14:00     ` [ruby-dev:44767] " Yukihiro Matsumoto
2011-11-01 14:40       ` [ruby-dev:44768] " Yusuke Endoh
2011-11-01 14:46         ` [ruby-dev:44769] " Yukihiro Matsumoto
2011-11-02  0:28         ` [ruby-dev:44770] " Kenta Murata
2011-11-22 12:27     ` [ruby-dev:44896] " Masaya TARUI
2013-02-26  0:48 ` [ruby-dev:47116] [ruby-trunk - Feature #5512] " ko1 (Koichi Sasada)
2013-02-26  2:27 ` [ruby-dev:47117] [ruby-trunk - Feature #5512][Assigned] " shugo (Shugo Maeda)
2018-05-17  8:56 ` [ruby-dev:50546] [Ruby trunk Feature#5512][Rejected] " matz

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).