OCaml の OO は遅い(のかも)

This entry was posted by on Friday, 2 September, 2005
>↑を調べるときに >http://mono.kmc.gr.jp/~oxy/d/?date=20050404 > を発見したので今更ながらのツッコミ。 > >なるほど見ていてびっくりの遅さですが、うーん OO は遅いのかなあと。 > >まずこういう場合、普通の OCaml プログラマは vector 的なものにはタプルかレコードを使うでしょう。タプルを使うとこんな感じ。 > >let size = 10000

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() > >レコードなら type vector = { x : int; y : int } を宣言しておく必要があり、 v.x や v.y でアクセスできます。どっちが速いかというと、 fst 程度はインライン展開されてそうな気もするので、大差ないのかも。 > >実行してみた。 > >タプル版 ocamlopt
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 が書けない体になっていることがわかったので(いまいちわからん)、やめておく。きっと大差ないと思うんだけど。 >

Comments are closed.