編集部が選ぶ「みんなに見てほしい」イチオシまとめはこちら

CRubyのSymbol GC

まとめました。
プログラミング GC
3453view 0コメント
5
yhara (Yutaka HARA) @yhara
"RubyのSymbolはGCされないがrespond_toによってユーザー入力値をSymbolにしてしまうと知らない間にプロセスが肥大化してまずい問題" http://t.co/FGBtHVv3
( Φ _⊞) @n0kada
@yhara そこは去年通った道だ!
Urabe, Shyouhei @shyouhei
@n0kada @yhara 通った道ってのは過ぎ去った後からなら言っていいけどまだそこに留まってる場合は違うのではないか
みょうが @mrkn
@nari3 拡張ライブラリに手を入れずに実現できますかね?
nari3 @nari3
@mrkn いろいろノーアイデアです…
Yukihiro Matsumoto @yukihiro_matz
@nari3 @mrkn Symbol GCは比較的簡単に実現可能ですが、同じシンボルが同じID(整数)を持つことを期待するコードがある(IDをC static変数領域に保存されるとか) などの問題があり、実用には課題があります。
( Φ _⊞) @n0kada
@yukihiro_matz アクセスしただけで追加されちゃうのはイヤなので、h = Hash.new {[]}; h[k] <<= v みたいにすることが多い
みょうが @mrkn
@yukihiro_matz @nari3 僕が心配してたのがまさにその問題でした。既存の拡張ライブラリとの互換性を維持しようとすると、ほとんど不可能ですね・・・。
_ko1 @_ko1
@yukihiro_matz @nari3 @mrkn rb_intern("foo") で直接やってるのは消せないけど,その他は消せる,とすればいけるんじゃないかと以前から思ってるんですが,甘いですかね.
Yukihiro Matsumoto @yukihiro_matz
@_ko1 @mrkn @nari3 私もそれで行きそうな気がしてるんですが、やってみないとダメなケースがあるかどうか判断できないですね。
( Φ _⊞) @n0kada
@_ko1 rb_str_internで作ったのを区別するということ?
Yukihiro Matsumoto @yukihiro_matz
@n0kada @_ko1 Rubyから作ったシンボルとCから作ったのを区別するんでしょうね。でRubyで文字列から作ったのをGC対象にする
Urabe, Shyouhei @shyouhei
@yukihiro_matz @n0kada @_ko1 rb_global_variableと同じ扱いでいいのでは

コメント

ログインして広告を非表示にする
ログインして広告を非表示にする