
On Tuesday 08 November 2011, 17:16:27, Simon Marlow wrote:
most people know about 1, but I think 2 is probably less well-known. When in the edit-compile-debug cycle it really helps to have -O off, because your compiles will be so much quicker due to both factors 1 & 2.
Of course. So defaulting to -O1 would mean one has to specify -O0 in the .cabal or Makefile resp. on the command line during development, which certainly is an inconvenience.
So the default -O setting is a careful compromise, trying to hit a good compile-time/runtime tradeoff. Perhaps we're more sensitive in Haskell because -O can easily give you an order of magnitude or more speedup,
It can even make the difference between a smoothly running programme and a dying one, if one is naively using the right (wrong) constructs. So the nub of the question is, which downside is worse? My experience is limited, so I haven't sufficient data to form a reasoned opinion on that, hence I ask.
whereas in C you're likely to get a pretty consistent 30% or so. The difference between -O and -O2 is another careful tradeoff.
I suppose we should really run an up to date set of benchmarks on some real Haskell programs (i.e. not nofib) and reconsider how we set these defaults. I really doubt that we'll want to turn on -O by default, though.
I suppose there are no cheap but effective optimisations one could move to the default behaviour, or that would've been done :(