Should GHC default to -O1 ?

Simon Marlow marlowsd at
Tue Nov 8 17:16:27 CET 2011

On 08/11/2011 14:31, Daniel Fischer wrote:
> On the haskell-cafe as well as the beginners mailing lists, there
> frequently (for some value of frequent) are posts where the author inquires
> about a badly performing programme, in the form of stack overflows, space
> leaks or slowness.
> Often this is because they compiled their programme without optimisations,
> simply recompiling with -O or -O2 yields a decently performing programme.
> So I wonder, should ghc compile with -O1 by default?
> What would be the downsides?

I understand the problem.  However, -O has a couple of serious downsides:

   1. it costs about 2x compile time and memory usage

   2. it forces a lot more recompilation to happen after changes,
      due to inter-module optimisations.

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.

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, 
whereas in C you're likely to get a pretty consistent 30% or so.  The 
difference between -O and -O2 is another careful tradeoff.

Also bear in mind that using GHCi gives you another 2x speedup in 
compilation (approx), but 30x slowdown in runtime (varies wildly from 
program to program though).  And subsequent recompiles are much faster 
because GHCi has cached a lot of interfaces.

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.


More information about the Glasgow-haskell-users mailing list