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

yarv-dev:505

From: SASADA Koichi <ko1 atdot.net>
Date: Thu, 09 Jun 2005 14:37:14 +0900
Subject: [yarv-dev:505] Re: case/when optimization

  Shiro Kawai <shiro lava.net> wrote :
    [ [yarv-dev:503] Re: case/when optimization ]
    at Sat, 04 Jun 2005 19:24:53 -1000 (HST)

 ささだです。
(先のメールを書き終わった直後に受信したのでびびった)

> 実行時にハッシュテーブルのルックアップが1回入るんですよね?
> 
> 分岐が数個の時でもif 〜 elsif 〜 else  に展開するより速いのは、
> ハッシュテーブルが優秀なのかしらん。

 Ruby の比較はメソッド呼び出しになるので、そのメソッド呼び
出しのコストよりもハッシュ検索コストのほうが速い、ということ
です。多分。

case X
when A, B
when C
end

#=>

tmp = X
if A === tmp || B === tmp
  ...
elsif C === tmp
  ...
end

と展開されます。この === メソッド呼び出しが、そもそも遅い、と。


> Gaucheでもcase文の分岐 (ifの連鎖に展開される) はばかにならないところ
> なので、試してみようかな。

 十分長い case なら、効果はあるんじゃないかと思います。

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

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

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

       502 2005-06-09 11:45 [ko1 atdot.net       ] case/when optimization                  
       503 2005-06-05 14:24 ┗[shiro lava.net      ]                                       
->     505 2005-06-09 14:37  ┗[ko1 atdot.net       ]                                     
       506 2005-06-05 14:57   ┗[shiro lava.net      ]