[#12164] patch for ext/gdbm — Koji Arai <JCA02266@...>

新井です。

24 messages 2001/02/04
[#12168] Re: patch for ext/gdbm — matz@... (Yukihiro Matsumoto) 2001/02/05

まつもと ゆきひろです

[#12176] Re: patch for ext/gdbm — Koji Arai <JCA02266@...> 2001/02/05

新井です。

[#12179] Re: patch for ext/gdbm — matz@... (Yukihiro Matsumoto) 2001/02/06

まつもと ゆきひろです

[#12219] Re: patch for ext/gdbm — Koji Arai <JCA02266@...> 2001/02/12

新井です。

[#12220] Re: patch for ext/gdbm — Koji Arai <JCA02266@...> 2001/02/12

新井です。

[#12256] set_trace_func — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

15 messages 2001/02/17

[#12293] crash on proc without a block — Kenichi Komiya <kom@...1.accsnet.ne.jp>

15 messages 2001/02/25

[#12323] Re: [ruby-list:28364] class definition extension — "K.Kosako" <kosako@...>

ruby-listから移動しました。

13 messages 2001/02/28
[#12324] Re: [ruby-list:28364] class definition extension — matz@... (Yukihiro Matsumoto) 2001/02/28

まつもと ゆきひろです

[ruby-dev:12262] Re: set_trace_func

From: Kenichi Komiya <kom@...1.accsnet.ne.jp>
Date: 2001-02-17 16:36:05 UTC
List: ruby-dev #12262
小宮です。

From: matz@zetabits.com (Yukihiro Matsumoto)
Subject: [ruby-dev:12258] Re: set_trace_func
Date: Sat, 17 Feb 2001 23:05:09 +0900

> まつもと ゆきひろです
> 
> In message "[ruby-dev:12256] set_trace_func"
>     on 01/02/17, Keiju ISHITSUKA <keiju@ishitsuka.com> writes:
> 
> |set_trace_funcについてのリクエストです.
> |
> |その1)
> |
> |set_trace_func proc{|event, file, line, id, binding, klass|
> |
> |で Foo#foo と Foo.foo が呼ばれたとき, `call'eventが発生するのですが, 両
> |方とも
> |
> |  klass == Foo
> |
> |となりどっちが呼ばれているのか簡単にわかりません. 
> 
> ちょっと考えてみましょう。どうするのが良いのか簡単には判断で
> きません。

一つの案ですが、set_tracerという新しいインタフェースを作るのはどう
でしょうか?Procのかわりにトレースを行う専用のオブジェクトを指定す
るというものです。

イメージとしては

  class MyTracer < RubyTraccer
    def handle_call
      dot = singleton? ? '.' : '#'
      puts get_class + dot + get_method_name + " is called"
    end
  end

  set_tracer(MyTracer.new)

という感じで使用するものです。

singleton?、get_class、get_method_name等はRubyTracerで定義されてい
て、イベントのコンテキストに関する情報を引出すことができるようになっ
ているものとします。

handle_<イベント名>の定義されていないイベントに関しては、無視され
ます。(イベント名の - は _ で置き換える)

狙いとしては

  1 procの中で自分でイベントをディスパッチするより記述しやすい

  2 不要なパラメータの生成を極力避ける(必要なものだけ選んで作れる
    ようにしたい。
  
  3 興味のないイベントによるオーバヘッドを下げたい(計ってみた感じ
    ではあまり効果がなさそうでしたが)。

  4 拡張が容易(singletonかどうか等)

というのがあります。

去年の末ごろに、profilerの拡張モジュールを書いていたときに、
call_trace_func()が原因で起きるGCとbindingオブジェクトの生成が実行
時間の半分くらいを占めているのに気付きこの様なインタフェースを考え
ました。

「1.7が始まったら提案してみよう」と思っていたのですが、肝心の
profilerの方が止ってしまってすっかり忘れていました。

小宮 健一

In This Thread