[Haskell-cafe] Why is Haskell so slow (comparing to Java/Scala)?
Joachim Durchholz
jo at durchholz.org
Wed Sep 20 16:38:49 UTC 2017
Am 20.09.2017 um 16:27 schrieb Станислав Черничкин:
> I've wrote simple Haskell benchmark program,
... which means that the result is not really meaningful.
Large programs have their inefficiencies in needless recomputations,
which happen as soon as no single programmer knows everything anymore
and people start reinventing the wheel.
Small programs do not need to be particularly efficient. Well, usually -
sometimes they need to be, but these cases are very rare.
In your particular case, the base cause was that your mental model of
what Haskell was doing did not match what was really happening. This
misdirected you to the wrong function and gave you surprising results.
This is not your fault. Haskell's execution model is fundamentally
different from that of most other languages, and it takes time and
experience to explore all the consequences. It is not Haskell's fault
either, either - Haskell was built to explore specifically this
execution model. My impression is that it makes Haskell's performance
somewhat less predictable, but allows you to build larger systems that
"just work" - millions of line of code, instead of the few thousands
that you get with typical imperative code.
Of course, these things become noticeable only if you (a) have worked on
software that is substantially larger than a few thousand lines of code,
and (b) at least one of these projects was in Haskell, or any other
language with good support for referentially transparent functions.
I wouldn't concentrate on getting that benchmark fast. It's too early to
get any meaningful data out of that. Essentially, while you can speed up
Haskell that way, you are going towards a more imperative style, and
you'll lose the real advantages of Haskell.
For this reason, I wouldn't pursue those monad library functions. Not
right now, anyway; they are pretty specialized, and you should have a
better reason than performance to get back to them.
If you wish to explore performance, try to make your code faster without
too much library function use. You will get more surprising results, but
you will get a better understanding of what happens.
HTH
Jo
More information about the Haskell-Cafe
mailing list