ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:50003] freeze した String を指す WeakRef を作ろうとすると何かがおかしくなるようです
@ 2017-03-03  5:44 KISHIMOTO, Makoto
  2017-03-03  7:30 ` [ruby-dev:50004] " Nobuyoshi Nakada
  0 siblings, 1 reply; 3+ messages in thread
From: KISHIMOTO, Makoto @ 2017-03-03  5:44 UTC (permalink / raw
  To: ruby-dev

きしもとです

freeze した String を指す WeakRef を作ろうとすると何かがおかしくなるようです

$ ruby24 -rweakref -ve 'WeakRef.new "".freeze'
ruby 2.4.0p0 (2016-12-24 revision 57164) [amd64-freebsd10]
/usr/local/lib/ruby/2.4/weakref.rb:88:in `[]=': can't modify frozen String (RuntimeError)
	from /usr/local/lib/ruby/2.4/weakref.rb:88:in `initialize'
	from -e:1:in `new'
	from -e:1:in `<main>'

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

* [ruby-dev:50004] Re: freeze した String を指す WeakRef を作ろうとすると何かがおかしくなるようです
  2017-03-03  5:44 [ruby-dev:50003] freeze した String を指す WeakRef を作ろうとすると何かがおかしくなるようです KISHIMOTO, Makoto
@ 2017-03-03  7:30 ` Nobuyoshi Nakada
  2017-03-03  8:09   ` [ruby-dev:50005] " SASADA Koichi
  0 siblings, 1 reply; 3+ messages in thread
From: Nobuyoshi Nakada @ 2017-03-03  7:30 UTC (permalink / raw
  To: Ruby developers (Japanese)

On 2017/03/03 14:44, KISHIMOTO, Makoto wrote:
> freeze した String を指す WeakRef を作ろうとすると何かがおかしくなるようです

WeakRefはfinalizerを使って実装されていますが、1.9.1からはfrozenなオブ
ジェクトにはfinalizerを追加・削除できなくなっています。

> $ ruby24 -rweakref -ve 'WeakRef.new "".freeze'
> ruby 2.4.0p0 (2016-12-24 revision 57164) [amd64-freebsd10]
> /usr/local/lib/ruby/2.4/weakref.rb:88:in `[]=': can't modify frozen String (RuntimeError)
> 	from /usr/local/lib/ruby/2.4/weakref.rb:88:in `initialize'
> 	from -e:1:in `new'
> 	from -e:1:in `<main>'

せめてエラーメッセージをもう少しわかりやすくしますかね。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

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

* [ruby-dev:50005] Re: freeze した String を指す WeakRef を作ろうとすると何かがおかしくなるようです
  2017-03-03  7:30 ` [ruby-dev:50004] " Nobuyoshi Nakada
@ 2017-03-03  8:09   ` SASADA Koichi
  0 siblings, 0 replies; 3+ messages in thread
From: SASADA Koichi @ 2017-03-03  8:09 UTC (permalink / raw
  To: Ruby developers (Japanese)

On 2017/03/03 16:30, Nobuyoshi Nakada wrote:
>> です
> WeakRefはfinalizerを使って実装されていますが、1.9.1からはfrozenなオブ
> ジェクトにはfinalizerを追加・削除できなくなっています。
> 

中田さんと議論してたんですが、そもそも frozen にファイナライザを許しても
いいんじゃね、という話になっています。これは、チケットを作って議論したい
と思います。

今禁止されている理由:

http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/37964?37935-39341

> 元の問題も気になりますが、frozenなオブジェクトに対してfinalizer
> を付け替えできてしまうことが気になります。
> 実際にはObjectSpaceの操作であることや、finalizerからは元のオ
> ブジェクトそのものの操作ができるわけではないことなどが理由な
> のではないかとは思いますが、付け替えの操作自体はオブジェクト
> の内部フラグを変更しているので(あれ、取り除くとき変更してない
> な)、禁止してもいいのではないかという気もします。

が、内部フラグは、別に外から観測できないので、気にしなくていいのでは、と
いう気もします。

禁止したままのほうがいい理由があれば、教えて下さい。私は、「fstring はそ
もそもきえない(ことが多い)のに、ファイナライザを付けるのは、きっと意図
と違うに違いないから禁止してあげたほうが優しい」というのを思いついたんで
すが、これが正当化されるかはよくわかりません。

-- 
// SASADA Koichi at atdot dot net

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

end of thread, other threads:[~2017-03-03  7:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-03  5:44 [ruby-dev:50003] freeze した String を指す WeakRef を作ろうとすると何かがおかしくなるようです KISHIMOTO, Makoto
2017-03-03  7:30 ` [ruby-dev:50004] " Nobuyoshi Nakada
2017-03-03  8:09   ` [ruby-dev:50005] " SASADA Koichi

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