[#30408] Ruby 1.8.6 preview2 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 preview2 をリリースしました。

20 messages 2007/02/24
[#30414] fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Hidetoshi NAGAI <nagai@...> 2007/02/25

永井@知能.九工大です.

[#30418] Re: fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Nobuyoshi Nakada <nobu@...> 2007/02/25

なかだです。

[ruby-dev:30251] Re: 質問: 関数風メソッド呼び出しのYARV命令列について

From: SASADA Koichi <ko1@...>
Date: 2007-02-03 17:28:55 UTC
List: ruby-dev #30251
 ささだです.

Yoshinori Sano wrote:
> puts("hello")のような関数風メソッド(NODE_FCALL)呼び出しの
> YARV命令列は、YARV Maniacsの説明によると、まずputselfから
> 始まるはずなのですが、現状のtrunk(r11608)ではputnilになっています。
> 
> これは、問題無いのでしょうか?

 最近変えました.send(:foo)としたとき,私は self.foo() と同じ意味だと思
うのですが,そうではない,ということで対処した結果がこれです.1.9 では,
これは foo() と同じ意味なんだそうで,それに対応するため,send() での判断
時,nilが詰まれていたら関数風メソッド呼び出し foo(),そうでなければ
recv.foo() を呼ぶ,ということになります.


> insns.defで定義されているsend命令を見ると、関数風メソッドの
> 呼び出しでは、recv = GET_SELF();でselfを取得しています。
> ここでGET_SELF()しているために、putselfではなくputnil
> でも、現状で問題無く動作しているのでしょうか?

 そうです.


> そう考えると、関数風メソッドの呼び出し時に、まずputnilする
> 意味があまり無いように思うのですが、何か設計上の意図が
> あるのでしょうか?

 あります.具体的には method_missing 対策です.また,スタックレイアウト
が異なると嫌なことがあるかもしれないので,それを避けるためでもあります.

-- 
// SASADA Koichi at atdot dot net


In This Thread