Regardless what one thinks of Haskell, it's a testament to the work of the GHC developers.
Still, it looks mostly like a test of the random number source. And also none of the nice high level optimizations are firing anyway, http://www.reddit.com/r/programming/comments/1ixnf6/benchmar...
To get a fair comparison without completely changing the benchmark, you should probably subtract .3-.4 seconds from each runtime as that's the amount of time spent in random number generation (again presumably all languages use libc's).
Indeed it is reimplemented: http://golang.org/src/pkg/math/rand/rng.go
Rust uses a cryptographically secure random number generator (ISAAC) by default, to try to protect users from themselves. This means that the RNG is going to be slower than non-cryptographically-secure random number generators. You can get a non-cryptographic random number generator, but you have to ask for it.
Salsa20 is parallelizable and can skip ahead arbitrarily, has smaller state, and is fast: on recent processors the amortized time per 32-bit integer is around 8 cycles. It was also thoroughly vetted as an eSTREAM cipher.
I don't know if Rust has intrinsics or some other kind of vector register support. I'd even volunteer to implement Salsa20 on it.
[1] http://bench.cr.yp.to/supercop.html
[2] https://github.com/floodyberry/supercop/blob/master/crypto_s...
[3] https://github.com/floodyberry/supercop/tree/master/crypto_s...
http://dlang.org/phobos/std_random.html
Of course, a better random number generator takes longer to compute. The blog's author switched the D version to use libc's random number generator, and got some significant speedups.
http://www.reddit.com/r/programming/comments/1ixnf6/benchmar...
http://hackage.haskell.org/packages/archive/random/1.0.1.1/d...
Go's implementation is here and doesn't use the libc generator either:
http://golang.org/src/pkg/math/rand/rng.go
Walter Bright has already commented on D.
it's mostly a test of random number generation and presumably all of those languages use libc's random number generator
In fact, that would be better than benchmarking different PRNG methods, as it's done now ;).
Anyway, I think the benchmark is still fair, since the programs use whatever the default implementation for a PRNG is in the language's standard library. Sure, the Haskell program will be faster if you'd usea MWC or MT implementation from Hackage. But you'd expect a standard library to come with a sensible default ;).
I'm hoping Rust's numbers improve. It's incredibly promising, but without C++ level performance, it's too much semantic complexity.
I'm sure these numbers will improve.
It is close, but Java is just as close, too. Not a tremendous performance advantage that someone would choose one over another for and not something I'd expect from a language marketed as "performance oriented".
The difference in performance between the languages is almost entirely due to differences in the implementation of the benchmark.
Rust has C++ level performance if you compare the same code in both languages.