[#30220] schedule for Ruby 1.8.6 — "Akinori MUSHA" <knu@...>

 ruby-core を読んでいない人もいると思うので、ここでもアナウンス

20 messages 2007/01/30

[ruby-dev:30104] send optimization

From: SASADA Koichi <ko1@...>
Date: 2007-01-07 09:07:29 UTC
List: ruby-dev #30104
 ささだです。

 先日のコミットで send/__send__/__send/funcall/__send! の呼び出しを高速
化する変更をコミットしました。

 具体的には、現状 send は通常のメソッドディスパッチ処理後、send メソッ
ドの処理としてさらにメソッドディスパッチを行いますが、この「通常のメソッ
ドディスパッチ」部分をスキップして呼び出し対象のメソッドを呼び出します。

利点:
 これに伴い、send メソッドのためのフレームを作らなくていいなどの利点が
あります。

欠点:
 ただ、バックトレースに「send メソッドを呼び出した」という情報が出なく
なります。

 さて、この欠点は許容できるでしょうか。


class C
  def m
    puts caller(0)
  end
end

C.new.__send__ :m

#=>
ruby 1.9.0 (2007-01-03 patchlevel 0) [i686-linux] - matz
../trunk/test.rb:4:in `C#m'
../trunk/test.rb:8:in `BasicObject#__send__'
../trunk/test.rb:8

ruby 1.9.0 (2007-01-06 patchlevel 0) [i686-linux]
../trunk/test.rb:4:in `m'
../trunk/test.rb:8:in `<main>'

-- 
// SASADA Koichi at atdot dot net

あれ? matzruby のバックトレース表示が変わってる?

ruby 1.8.2 (2005-04-11) [i386-linux]
../trunk/test.rb:4:in `m'
../trunk/test.rb:8:in `__send__'
../trunk/test.rb:8


In This Thread

Prev Next