From: matz@... (Yukihiro Matsumoto) Date: 1998-09-08T15:01:40+09:00 Subject: [ruby-list:9493] profiler まつもと ゆきひろです 以前プロファイラが欲しいって方がいらっしゃいましたよね. その時には「デバッガと同じ仕組みで原理的には実現できるはずだ が,Cで記述されたメソッドの取扱いなどで現状ではまだできない」 と答えたように思うのですが,昨夜Ruby本の原稿の話の流れの都合 上やっぱりプロファイラが欲しいという結論になったので,インタ プリタそのものに手をいれて実装してみました. 残念なことに未公開の1.1d0以降でないと動かないので,まだお見 せするわけにはいかないのですが,たとえば以下のようなイメージ になります. % ruby -r profile sample/fact.rb 4 24 % cumulative self self total time seconds seconds calls ms/call ms/call name 41.31 0.01 0.00 1 4.98 7.03 Object#fact 8.11 0.00 0.00 1 0.98 1.35 main.print 6.77 0.00 0.00 5 0.16 0.16 Fixnum#> 4.69 0.00 0.00 4 0.14 0.14 Fixnum#* 4.43 0.00 0.00 4 0.13 0.13 Fixnum#- 3.08 0.00 0.00 1 0.37 0.37 Fixnum#to_s 1.44 0.00 0.00 1 0.17 0.17 String#to_i 1.38 0.00 0.00 1 0.17 0.17 Module#method_added 1.25 0.00 0.00 1 0.15 0.15 Array#[] 1.09 0.00 0.00 1 0.13 0.13 Fixnum#== 0.00 0.01 0.00 1 0.00 12.06 toplevel これはproof of conceptレベルなんで,gprofのようなcall treeを 見せてくれたりしませんが,今後の機能拡張は可能だと思います (profile.rbはたった49行).全部Rubyで書いてあるのでやや精度が 悪い上,遅いのですが. ついでに1.1d0の予告をすると * grand renaming すべてのglobal symbolにrb_またはruby_のprefix * 高速化 いくつかの部分(ブロック呼び出し,メソッド呼び出しなど)が ややチューンアップされてます. * プロファイラ 前述の通り.まだおもちゃですけど. が特長です.あと,1.1d0でだけ直ってるバグもいくつかあります. たとえばソートルーチン内での配列要素変更の禁止とか. 1.1d0のリリースはまだ未定です.1.1c5を出して1.1cシリーズが一 応安定してからになるでしょうね. まつもと ゆきひろ /:|)