[commit: ghc] master: Custom `Typeable` solver, that keeps track of kinds. (b359c88)

git at git.haskell.org git at git.haskell.org
Sat Mar 7 16:38:49 UTC 2015


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/b359c886cd7578ed083bcedcea05d315ecaeeb54/ghc

>---------------------------------------------------------------

commit b359c886cd7578ed083bcedcea05d315ecaeeb54
Author: Iavor S. Diatchki <diatchki at galois.com>
Date:   Sat Mar 7 10:37:31 2015 -0600

    Custom `Typeable` solver, that keeps track of kinds.
    
    Summary:
    This implements the new `Typeable` solver: when GHC sees `Typeable` constraints
    it solves them on the spot.
    
    The current implementation creates `TyCon` representations on the spot.
    
    Pro: No overhead at all in code that does not use `Typeable`
    Cons: Code that uses `Typeable` may create multipe `TyCon` represntations.
    
    We have discussed an implementation where representations of `TyCons` are
    computed once, in the module, where a datatype is declared.  This would
    lead to more code being generated:  for a promotable datatype we need to
    generate `2 + number_of_data_cons` type-constructro representations,
    and we have to do that for all programs, even ones that do not intend to
    use typeable.
    
    I added code to emit warning whenevar `deriving Typeable` is encountered---
    the idea being that this is not needed anymore, and shold be fixed.
    
    Also, we allow `instance Typeable T` in .hs-boot files, but they result
    in a warning, and are ignored.  This last one was to avoid breaking exisitng
    code, and should become an error, eventually.
    
    Test Plan:
    1. GHC can compile itself.
    2. I compiled a number of large libraries, including `lens`.
        - I had to make some small changes:
          `unordered-containers` uses internals of `TypeReps`, so I had to do a 1 line fix
        - `lens` needed one instance changed, due to a poly-kinded `Typeble` instance
    
    3. I also run some code that uses `syb` to traverse a largish datastrucutre.
    I didn't notice any signifiant performance difference between the 7.8.3 version,
    and this implementation.
    
    Reviewers: simonpj, simonmar, austin, hvr
    
    Reviewed By: austin, hvr
    
    Subscribers: thomie
    
    Differential Revision: https://phabricator.haskell.org/D652
    
    GHC Trac Issues: #9858


>---------------------------------------------------------------

b359c886cd7578ed083bcedcea05d315ecaeeb54
 compiler/basicTypes/MkId.hs                        |   1 +
 compiler/deSugar/DsBinds.hs                        | 128 +++++++++-
 compiler/main/DynFlags.hs                          |   2 +
 compiler/prelude/PrelNames.hs                      |  44 +++-
 compiler/typecheck/TcDeriv.hs                      | 230 +++++++-----------
 compiler/typecheck/TcEvidence.hs                   |  35 +++
 compiler/typecheck/TcGenDeriv.hs                   |  52 -----
 compiler/typecheck/TcHsSyn.hs                      |  14 ++
 compiler/typecheck/TcInstDcls.hs                   |  47 ++--
 compiler/typecheck/TcInteract.hs                   |  65 +++++-
 docs/users_guide/flags.xml                         |  19 +-
 docs/users_guide/glasgow_exts.xml                  |  53 +++--
 libraries/base/Data/Data.hs                        |   2 +-
 libraries/base/Data/Typeable/Internal.hs           | 260 ++++-----------------
 .../tests/annotations/should_fail/annfail10.stderr |   5 +-
 testsuite/tests/deriving/should_compile/all.T      |   2 +-
 testsuite/tests/deriving/should_fail/T2604.hs      |   9 -
 testsuite/tests/deriving/should_fail/T2604.stderr  |  10 -
 testsuite/tests/deriving/should_fail/T5863a.hs     |  12 -
 testsuite/tests/deriving/should_fail/T5863a.stderr |  10 -
 testsuite/tests/deriving/should_fail/T7800.hs      |   7 -
 testsuite/tests/deriving/should_fail/T7800.stderr  |   6 -
 testsuite/tests/deriving/should_fail/T7800a.hs     |   4 -
 testsuite/tests/deriving/should_fail/T9687.stderr  |   4 +-
 testsuite/tests/deriving/should_fail/all.T         |   6 +-
 .../tests/ghci.debugger/scripts/print019.stderr    |  12 +-
 testsuite/tests/polykinds/T8132.stderr             |   4 +-
 testsuite/tests/typecheck/should_compile/T9999.hs  |  13 --
 testsuite/tests/typecheck/should_compile/all.T     |   1 -
 .../should_fail/TcStaticPointersFail02.stderr      |   2 +-
 testsuite/tests/typecheck/should_fail/all.T        |   1 +
 31 files changed, 499 insertions(+), 561 deletions(-)

Diff suppressed because of size. To see it, use:

    git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc b359c886cd7578ed083bcedcea05d315ecaeeb54


More information about the ghc-commits mailing list