[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:325

From: MAEDA Atusi <maeda-yarv atusi.org>
Date: Fri, 19 Nov 2004 13:08:43 +0900
Subject: [yarv-dev:325] Re: method call eval order

Yukihiro Matsumoto <matz ruby-lang.org> writes:

> | メソッド呼び出しの評価順序についてずーっと考えていたのです
> |が(やっぱり、reciever は最後に評価したいなぁ、と)、少し思
> |いついたので書いてみます。
> 
> 積極的に肯定はしません。やっぱ、見かけの順序は保存してほしい
> 気持ちはあります。ただ、実装上の都合を認めないわけじゃないん
> で、どうしてもダメだとまでは言いませんです。

これは設計者の好みで決めて良いんじゃないでしょうか。

Javaはまずターゲット。次に引数を左から右。
SchemeやCは不定(順序に依存するプログラムは間違い)。
Common Lispの引数は左から右、関数が引数より先かどうかは不定(依存するプ
ログラムは間違い)。

ただ、いちおう決めておかないと依存があるようなプログラムは書けない(曖
昧なままだと、実質的に「不定」と決めたのと同じになる)と思いますけど。

ところで、receiverを最後に評価する(スタックマシンで言えば、最後に積むっ
てことですよね)ってのはそんなに速くなるもんなんでしょうか。
    invoke method_id, num_args
みたいな命令フォーマットは多分どちらにしても同じで、
  receiverがスタックトップにあるか、
  receiverがスタックトップからnum_argsワード目にあるか、
の違いだと思うんですが。それが大きい?

あと、receiverを最後に積んだ場合、* 引数や省略可能な引数の扱いがめんど
くないですか?  receiverを最初に積むなら、呼ばれた側で後ろに積み足して
やれば良いだけ、だけど。

				前田敦司

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       317 2004-11-17 16:21 [ko1 atdot.net       ] method call eval order                  
       318 2004-11-17 18:29 ┣[nobu.nokada softhome]                                       
       319 2004-11-17 18:33 ┃┗[ko1 atdot.net       ]                                     
       320 2004-11-18 17:04 ┗[matz ruby-lang.org  ]                                       
->     325 2004-11-19 13:08  ┗[maeda-yarv atusi.org]                                     
       326 2004-11-19 13:46   ┗[matz ruby-lang.org  ]                                   
       327 2004-11-19 15:30    ┗[ko1 atdot.net       ]                                 
       328 2004-11-19 23:35     ┗[maeda-yarv atusi.org]                               
       329 2004-11-19 23:56      ┗[matz ruby-lang.org  ]