https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2012-12-27T00:15:57Z
Ruby Issue Tracking System
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35097
2012-12-27T00:15:57Z
shugo (Shugo Maeda)
<ul><li><strong>Category</strong> set to <i>doc</i></li><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li><li><strong>Assignee</strong> set to <i>matz (Yukihiro Matsumoto)</i></li><li><strong>Target version</strong> set to <i>2.0.0</i></li></ul><p>前田です。</p>
<p><a href="mailto:mogya@mogya.com" class="email">mogya@mogya.com</a> (Daisuke Furukawa) wrote:</p>
<blockquote>
<p>現象:<br>
ruby 1.9.3で、Arrayを継承したクラスのcompactメソッドを呼び出したとき、<br>
Arrayクラスのオブジェクトが帰ってくる</p>
</blockquote>
<p>この変更自体は、r30148で導入された意図的な変更だと思います。</p>
<pre><code>* array.c (rb_ary_dup): should copy contents only. no instance
variable, no class would be copied. it would affect methods
#sort, #reject, #transpose, #uniq, #compact, and #shuffle.
<a href="/issues/4136">[ruby-core:33640]</a>
</code></pre>
<p>ただ、まつもとさんが <a href="http://bugs.ruby-lang.org/issues/4136#note-7" class="external">http://bugs.ruby-lang.org/issues/4136#note-7</a> でflattenなどは<br>
サブクラスのインスタンスを返すという指摘に対し、</p>
<p>If a method is originally defined in Enumerable, i.e. its return value (Array)<br>
is a collection of values from enumerable.<br>
(snip)<br>
I don't think so. #flatten is not an enumerable method. Please point<br>
out if we missed some other methods.</p>
<p>と言っているんですが、compact/uniq/transpose/shuffleもEnumerableでもともと定義されて<br>
いないですよね。<br>
このあたりの一貫性の無さを正当化するような理由はあるでしょうか? > まつもとさん</p>
<p>とくに理由がないのであれば、これらのメソッドはサブクラスのインスタンスを返すようにするか、flattenなども<br>
Arrayを返すようにした方がよいのではないかと思います。</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35098
2012-12-27T00:16:22Z
shugo (Shugo Maeda)
<ul><li><strong>Category</strong> changed from <i>doc</i> to <i>core</i></li></ul>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35765
2013-02-02T01:38:32Z
mrkn (Kenta Murata)
muraken@gmail.com
<ul></ul><p>r39004 (<a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Inherited Array class missing (Closed)" href="https://redmine.ruby-lang.org/issues/7768">#7768</a>) で uniq は修正されたようですね。</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35887
2013-02-06T15:38:05Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>Enumerableで定義されていないArray独自のメソッドはサブクラスを返したほうが良いと思います。<br>
直すタイミングはいつがいいのかな。</p>
<p>Matz.</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35889
2013-02-06T15:53:12Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><blockquote>
<p>Enumerableで定義されていないArray独自のメソッドはサブクラスを返したほうが良いと思います。<br>
直すタイミングはいつがいいのかな。</p>
</blockquote>
<p>いまから2.0にspecレベルの変更が入るのは反対します。念のため。</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35980
2013-02-07T22:08:20Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul></ul><p>結局のところ、1.9.3の挙動は仕様だったのでしょうか?<br>
それとも実はミス?</p>
<p>それによって、trunkに既にcharliesomeが先走って入れちゃった変更を<br>
revertすべきかどうかとか(した方がいいと私個人は強く思っていることを<br>
表明しておきます>mameさん)、1.9.3で現状rubyspecが仕様と思って記述<br>
してしまっているのを変更した上で1.9.3でもバグとして直すべきかどうか、<br>
などといった判断に影響が出ます。</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35985
2013-02-07T23:06:04Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>正直なところ、どうして1.9.3と2.0の挙動が異なってしまっているのか経緯を把握してないので適切な答えはできません。<br>
ただ、ArrayにあってEnumerableにないメソッドはレシーバーのクラスを返したほうが良いと思います。</p>
<p>Matz.</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35986
2013-02-07T23:12:55Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>matz (Yukihiro Matsumoto) wrote:</p>
<blockquote>
<p>正直なところ、どうして1.9.3と2.0の挙動が異なってしまっているのか経緯を把握してないので適切な答えはできません。</p>
</blockquote>
<p><a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Inherited Array class missing (Closed)" href="https://redmine.ruby-lang.org/issues/7768">#7768</a> の修正で入った r39004 の副作用で、2.0 の挙動は 1.9.2 の挙動に戻りました。</p>
<blockquote>
<p>ただ、ArrayにあってEnumerableにないメソッドはレシーバーのクラスを返したほうが良いと思います。</p>
</blockquote>
<p>たまたま現在の挙動が matz の好みということになります。<br>
2.0.0-rc2 はその挙動でいきましょう。それで重大な問題が報告されなければ、p0 もそのままで。<br>
なお、rails 等に影響を与えない公算が高いと思っています (1.9.2 と同じ挙動のはずなので) 。</p>
<p>1.9.3 を変えるかどうかはうささんにお任せします。</p>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35988
2013-02-07T23:22:55Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>ふむ。まあ、同感なんですが、それはそれとして charliesome には「もうRCだから変更すんな」と釘を刺すべきでは無いですかね。</p>
<p>Matz.</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35989
2013-02-07T23:23:16Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul></ul><p>こんにちは、なかむら(う)です。</p>
<p>In message "<a href="/issues/7625">[ruby-dev:46940]</a> [ruby-trunk - Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Arrayを継承したオブジェクトのcompactがArrayを返す (Closed)" href="https://redmine.ruby-lang.org/issues/7625">#7625</a>] Arrayを継承したオブジェクトのcompactがArrayを返す"<br>
on Feb.07,2013 23:06:05, <a href="mailto:matz@ruby-lang.org" class="email">matz@ruby-lang.org</a> wrote:</p>
<blockquote>
<p>正直なところ、どうして1.9.3と2.0の挙動が異なってしまっているのか経緯を把握してないので適切な答えはできません。</p>
</blockquote>
<p>1.9.3と2.0.0はつい先日まで同じでした。<br>
[Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Inherited Array class missing (Closed)" href="https://redmine.ruby-lang.org/issues/7768">#7768</a>] を受けて、charliesomeが r39004 でtrunkを変更して<br>
しまったので、挙動に違いが発生しています。</p>
<p>バグなら直すのもやむなしと思いますが、1.9.3では仕様だった(と<br>
これまで理解されてきた)ので、このタイミングで2.0.0の挙動が変<br>
わってしまったことが問題になっています。</p>
<blockquote>
<p>ただ、ArrayにあってEnumerableにないメソッドはレシーバーのクラスを返したほうが良いと思います。</p>
</blockquote>
<p>同感ですが、いつ、がいいのでしょうね。</p>
<a name="それでは"></a>
<h2 >それでは。<a href="#それでは" class="wiki-anchor">¶</a></h2>
<p>U.Nakamura <a href="mailto:usa@garbagecollect.jp" class="email">usa@garbagecollect.jp</a></p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35990
2013-02-07T23:29:23Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul></ul><p>こんにちは、なかむら(う)です。</p>
<p>In message "<a href="/issues/7625">[ruby-dev:46942]</a> [ruby-trunk - Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Arrayを継承したオブジェクトのcompactがArrayを返す (Closed)" href="https://redmine.ruby-lang.org/issues/7625">#7625</a>] Arrayを継承したオブジェクトのcompactがArrayを返す"<br>
on Feb.07,2013 23:12:55, <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a> wrote:</p>
<blockquote>
<p>1.9.3 を変えるかどうかはうささんにお任せします。</p>
</blockquote>
<p>バグだったのなら1.9.3も当然変えます。<br>
仕様だったのなら当然そのままです。<br>
(中途半端な例があるのは把握してますが)</p>
<p>どっちなんでしょうか...</p>
<a name="それでは"></a>
<h2 >それでは。<a href="#それでは" class="wiki-anchor">¶</a></h2>
<p>U.Nakamura <a href="mailto:usa@garbagecollect.jp" class="email">usa@garbagecollect.jp</a></p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=35994
2013-02-07T23:44:35Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>matz (Yukihiro Matsumoto) wrote:</p>
<blockquote>
<p>ふむ。まあ、同感なんですが、それはそれとして charliesome には「もうRCだから変更すんな」と釘を刺すべきでは無いですかね。</p>
</blockquote>
<p>IRC で話した感じでは反省してくれてました。<br>
というか、もう RC だから遠藤がもっと監視してる体制でないといけないんですが、全然余力がなくてすみません。<br>
多分明日の晩には ruby_2_0_0 ブランチを切るんで、そこからリリースまではなるべく全コミットを把握するように努めます。</p>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=36038
2013-02-08T14:03:39Z
shugo (Shugo Maeda)
<ul></ul><p>mame (Yusuke Endoh) wrote:</p>
<blockquote>
<blockquote>
<p>ただ、ArrayにあってEnumerableにないメソッドはレシーバーのクラスを返したほうが良いと思います。</p>
</blockquote>
<p>たまたま現在の挙動が matz の好みということになります。</p>
</blockquote>
<p>いや、そうなっていないと思います。</p>
<p>$ ./ruby -ve 'class Foo < Array; end; p Foo[2,1,3].sort.class'<br>
ruby 2.0.0dev (2013-02-08 trunk 39154) [i686-linux]<br>
Foo</p>
<p>sortはEnumerableにもあるメソッドなので、まつもとさんの考えでは常にArrayを返す<br>
べきということになると思います。</p>
<a name="将来ArrayにしかないメソッドがEnumerableにも追加されたらどうするかとか考える"></a>
<h1 >将来ArrayにしかないメソッドがEnumerableにも追加されたらどうするかとか考える<a href="#将来ArrayにしかないメソッドがEnumerableにも追加されたらどうするかとか考える" class="wiki-anchor">¶</a></h1>
<a name="と本当にまつもとさんの方針でよいのかもちょっと検討の余地があるように思いますが"></a>
<h1 >と、本当にまつもとさんの方針でよいのかもちょっと検討の余地があるように思いますが。<a href="#と本当にまつもとさんの方針でよいのかもちょっと検討の余地があるように思いますが" class="wiki-anchor">¶</a></h1>
<blockquote>
<p>2.0.0-rc2 はその挙動でいきましょう。それで重大な問題が報告されなければ、p0 もそのままで。<br>
なお、rails 等に影響を与えない公算が高いと思っています (1.9.2 と同じ挙動のはずなので) 。</p>
</blockquote>
<p>現状まつもとさんの意図が正しく反映されているか疑問ですので、r39004はいったん<br>
revertすべきだと思います。<br>
これがバグ修正扱いなのであれば2.0.0が出た後で直してもよいと思いますし、仕様変更<br>
なのであれば今さら入るのはおかしいのではないですか?</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=36040
2013-02-08T14:23:17Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><blockquote>
<blockquote>
<p>2.0.0-rc2 はその挙動でいきましょう。それで重大な問題が報告されなければ、p0 もそのままで。<br>
なお、rails 等に影響を与えない公算が高いと思っています (1.9.2 と同じ挙動のはずなので) 。</p>
</blockquote>
<p>現状まつもとさんの意図が正しく反映されているか疑問ですので、r39004はいったん<br>
revertすべきだと思います。<br>
これがバグ修正扱いなのであれば2.0.0が出た後で直してもよいと思いますし、仕様変更<br>
なのであれば今さら入るのはおかしいのではないですか?</p>
</blockquote>
<p>議論の余地があるなら問答無用revertに一票。あわてて進めて吉が出ることは少ないよ。</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=36042
2013-02-08T14:27:15Z
shugo (Shugo Maeda)
<ul></ul><p>#7768の方にもコメントしましたので、議論の続きは(もしあれば)そちらでやりましょう。</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=36053
2013-02-08T20:00:33Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li></ul><p><a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Inherited Array class missing (Closed)" href="https://redmine.ruby-lang.org/issues/7768">#7768</a> を残してこちらは閉じます。</p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=36054
2013-02-08T20:23:17Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>チケット自体の対処は向こうに書きました通り revert でいいです。<br>
判断が変わってすみません。</p>
<p>以下、言い訳。</p>
<p>2013/02/08 shugo (Shugo Maeda) <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a>:</p>
<blockquote>
<p>これがバグ修正扱いなのであれば2.0.0が出た後で直してもよいと思いますし、</p>
</blockquote>
<p>「実はこれはバグだったんだよ!!」と言って挙動を変えるのは決して<br>
好ましいことではないですよね。今回は matz が希望を明確に言ってる<br>
ので、なるべくその芽を摘んでおきたくて。</p>
<p>もちろんどこかでキリを付ける必要はあるのですが、そのキリは rc2<br>
だと考えている(rc2 までは通常のバグ修正を許可してますし)ので、<br>
現状で行けるなら行きたかったのでした。</p>
<p>(なお rc1 が release candidate の名にそぐわない実体になったのは<br>
スケジュールミスです。これも反省してます)</p>
<blockquote>
<p>仕様変更なのであれば今さら入るのはおかしいのではないですか?</p>
</blockquote>
<p>言うまでもないので言ってませんが matz だけは別格だと思います。</p>
<p>遠藤は 2.0.0 の変更に対する拒否権を持ってるつもりですが、それは<br>
リリースを円滑に進めることが目的なので、今回はむしろ拒否権を発動<br>
しないほうがリリースが円滑に進むと思ったのでした。<br>
(しかし matz がどのくらい変えたがっているかを読み間違えた感も)</p>
<p>以上、言い訳でした。</p>
<p>とにかく、いろいろ判断誤ったり優柔不断に変えたりしてすみません。<br>
今後もしばしば誤ると思いますが、生温かくご意見ください。</p>
<p>なお、上記の通り rc2 以降は拒否権全開の予定です。</p>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p>
Ruby master - Bug #7625: Arrayを継承したオブジェクトのcompactがArrayを返す
https://redmine.ruby-lang.org/issues/7625?journal_id=36055
2013-02-08T21:53:21Z
shugo (Shugo Maeda)
<ul></ul><p>前田です。</p>
<p>2013年2月8日 20:15 Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a>:</p>
<blockquote>
<p>チケット自体の対処は向こうに書きました通り revert でいいです。<br>
判断が変わってすみません。</p>
</blockquote>
<p>いえ、了解です。</p>
<p>遠藤さんを責めるつもりはないのですが、一応言い訳にもコメントします。</p>
<blockquote>
<p>2013/02/08 shugo (Shugo Maeda) <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a>:</p>
<blockquote>
<p>これがバグ修正扱いなのであれば2.0.0が出た後で直してもよいと思いますし、</p>
</blockquote>
<p>「実はこれはバグだったんだよ!!」と言って挙動を変えるのは決して<br>
好ましいことではないですよね。今回は matz が希望を明確に言ってる<br>
ので、なるべくその芽を摘んでおきたくて。</p>
<p>もちろんどこかでキリを付ける必要はあるのですが、そのキリは rc2<br>
だと考えている(rc2 までは通常のバグ修正を許可してますし)ので、<br>
現状で行けるなら行きたかったのでした。</p>
</blockquote>
<p>Redmineを見るかぎり、バグか仕様変更か、また2.0.0で修正すべきかという点について、<br>
まつもとさんが明確に意見表明をしていないという認識でした。</p>
<a name="直すタイミングはいつがいいのかなとおっしゃってましたし"></a>
<h1 >「直すタイミングはいつがいいのかな。」とおっしゃってましたし。<a href="#直すタイミングはいつがいいのかなとおっしゃってましたし" class="wiki-anchor">¶</a></h1>
<p>まつもとさんから結論が出ているのであれば、反対はしません。</p>
<blockquote>
<blockquote>
<p>仕様変更なのであれば今さら入るのはおかしいのではないですか?</p>
</blockquote>
<p>言うまでもないので言ってませんが matz だけは別格だと思います。</p>
</blockquote>
<p>はい、それは理解しています。<br>
しかし、上記のような理由で、今回の件はまだ結論が出ていないという理解でした。<br>
また、まつもとさんの意見は(日本語で書かれたため)charliesomeに届いていませんでしたし。</p>
<p>遠藤さんが各issueの詳細まで把握するのは難しいと思いますので、こういう時は保守的な<br>
判断をしていただいた方がよいのではないかと思います。</p>
<p>--<br>
Shugo Maeda</p>