[mew-dist 29125] Re: cmewが例外で終わる
Kazu Yamamoto ( 山本和彦 )
kazu at example.com
2010年 2月 19日 (金) 22:20:22 JST
> dryrunなしに、さっそく試してみましたところ
> 予想に反してRuby版cmewの方が速いです。
>
> haskel版 46s
> ruby版 21s
>
> ユーザ時間もシステム時間もruby版の倍ちかくあるので、
> なにか無駄なことをやっているのかruby版が手抜きなのか...
> ZFSとの相性がわるいのか..
それは、ディレクトリのリンクカウントを参照していないからでしょう。UNIX
では、子のディレクトリがないことを、ディレクトリのリンクカウントを参照す
るだけで分かります。
Ruby 版ではディレクトリのリンクカウントを参照します。ただ、これが
Windows でちゃんと動いているのかは知りません。Haskell ではディレクトリ
のリンクカウントを調べる汎用的な方法はありません。やるとしたら、CPP を
使って、プラットフォームごとに #ifdef で区切る必要があります。
驚くべきことに、Mac のディレクトリのリンクカウントは、格納しているファ
イル数なので、上記を実装する気力が失せてしまいました。(-- xxx check
link count の部分です。)
というわけで、Mac で比べると Haskell の方が速いです。Windows でも、きっ
とそうでしょう。また、-f で実行すると UNIX でも速いと思います。
> haskellは勝手にマルチスレッドになるというわけではない?
ディスクを触るプログラムをマルチスレッドにしても、あまり効果はないでしょ
う。ロックも発生するから、逆に遅くなるかも。。。
> たしかruby版は以下のように
> 祖先はたどるが祖先の子孫は表示しないという仕様だったかと。
そうだったかも知れません。。。
--かず
Mew-dist メーリングリストの案内