Skip to content
  • Iustin Pop's avatar
    Remove read instances from our Haskell code · 139c0683
    Iustin Pop authored
    
    
    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: default avatarIustin Pop <iustin@google.com>
    Reviewed-by: default avatarMichele Tartara <mtartara@google.com>
    139c0683