From: Minero Aoki Date: 2002-09-01T15:53:24+09:00 Subject: [ruby-dev:18132] Re: autoload patch for ruby-1.7 あおきです。 In mail "[ruby-dev:18103] autoload patch for ruby-1.7" "Yoshinori K. Okuji" wrote: > [ruby-dev:16180]でトップレベル以外の定数についてもautoloadができるよう > にするパッチを拝見しました。[ruby-dev:16185]でまつもとさんが1.7系に修 > 正することを提案されてましたが、その後特に動きはないようだったので、 > > * 今日のCVS版に合わせて修正する > * バグっぽかった所を修正する > * コーディング・スタイルが一部一致していなかった所を修正する 惜しいのですが、このパッチでは不十分なんです。 Ruby レベルからの定数の参照は「外の」クラスとスーパークラスの 二方向にリストを検索しているため、variable.c と eval.c の二ヶ所に 分裂しています。なので eval.c の ev_const_get/defined も同時に 修正しないといけません。すると autoload_load とか AUTOLOAD_TARGET を extern にしないとまずいです。 > 動機を説明しておきます。私が微妙に(?)関係しているBioRubyでは、すでに > たくさんのモジュールやクラスが実装されていて、多くの場合、それらの大部 > 分を使うことはありません。しかし、現在は利便性を考慮して、全部のファイ > ルをrequireするファイルがあり、それをruby-1.6.7でロードすると、それだ > けで1秒以上の時間がかかります。 実はこの点に関しては GC の影響もあります。ファイルをロードした 後には必ず GC が起動されるので、ファイル数が増えるとロードがか なり遅くなるんです。Bison が使えるなら ruby.c の load_file() に ある rb_gc() を消してみてください。一気にロードしてもかなり速く なると思います。(ただし Bison 以外でこれをやると最悪 SEGV します) ------------------------------------------------------------------- 青木峰郎