[#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:30268] Re: 質問: 関数風メソッド呼び出しのYARV命令列について

From: "Yoshinori Sano" <yoshinori.sano@...>
Date: 2007-02-05 16:20:49 UTC
List: ruby-dev #30268
さの よしのりです

丁寧なご返答ありがとうございます。

> > そう考えると、関数風メソッドの呼び出し時に、まずputnilする
> > 意味があまり無いように思うのですが、何か設計上の意図が
> > あるのでしょうか?
>
>  あります.具体的には method_missing 対策です.また,スタックレイアウト
> が異なると嫌なことがあるかもしれないので,それを避けるためでもあります.

了解しました。
でも、それがなぜmethod_missing 対策になるのか、まだ理解できません。。。
もう少し頑張ってコードリーディングします!


07/02/04 に SASADA Koichi<[email protected]> さんは書きました:
>  ささだです.
>
> 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
>
>
>


-- 
Yoshinori Sano <[email protected]>

In This Thread