From: SASADA Koichi Date: 2007-01-07T18:07:29+09:00 Subject: [ruby-dev:30104] send optimization  ささだです。  先日のコミットで 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 `
' -- // 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