Remove read instances from our Haskell code
authorIustin Pop <iustin@google.com>
Mon, 26 Nov 2012 11:50:08 +0000 (12:50 +0100)
committerIustin Pop <iustin@google.com>
Fri, 30 Nov 2012 13:54:04 +0000 (14:54 +0100)
commit139c06832942503c82e8b34a2f5a223a65dcc840
treeb655919a72c3ae49caa0d709af7b745b4d1437a8
parentf9556d33d972da4216f543b1cae799573ec3d0ca
Remove read instances from our Haskell code

It turns out that optimising 'read' derived instances (via -O) for
complex data types (like OpCode, or the various objects) can be slow
to very slow. Disabling such instances results in (time make
$all_our_haskell_binaries) large compile-time savings and also smaller
(unstripped) binaries (by a significant amount):

ghc 6.12:        time  htools sz  hconfd sz
  with read:    4m50s 12,244,694 14,927,928
  no read:      3m30s 10,234,305 12,536,745
ghc 7.6:
  with read:   14m45s 13,694,761 15,741,755
  no read:      3m40s 11,631,373 13,245,134

So let's remove these instances, since we never use read in production
for our custom types, and even when debugging in GHCI, we can simply
use the 'show' representation to create the types, without needing to
actually parse from strings.

Note: for the very slow ghc 7.6 compilation time, I filled a ticket
(ghc #7450), since it is surprising(ly slow).

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Michele Tartara <mtartara@google.com>
18 files changed:
htest/Test/Ganeti/Query/Language.hs
htools/Ganeti/BasicTypes.hs
htools/Ganeti/Common.hs
htools/Ganeti/Confd/Types.hs
htools/Ganeti/HTools/Cluster.hs
htools/Ganeti/HTools/Group.hs
htools/Ganeti/HTools/Instance.hs
htools/Ganeti/HTools/Loader.hs
htools/Ganeti/HTools/Node.hs
htools/Ganeti/HTools/Types.hs
htools/Ganeti/JSON.hs
htools/Ganeti/Luxi.hs
htools/Ganeti/Objects.hs
htools/Ganeti/OpParams.hs
htools/Ganeti/Query/Language.hs
htools/Ganeti/Rpc.hs
htools/Ganeti/THH.hs
htools/Ganeti/Types.hs