>Producer/Consumer Threads は文字列処理ないけど桁違い mlton:246,smlnj:178,ocaml:31
コードを読め。SML は Thread や Mutex を、このコードの中で
簡単に実装しているからだ。当然コードは膨れ上がる。OCaml には
Mutex も Thread も module としてある。それを使えば当然コードは
短くなる。

> OCamlが速いのは、言語仕様の為に?
> それとも処理系の実装の為に?

両方。関数型言語は tail recursion が仕様として義務づけられて
いたりするものもあるので、Ackermann's Function や Fibonacci Numbers
等では高得点を出しやすい。逆に、ハードウェアをフルに活用すればそれだけ
得点が出る Matrix Multiplication 等は C の方が速い。

ちなみに、OCaml は GC の為に 1bit だけ値にタグを付けているので、
引き算するときは、
sub eax, ebx
incr eax
の様なコードを吐かざるを得ないので、遅くなる。足し算は lea 命令で
一命令で頑張っているみたい。

OCaml は実装もかなり頑張っている。(それでも inline 展開がかなり保守的で、もっとやってくれても良いのに
と思うこともある)