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 ]