ささだです.

(-dev の話題な気がしますが...)

石塚圭樹 wrote:
>> 現在の1.9では、トレースが必要な場合はバイトコンパイル時に専用の
>> 命令埋め込むという形で実装していますので、スクリプトをロードした
>> ときにすでにtracerがロード済みである必要があります。つまり、対象
>> スクリプトでrequireするのではなく、-rオプションなどでtracerをロー
>> ドすれば動くはずです。
> 
> そうすると, 現在の tracer の仕様は, 
> 
>  ruby -r tracer ... 
> 
> の時は, 最初からトレースし,
> 
> 途中で, require した場合は, Tracer.on した時点からトレースするという風
> になっていますが, ruby 1.9 ではこのままではそのような振る舞いはできな
> いわけですね.

 「現状の」1.9 ではそうなっています.

 この辺の話は,[ruby-core:17686] で聞いてみたのですが,「最初からト
レース命令を埋め込むべきだ」という意見はないようです.私は,最初は
オーバヘッドが気になるので「デフォルトでは埋め込まない」ような実装を
したのですが,こういう質問が増えそうなので,やはり「最初から埋め込
む」のがいいんじゃないかと思うようになってきました.でも,賛成してく
れる人は居ません.


> ところで, トレースが必要な場合はそれなりのバイトコンパイルをするとのこ
> とですが, それって, どういう風に判断しているんです? 

RubyVM::InstructionSequence.compile_option = {
  :trace_instruction => true,
}

 こんなのを実行すると,デフォルトのコンパイルオプションが trace 命
令を吐くようになります.

-- 
// SASADA Koichi at atdot dot net