From: Yukihiro Matsumoto Date: 2006-09-08T23:44:40+09:00 Subject: [ruby-dev:29538] Re: symbol and string まつもと ゆきひろです In message "Re: [ruby-dev:29535] Re: symbol and string" on Fri, 8 Sep 2006 22:48:22 +0900, SASADA Koichi writes: | とりあえず感覚的に「ありえねー」と思うので,それじゃ理由になんないです |よねぇ. そうですねえ。とりあえずSmalltalkではこうなってますしね。 | Lisp なんかでは,この辺ってどうなんでしょう.eq*? な関数でシンボルが同 |じ値を返すことはあるんでしょうか. ComminLispはstring-*な関数は文字列もシンボルも受け付けますね。 | 実は,Symbol に統一するのがいいんじゃないかと思っておりました.このコ |ンテキストでは Symbol が返ってくる事をなんとなく期待しませんか? String |系のメソッドは,:sym.to_s.foo の短縮形と覚えるべきでしょうか.でも,foo |が String 系のメソッドだったっけ,と覚えるのが大変そうです. | | もし,これらの理由が「Symbol は GC しないから」ということなら,Symbol |を GC するように検討してみるのはどうでしょうか(薮蛇かも). SymbolをGCですか。できるのかな。 | 今回の変更で,SPECIAL_CONST_P(sym) == 0 になったので,なんとななるん |じゃないのかなー,と,なんとなく思っているんですが,甘いでしょうか.mark |するところがちょっと増えるだけかな,とか思ってるんですが.うーん,Symbol |にしないで ID だけ使っているものもあるので,やっぱり難しいか?  IDを取り出す時点でSymbolは作ってますから、「Symbol にしない で ID だけ使っている」ものはないんですが、IDしか保持していな いケースは結構あります。IDとSymbolのunifyを実現しないとGCは 実装できないような気がします。 そうすると、 rb_funcall(obj, '+', obj2) のようなのを全部 rb_funcall(obj, rb_intern("+"), obj2) に置き換えないといけませんねえ。 |rb_intern で作ったオブジェクトと,Symbol オブジェクトとして作ったオブ |ジェクトを分ける(前者には消さないフラグを着けておくとか)なんてどうか |な,とか思いました.とりとめもないですが. うーん、いくつかのSymbolはリザーブする手はありえるかもしれま せんねえ。