From: Hidetoshi NAGAI Date: 2003-09-06T01:22:02+09:00 Subject: [ruby-dev:21359] Re: $SAFE=4 での autoload 永井@知能.九工大です. From: nobu.nakada@nifty.ne.jp Subject: [ruby-dev:21346] Re: $SAFE=4 での autoload Date: Thu, 4 Sep 2003 23:34:31 +0900 Message-ID: <200309041434.h84EYVRG018001@sharui.nakada.kanuma.tochigi.jp> > そうすると、requireはautoloadを呼び出したときの$SAFEで実行すべ > きでしょうか。もしそうだとすれば、今はすでにautoloadされている > 定数をさらにautoloadしようとしても何も変わりませんが、違う$SAFE > で呼ばれたときにはどっちを優先すべきなんでしょう。 autoload を呼んで対応付けをしたときの $SAFE とすべきではないかと 思うのですが,何かまずいでしょうか. autoload は「ここで require してもいいんだけど,それに含まれる機能を 使わないのならば読み込まなくても問題がないので,資源節約のためにも 必要だと言われるときまで読み込みは保留しましょう」というものだと 解釈しています. ですので,最後に autoload の対応付けがなされた時点での $SAFE で良いと 考えます. また,別メールの件になりますが, From: matz@ruby-lang.org (Yukihiro Matsumoto) Subject: [ruby-dev:21347] Re: $SAFE=4 での autoload Date: Fri, 5 Sep 2003 00:16:41 +0900 Message-ID: <1062688599.143258.32475.nullmailer@picachu.netlab.jp> > 以前、requireは$SAFE=1で実行すれば良いのだと思ったことを記憶 > しています。で、実際にそうしてたつもりなんですが、autoloadで > は動いてなかったということなんでしょうか。 については, ---< hoge.rb >----------- p $SAFE ------------------------- としたとき, ------------------------- require 'hoge.rb' ------------------------- も ------------------------- $SAFE = 2 require 'hoge.rb' ------------------------- も ------------------------- file = 'hoge.rb' $SAFE = 3 require file ------------------------- も,すべて 0 が出力されますから, $SAFE=0 で実行されているように見えます. # ruby 1.8.0 (2003-09-05) [i686-linux] での結果です. で,話は変わりますが, > @@ -6068,4 +6081,16 @@ rb_require(fname) > } > > +VALUE > +rb_require_autoload(file, klass, id) > + VALUE file, klass; > + ID id; > +{ > + PUSH_FRAME(); > + ruby_frame->last_class = klass; > + ruby_frame->last_func = id; > + rb_f_require(Qnil, file); > + POP_FRAME(); > +} > + > static void > secure_visibility(self) これの --------------------------------------- > + ruby_frame->last_func = id; --------------------------------------- の部分ですが, --------------------------------------- ruby_frame->last_func = rb_to_id(rb_str_plus(rb_str_new2("(autoload):"), rb_str_new2(rb_id2name(id)))); --------------------------------------- とするのはどうでしょうか. -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp