https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2010-01-29T01:36:44Z
Ruby Issue Tracking System
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=7994
2010-01-29T01:36:44Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="/issues/2679">[ruby-dev:40221]</a> [Bug:trunk] rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR"<br>
on Fri, 29 Jan 2010 01:18:07 +0900, Yusuke ENDOH <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a> writes:</p>
<p>|freeze した SimpleDelegator を clone できません。<br>
|これはバグですよね。</p>
<p>バグだと思います。</p>
<p>|lib/delegator.rb の clone の定義を見ると<br>
|<br>
| def clone<br>
| new = super<br>
| new.<strong>setobj</strong>(<strong>getobj</strong>.clone)<br>
| new<br>
| end<br>
|<br>
|となっていて、<strong>setobj</strong> するときにはもう SimpleDelegetor は freeze<br>
|状態なのでそりゃそうだという感じなんですが、どう直したものでしょう。</p>
<p>困りましたねえ。ちょっと考えてみます。</p>
<p>=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=7995
2010-01-29T01:49:26Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/40222">[ruby-dev:40222]</a> Re: [Bug:trunk] rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR"<br>
on Fri, 29 Jan 2010 01:36:27 +0900, Yukihiro Matsumoto <a href="mailto:matz@ruby-lang.org" class="email">matz@ruby-lang.org</a> writes:</p>
<p>||lib/delegator.rb の clone の定義を見ると<br>
||<br>
|| def clone<br>
|| new = super<br>
|| new.<strong>setobj</strong>(<strong>getobj</strong>.clone)<br>
|| new<br>
|| end<br>
||<br>
||となっていて、<strong>setobj</strong> するときにはもう SimpleDelegetor は freeze<br>
||状態なのでそりゃそうだという感じなんですが、どう直したものでしょう。<br>
|<br>
|困りましたねえ。ちょっと考えてみます。</p>
<p>そういえば、こんな時のためにinitialize_copyというメソッドを用<br>
意しておいたのでした。でも、今度はcloneとdupの区別がつかない<br>
(API設計ミス)。もし、これによって非互換性が問題になるようなら<br>
教えてください。</p>
<p>=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=7998
2010-01-29T01:57:05Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>=begin<br>
This issue was solved with changeset r26462.<br>
Yusuke, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<p>=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=8010
2010-01-29T08:40:31Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>=begin<br>
遠藤です。</p>
<p>2010年1月29日1:49 Yukihiro Matsumoto <a href="mailto:matz@ruby-lang.org" class="email">matz@ruby-lang.org</a>:</p>
<blockquote>
<p>||lib/delegator.rb の clone の定義を見ると<br>
||<br>
|| def clone<br>
|| new = super<br>
|| new.<strong>setobj</strong>(<strong>getobj</strong>.clone)<br>
|| new<br>
|| end<br>
||<br>
||となっていて、<strong>setobj</strong> するときにはもう SimpleDelegetor は freeze<br>
||状態なのでそりゃそうだという感じなんですが、どう直したものでしょう。<br>
|<br>
|困りましたねえ。ちょっと考えてみます。</p>
<p>そういえば、こんな時のためにinitialize_copyというメソッドを用<br>
意しておいたのでした。でも、今度はcloneとdupの区別がつかない<br>
(API設計ミス)。もし、これによって非互換性が問題になるようなら<br>
教えてください。</p>
</blockquote>
<p>(いい加減に試したところ) rubyspec と test-all ともにパスしたのですが、<br>
以下のようなコードが動かなくなりました。</p>
<p>$ ./ruby -rdelegate -e '<br>
a = [42, :hello].freeze<br>
d = SimpleDelegator.new(a)<br>
d.dup[0] += 1<br>
'<br>
-e:4:in `': can't modify frozen array (RuntimeError)</p>
<p>--<br>
Yusuke ENDOH <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p>
<p>=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=8027
2010-01-29T22:44:13Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul><li><strong>Category</strong> set to <i>lib</i></li><li><strong>Status</strong> changed from <i>Closed</i> to <i>Open</i></li><li><strong>Assignee</strong> set to <i>matz (Yukihiro Matsumoto)</i></li><li><strong>Priority</strong> changed from <i>3</i> to <i>Normal</i></li><li><strong>Target version</strong> set to <i>2.0.0</i></li><li><strong>ruby -v</strong> set to <i>ruby 1.9.2dev (2010-01-29 trunk 26468) [i686-linux]</i></li></ul><p>=begin<br>
$ ./ruby -rdelegate -e '<br>
a = [42, :hello].freeze<br>
d = SimpleDelegator.new(a)<br>
d.dup[0] += 1<br>
'<br>
-e:4:in `': can't modify frozen array (RuntimeError)</p>
<p>忘れられないように reopen しておきます。</p>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a><br>
=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=8135
2010-02-04T08:17:06Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul><p>=begin<br>
This issue was solved with changeset r26566.<br>
Yusuke, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<p>=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=8136
2010-02-04T10:39:01Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/40312">[ruby-dev:40312]</a> <a href="Closed">Bug #2679</a> rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR"<br>
on Thu, 4 Feb 2010 08:17:45 +0900, Nobuyoshi Nakada <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a> writes:</p>
<p>|チケット <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR (Closed)" href="https://bugs.ruby-lang.org/issues/2679">#2679</a> が更新されました。 (by Nobuyoshi Nakada)<br>
|ステータス OpenからClosedに変更</p>
<p>この修正ですが、SimpleDelegator.dupが返すオブジェクトのclass<br>
がSimpleDelegatorでなくなってます。それはそれで問題があるよ<br>
うな。</p>
<p>a = [42, :hello].freeze<br>
d = SimpleDelegator.new(a)<br>
d.dup.class # 以前 SimpleDelegator, 現在 Array</p>
<p>どうなんでしょうね。</p>
<p>=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=8138
2010-02-04T12:43:12Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Closed</i> to <i>Open</i></li><li><strong>Assignee</strong> changed from <i>matz (Yukihiro Matsumoto)</i> to <i>nobu (Nobuyoshi Nakada)</i></li></ul><p>=begin<br>
遠藤です。</p>
<p>rubyspec で delegate のエラーが 5 つ増えました。<br>
tempfile も 10 個くらい失敗するようになったようです。<br>
難しいですね。</p>
<p>翻訳すると、以下のように挙動が変わったようです。</p>
<a name="1-freeze-しても-setobj-できてしまう"></a>
<h1 >1) freeze しても <strong>setobj</strong> できてしまう<a href="#1-freeze-しても-setobj-できてしまう" class="wiki-anchor">¶</a></h1>
<p>$ ./ruby -rdelegate -e '<br>
d = SimpleDelegator.new([1, :foo])<br>
d.freeze<br>
d.<strong>setobj</strong>("foo") # 以前はここで例外<br>
p d<br>
'<br>
"foo"</p>
<a name="2-frozen-が-delegate-元の-freeze-状態を返す-これはむしろ改善"></a>
<h1 >2) frozen? が delegate 元の freeze 状態を返す (これはむしろ改善?)<a href="#2-frozen-が-delegate-元の-freeze-状態を返す-これはむしろ改善" class="wiki-anchor">¶</a></h1>
<p>$ ./ruby -rdelegate -e '<br>
p SimpleDelegator.new([1, :foo].freeze).frozen?<br>
'<br>
true # 以前は false</p>
<a name="3-SimpleDelegatormethod-の後で-setobj-を呼び出してから-call-できる"></a>
<h1 >3) SimpleDelegator#method の後で <strong>setobj</strong> を呼び出してから call できる<a href="#3-SimpleDelegatormethod-の後で-setobj-を呼び出してから-call-できる" class="wiki-anchor">¶</a></h1>
<p>$ ./ruby -rdelegate -e '<br>
s = SimpleDelegator.new("foo")<br>
m = s.method("upcase")<br>
s.<strong>setobj</strong>([1,2,3])<br>
p m.call # 以前はここで例外<br>
'<br>
"FOO"</p>
<a name="4-delegate-元の-private-method-が普通に呼び出せてしまう-重大"></a>
<h1 >4) delegate 元の private method が普通に呼び出せてしまう (重大)<a href="#4-delegate-元の-private-method-が普通に呼び出せてしまう-重大" class="wiki-anchor">¶</a></h1>
<p>$ ./ruby -rdelegate -e '<br>
class C<br>
def foo<br>
p :foo!<br>
end<br>
private :foo<br>
end<br>
SimpleDelegator.new(C.new).foo # 以前は例外<br>
'<br>
foo!</p>
<a name="5-delegate-元の-private-method-は以前は-send-でも呼び出せなかった"></a>
<h1 >5) delegate 元の private method は以前は send でも呼び出せなかった<a href="#5-delegate-元の-private-method-は以前は-send-でも呼び出せなかった" class="wiki-anchor">¶</a></h1>
<p>$ ./ruby -rdelegate -e '<br>
class C<br>
def foo<br>
p :foo!<br>
end<br>
private :foo<br>
end<br>
SimpleDelegator.new(C.new).send(:foo) # 以前は例外<br>
'<br>
foo!</p>
<p>--<br>
Yusuke ENDOH <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a><br>
=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=8158
2010-02-05T17:04:46Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul></ul><p>=begin<br>
なかだです。</p>
<p>At Thu, 4 Feb 2010 12:43:19 +0900,<br>
Yusuke Endoh wrote in <a href="https://blade.ruby-lang.org/ruby-dev/40314">[ruby-dev:40314]</a>:</p>
<blockquote>
<a name="2-frozen-が-delegate-元の-freeze-状態を返す-これはむしろ改善"></a>
<h1 >2) frozen? が delegate 元の freeze 状態を返す (これはむしろ改善?)<a href="#2-frozen-が-delegate-元の-freeze-状態を返す-これはむしろ改善" class="wiki-anchor">¶</a></h1>
<p>$ ./ruby -rdelegate -e '<br>
p SimpleDelegator.new([1, :foo].freeze).frozen?<br>
'<br>
true # 以前は false</p>
</blockquote>
<p>これはどっちのほうがいいんでしょうねぇ。</p>
<blockquote>
<a name="4-delegate-元の-private-method-が普通に呼び出せてしまう-重大"></a>
<h1 >4) delegate 元の private method が普通に呼び出せてしまう (重大)<a href="#4-delegate-元の-private-method-が普通に呼び出せてしまう-重大" class="wiki-anchor">¶</a></h1>
<p>$ ./ruby -rdelegate -e '<br>
class C<br>
def foo<br>
p :foo!<br>
end<br>
private :foo<br>
end<br>
SimpleDelegator.new(C.new).foo # 以前は例外<br>
'<br>
foo!</p>
</blockquote>
<blockquote>
<a name="5-delegate-元の-private-method-は以前は-send-でも呼び出せなかった"></a>
<h1 >5) delegate 元の private method は以前は send でも呼び出せなかった<a href="#5-delegate-元の-private-method-は以前は-send-でも呼び出せなかった" class="wiki-anchor">¶</a></h1>
<p>$ ./ruby -rdelegate -e '<br>
class C<br>
def foo<br>
p :foo!<br>
end<br>
private :foo<br>
end<br>
SimpleDelegator.new(C.new).send(:foo) # 以前は例外<br>
'<br>
foo!</p>
</blockquote>
<p>むしろsendでも呼べないほうがバグじゃないかという気がしますが、<br>
method_missingではどう呼び出されたかは分からないので#4と#5で違う<br>
動作にはできませんね。</p>
<p>--<br>
--- 僕の前にBugはない。<br>
--- 僕の後ろにBugはできる。<br>
中田 伸悦</p>
<p>=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=8163
2010-02-05T23:05:15Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>=begin<br>
遠藤です。</p>
<p>2010年2月5日16:39 Nobuyoshi Nakada <a href="mailto:nobu@ruby-lang.org" class="email">nobu@ruby-lang.org</a>:</p>
<blockquote>
<blockquote>
<a name="4-delegate-元の-private-method-が普通に呼び出せてしまう-重大"></a>
<h1 >4) delegate 元の private method が普通に呼び出せてしまう (重大)<a href="#4-delegate-元の-private-method-が普通に呼び出せてしまう-重大" class="wiki-anchor">¶</a></h1>
</blockquote>
</blockquote>
<p><em>snip</em></p>
<blockquote>
<blockquote>
</blockquote>
<p>むしろsendでも呼べないほうがバグじゃないかという気がしますが、</p>
</blockquote>
<p>重大と言ったのは、<a href="https://blade.ruby-lang.org/ruby-core/26122">[ruby-core:26122]</a> で「public method しか delegate<br>
しない」というまつもとさんの方針が示されているためです。<br>
それを根拠に rubyspec を修正したのは私なのでちょっと気まずいですが、<br>
キャンセルされるということなら再度修正します。</p>
<p>まつもとさん、どうします?</p>
<p>--<br>
Yusuke ENDOH <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p>
<p>=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=8166
2010-02-05T23:40:32Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>=begin<br>
遠藤です。</p>
<p>2010年2月5日23:05 Yusuke ENDOH <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a>:</p>
<blockquote>
<p>2010年2月5日16:39 Nobuyoshi Nakada <a href="mailto:nobu@ruby-lang.org" class="email">nobu@ruby-lang.org</a>:</p>
<blockquote>
<blockquote>
<a name="4-delegate-元の-private-method-が普通に呼び出せてしまう-重大"></a>
<h1 >4) delegate 元の private method が普通に呼び出せてしまう (重大)<a href="#4-delegate-元の-private-method-が普通に呼び出せてしまう-重大" class="wiki-anchor">¶</a></h1>
</blockquote>
</blockquote>
<p><em>snip</em></p>
<blockquote>
<blockquote>
</blockquote>
<p>むしろsendでも呼べないほうがバグじゃないかという気がしますが、</p>
</blockquote>
<p>重大と言ったのは、<a href="https://blade.ruby-lang.org/ruby-core/26122">[ruby-core:26122]</a> で「public method しか delegate<br>
しない」というまつもとさんの方針が示されているためです。<br>
それを根拠に rubyspec を修正したのは私なのでちょっと気まずいですが、<br>
キャンセルされるということなら再度修正します。</p>
</blockquote>
<p>上記を送ってから気がつきましたが、すでに修正していただいていました。<br>
すみません&ありがとうございます。</p>
<p>これによって、rubyspec のエラーは現在 1 つになっています。</p>
<p>$ ./ruby -rdelegate -e '<br>
d = SimpleDelegator.new([42, :hello])<br>
d.freeze<br>
p d.clone.frozen?<br>
'<br>
false</p>
<p>上記で true が期待されています。<br>
重要度は低そうなので、仕様変更ということならそれで構いません。</p>
<p>--<br>
Yusuke ENDOH <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p>
<p>=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=8168
2010-02-06T00:54:53Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/40330">[ruby-dev:40330]</a> Re: <a href="Open">Bug #2679</a> rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR"<br>
on Fri, 5 Feb 2010 23:05:03 +0900, Yusuke ENDOH <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a> writes:</p>
<p>|重大と言ったのは、<a href="https://blade.ruby-lang.org/ruby-core/26122">[ruby-core:26122]</a> で「public method しか delegate<br>
|しない」というまつもとさんの方針が示されているためです。<br>
|それを根拠に rubyspec を修正したのは私なのでちょっと気まずいですが、<br>
|キャンセルされるということなら再度修正します。<br>
|<br>
|まつもとさん、どうします?</p>
<p>えーと、別件で来週前半までめちゃめちゃ忙しくてゆっくり考える<br>
時間がありません。なかださんの修正もまだフォローしてないし。<br>
というわけで、ちょっとだけ時間をください。水曜か木曜辺りから、<br>
この件について真面目に検討します。</p>
<p>=end</p>
Ruby master - Bug #2679: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR
https://bugs.ruby-lang.org/issues/2679?journal_id=10249
2010-04-17T00:09:18Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul><p>=begin<br>
Hi,</p>
<p>This ticket was duplicated by <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: rubyspec: SimpleDelegator when frozen creates a frozen clone ERROR (Closed)" href="https://bugs.ruby-lang.org/issues/2679">#2679</a>.<br>
After that, lib/delegate.rb has been changed bit by bit.<br>
As a result of matz and nobu's effort, this seems to work now.</p>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a><br>
=end</p>