OCaml の OO は遅い(のかも)
>↑を調べるときに
>http://mono.kmc.gr.jp/~oxy/d/?date=20050404
> を発見したので今更ながらのツッコミ。
>
>なるほど見ていてびっくりの遅さですが、うーん OO は遅いのかなあと。
>
>まずこういう場合、普通の OCaml プログラマは vector 的なものにはタプルかレコードを使うでしょう。タプルを使うとこんな感じ。
>
>let size = 10000
100000000
real 0.69
user 0.67
sys 0.00
レコード版 ocamlopt
100000000
real 0.66
user 0.65
sys 0.00
C言語
100000000
real 0.59
user 0.59
sys 0.00 > >うむ、遜色ありません。 > >あーただ、 ocamlopt は謎なものをたくさんリンクしてるからか、バイナリファイルのサイズが馬鹿でかいですな。 strip しても C の20倍くらいのサイズになりました。実行ファイルのサイズを気にする人もそんなにいないだろうけど、にしてもなぜという大きさですな。 > >……MLton で試そうと思ったけど、 for ループはないらしいので公平になりそうにないし、ていうより SML が書けない体になっていることがわかったので(いまいちわからん)、やめておく。きっと大差ないと思うんだけど。 >
let _ =
let v = (2, 1)
and result ref 0 in
for i = 0 to size - 1 do
for j = 0 to size - 1 do
result := !result + fst v - snd v
done
done;
print_int !result;
print_newline()
>
100000000
real 0.69
user 0.67
sys 0.00
レコード版 ocamlopt
100000000
real 0.66
user 0.65
sys 0.00
C言語
100000000
real 0.59
user 0.59
sys 0.00 > >うむ、遜色ありません。 > >あーただ、 ocamlopt は謎なものをたくさんリンクしてるからか、バイナリファイルのサイズが馬鹿でかいですな。 strip しても C の20倍くらいのサイズになりました。実行ファイルのサイズを気にする人もそんなにいないだろうけど、にしてもなぜという大きさですな。 > >……MLton で試そうと思ったけど、 for ループはないらしいので公平になりそうにないし、ていうより SML が書けない体になっていることがわかったので(いまいちわからん)、やめておく。きっと大差ないと思うんだけど。 >
