kouさんのところで、uriのパーズ結果をシンボルとして返した場合の問題点として、 Shiroが次のように述べた。
- Shiro (2004/07/09 20:31:23 PDT): symbolで返ったほうが多少便利なのはわかるのですが、 一度internされたシンボルはgcされないので、サーバプログラムに使った場合、 外部からscheme部分をランダムに生成したuriを大量に食わされると問題となる可能性が あります。
これに対し、シンボルをgcしても問題はないのでは? という指摘が。
(eq? 'symbolA 'symbolA) => #t (gc) (eq? 'symbolA 'symbolA) => #tってしたときに最初の式のsymbolAがgcで回収されて、最後の式で新たにinternされたsymbolAが作られる。 最初のsymbolAと最後のsymbolAはeq?をとったら#fになるけど、gcされるのならどこにも束縛されていないのだからeq?に持って行きようがない。
gosh> 'a ;; (1) a gosh> (define a 123) ;; (2) 123ここで(1)はシンボルのinternはされているけど、シンボル a に対する束縛対はないよ。 (2)ではシンボル a に対する束縛対(シンボルaと値123実体への対)がトップレベル環境に 生成される。 で、 gc して良いのは intern のみの状態ってことですね。 束縛対があれば、そいつがシンボル a へのポインタを含むので gc 対象外と。cut-sea:2004/07/13 04:44:34 PDT
Tag: GC