[#39863] forループの速度 — Masahiro Sato <msato@...>

15 messages 2004/07/20

[#39868] イテレータとfor文 — OOTANI TAKASHI <otn@...5.so-net.ne.jp>

大谷と申します。

31 messages 2004/07/20
[#39886] Re: イテレータとfor文 — Tietew <tietew-ml-ruby-list@...> 2004/07/21

[ruby-list:39937] Re: htreeの高速化

From: Tanaka Akira <akr@...17n.org>
Date: 2004-07-26 15:38:04 UTC
List: ruby-list #39937
In article <4104DC9F.7070909@moonwolf.com>,
  MoonWolf <moonwolf@moonwolf.com> writes:

> ~:$ time ruby -e'10000000.times do :xxx===:yyy; end'
>
> real    0m6.619s
> user    0m6.468s
> sys     0m0.030s
> ~:$ time ruby -e'10000000.times do :xxx==:yyy; end'
>
> real    0m5.493s
> user    0m5.390s
> sys     0m0.031s
> ~:$
>
> ==の方が速いですね。
> 同様にcase〜whenよりif〜elsifの方が速かったです。

あぁ、なるほど。=== は == を呼び直すからですね。

とすると、これは htree で対処するよりも Ruby 自身で、Symbol#=== を定義
してしまうほうがいいと思います。そうすれば、htree 以外も高速化できます
し、また case から if/elsif に書き直したほうが速いという、コードの明瞭
さと速度のどちらかを選ばなければならないという二律排反な状況を無くせま
す。

一般にはこういう short cut を行なうと継承したときの拡張が面倒臭くなる
という問題が起こることがありますが、幸いにして Symbol は継承できない
(というか、継承してもインスタンスを生成できない) ため、そういうまずい
ことも起こらなそうです。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next