ささだです.

 質問なのですが,このコミットのターゲット(目的,環境)は何でしょうか.

 yugui さんから dtrace 対応をする,という話は IRC などで伺ってお
り,ChangeLog にも dtrace という言葉が入っています.なので,dtrace が対
応している環境だけで,何か dtrace 関連の嬉しいことが入るのかなと思ってい
ました.

 ただ,パッチを見ていると,trace.h,prove.rb など,ファイル名はとても一
般的なものに見えます.ruby.h もなんか色々変わっているようです.

 この辺の狙いを教えて頂けないでしょうか.変更をあんまり読めていないので
すが,そもそも,Ruby のトレースまわりを全部書き換えちゃったりするんで
しょうか.

 ちなみに,Solaris,MacOSX 以外に dtrace がサポートしている環境を知らな
いので,もしよかったら,このパッチが影響する環境も教えて頂けないでしょうか.

 あと,出来ればベンチマーク結果があると嬉しいかも(prove を刺さない状態
での).

 質問だらけで恐縮です.

-------- Original Message --------
Subject: [ruby-cvs:33451] Ruby:r26235 (trunk): * trace.h: new file.
wraps tracing mechanisms.
Date: Mon, 4 Jan 2010 00:36:21 +0900 (JST)
From: yugui / ruby-lang.org
Reply-To: ruby-dev / ruby-lang.org
To: ruby-cvs / ruby-lang.org

yugui	2010-01-04 00:36:17 +0900 (Mon, 04 Jan 2010)

  New Revision: 26235

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26235

  Log:
    * trace.h: new file. wraps tracing mechanisms.

    * defs/dtrace.d: new file. defined a dtrace provider "ruby".

    * include/ruby/ruby.h (LIKELY): moved from vm.c.
      (UNLIKELY): ditto.
      (OBJSETUP): probe "object-create".
      (RUBY_EVENT_RESCUE): new event.

    * vm_exec.c (DEBUG_ENTER_INSN): embeded a probe insn-entry into it.
      (DEBUG_END_INSN): insn-return.

    * vm.c (LIKELY): moved into ruby.h.
      (UNLIKELY): ditto.
      (Init_BareVM): embeded a probe "raise" into it.

    * variable.c (rb_class2name_without_alloc): new utility function.

    * tool/rbinstall.rb (install?(:ext, :arch, :'ext-arch')): installs
      dtrace.d if necessary.

    * thread_pthread.c (add_signal_thread_list): probe "raise".
      (rb_thread_create_timer_thread): ditto.

    * thread.c (rb_thread_schedule_rec): probes "thread-enter" and
      "thread-leave",
      (thread_start_func_2): ditto.
      (thread_cleanup_func): probe "thread-term"

    * lib/mkmf.rb: supports dtrace postprocessor on making an extension.

    * iseq.c (rb_vm_insn_name): new utility function.
      (rb_vm_insn_len): ditto.

    * insns.def (hook): probes "method-etnry", "method-return", "line",
      and "rescue".

    * compile.c (iseq_compile_each): adds a trace op for "rescue" probe.

    * gc.c (garbage_collect): probes "gc-begin" and "gc-end".
      (obj_free): probe "object-free"
      (garbage_collect_with_gvl): probe "raise"
      (negative_size_allocation_error): ditto.
      (rb_memerror): ditto.

    * eval.c (rb_rescue2): probe "rescue"
      (rb_longjmp): probe "raise"

    * ext/probe/probe.c: new extension for application defined probes.

    * ext/probe/extconf.rb: ditto.

    * configure.in (--with-tracing-model): new option to choose a tracing
      mechanism.
      (DTRACE): new substitution. name of dtrace(1).
      (RUBY_TRACING_MODEL): new substitution.
      (DTRACE_OBJ): ditto.
      (MINIDTRACE_OBJ): ditto.
      (GOLFDTRACE_OBJ): ditto.
      (LIBRUBY_DTRACE_OBJ): ditto.
      (RUBY_DTRACE_POSTPROCESS): new macro. checks whether the dtrace on
      the system needs postprocessing.
      (RUBY_DTRACE_BSD_BROKEN): new macro. checks whether the dtrace
      supports USDT.

    * Makefile.in:
      (DTRACE): new variable. name of dtrace(1).
      (TRACING_MODEL): new variable. name of the chosen tracing mechanism.
      (DTRACE_OBJ): same as the one in configure.in.
      (MINIDTRACE_OBJ): ditto.
      (GOLFDTRACE_OBJ): ditto.
      (LIBRUBY_DTRACE_OBJ): ditto.
      (CPPOUTFILE): new substitution. necessary for generating dtrace.d
      (trace_none.h): new target for TRACING_MODEL=none
      (RUBY_H_INCLUDES): appended a header for tracing.
      (distclean-local): also removes preprocessed version of dtrace.d
      ($(LIBRUBY_A)): needs $(LIBRUBY_DTRACE_OBJ) if dtrace needs
      postprocessing.
      ($(PROGRAM)): ditto.
      (golf): ditto.
      (miniruby): ditto.
      ($(arch_hdrdir)/ruby/dtrace.d): new target. preprocessed verson
      of defs/dtrace.d. generated if necessary.
      ($(arch_hdrdir)/ruby/trace_dtrace.h): new target.
      definition of probes.
      ($(LIBRUBY_DTRACE_OBJ)): new target. generated if dtrace needs
      postprocessing.
      ($(DTRACE_OBJ)): ditto.
      ($(MINIDTRACE_OBJ)): ditto.
      ($(GOLFDTRACE_OBJ)): ditto.

  Added directories:
    trunk/ext/probe/
  Added files:
    trunk/defs/dtrace.d
    trunk/ext/probe/extconf.rb
    trunk/ext/probe/probe.c
    trunk/include/ruby/trace.h
  Modified files:
    trunk/ChangeLog
    trunk/Makefile.in
    trunk/NEWS
    trunk/common.mk
    trunk/compile.c
    trunk/configure.in
    trunk/eval.c
    trunk/gc.c
    trunk/include/ruby/ruby.h
    trunk/insns.def
    trunk/iseq.c
    trunk/lib/mkmf.rb
    trunk/thread.c
    trunk/thread_pthread.c
    trunk/tool/rbinstall.rb
    trunk/variable.c
    trunk/vm.c
    trunk/vm_core.h
    trunk/vm_exec.h