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

yarv-dev:317

From: SASADA Koichi <ko1 atdot.net>
Date: Wed, 17 Nov 2004 16:21:48 +0900
Subject: [yarv-dev:317] method call eval order

 ささだです。

 メソッド呼び出しの評価順序についてずーっと考えていたのです
が(やっぱり、reciever は最後に評価したいなぁ、と)、少し思
いついたので書いてみます。

	recv.m(a, b, *c, &d)

 a, b, c, d, recv の順に評価されても、あんまりぎゃっと言う人
は居ないような気がします。というか、そんなところに依存してる
人はダメダメ。

 で、気になるのが、

	x + y

の評価順序が x.+(y) になるため y x の順に評価されるのはけしか
らん、というわけです。

 なら、2項演算子になるようなものは、特別に評価順序を変えれば
よいのではないか、と考えました。つまり、argc == 1 で、セレクタ
がそれっぽいものの評価順序は、特別に

	eval x
	eval y 
	swap     # スタックの上位2個を入れ替え
	send :+  # メソッド呼び出し

 してやればいいんじゃないかと。swap のコストは、スタックキャッ
シングの副作用で0にできますから、これでいいのかなー、と。


 ルールとして説明するときには複雑になりますが、どうでしょうか。

	recv.m(a, b, *c, &d)

 この形での評価順序は不定(引数の評価順序は左から右)、 x + y
は x y の順番、というふうにすると、ぱっとみわかりやすいかと。ど
うでしょうか。


-- 
// SASADA Koichi at atdot dot net
//




--
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  ]