CRubyのSymbol GC

5
yhara (Yutaka HARA) @yhara

"RubyのSymbolはGCされないがrespond_toによってユーザー入力値をSymbolにしてしまうと知らない間にプロセスが肥大化してまずい問題" http://t.co/FGBtHVv3

2012-05-25 11:27:57
( Φ _⊞) @n0kada

@yhara そこは去年通った道だ!

2012-05-25 11:31:17
7594591200220899443 @shyouhei

@n0kada @yhara 通った道ってのは過ぎ去った後からなら言っていいけどまだそこに留まってる場合は違うのではないか

2012-05-25 11:33:58
みょうが 🇺🇦 @mrkn

@nari3 拡張ライブラリに手を入れずに実現できますかね?

2012-05-25 13:56:55
nari3 @nari3

@mrkn いろいろノーアイデアです…

2012-05-25 13:57:47
Yukihiro Matz @yukihiro_matz

@nari3 @mrkn Symbol GCは比較的簡単に実現可能ですが、同じシンボルが同じID(整数)を持つことを期待するコードがある(IDをC static変数領域に保存されるとか) などの問題があり、実用には課題があります。

2012-05-25 14:03:38
( Φ _⊞) @n0kada

@yukihiro_matz アクセスしただけで追加されちゃうのはイヤなので、h = Hash.new {[]}; h[k] <<= v みたいにすることが多い

2012-05-25 14:07:39
みょうが 🇺🇦 @mrkn

@yukihiro_matz @nari3 僕が心配してたのがまさにその問題でした。既存の拡張ライブラリとの互換性を維持しようとすると、ほとんど不可能ですね・・・。

2012-05-25 14:09:54
_ko1 @_ko1

@yukihiro_matz @nari3 @mrkn rb_intern("foo") で直接やってるのは消せないけど,その他は消せる,とすればいけるんじゃないかと以前から思ってるんですが,甘いですかね.

2012-05-25 15:08:09
Yukihiro Matz @yukihiro_matz

@_ko1 @mrkn @nari3 私もそれで行きそうな気がしてるんですが、やってみないとダメなケースがあるかどうか判断できないですね。

2012-05-25 16:21:53
( Φ _⊞) @n0kada

@_ko1 rb_str_internで作ったのを区別するということ?

2012-05-25 16:25:53
Yukihiro Matz @yukihiro_matz

@n0kada @_ko1 Rubyから作ったシンボルとCから作ったのを区別するんでしょうね。でRubyで文字列から作ったのをGC対象にする

2012-05-25 16:28:47
7594591200220899443 @shyouhei

@yukihiro_matz @n0kada @_ko1 rb_global_variableと同じ扱いでいいのでは

2012-05-25 16:29:54