#4342: Review containers changes ----------------------------------+----------------------------------------- Reporter: igloo | Owner: Type: bug | Status: new Priority: high | Milestone: 7.2.1 Component: libraries (other) | Version: 7.1 Keywords: | Testcase: Blockedby: | Difficulty: Os: Unknown/Multiple | Blocking: Architecture: Unknown/Multiple | Failure: None/Unknown ----------------------------------+-----------------------------------------
Comment(by simonpj): Just to summarise the current state of play on the containers front: * For the GHC 7.0 branch, we have reverted all the container patches, so the heat is off. * For the HEAD we have left all patches in. That means that T1969 and T3294 are failing. (This is allocation-bloat, not code-bloat, for reasons I don't fully understand.) It would be good to fix this as soon as poss. * I have committed a patch that allows specialising in the ''importing'' module; the commit message is below and gives more details. I think that should allow you to get the benefits of specialisation without the code bloat. * All of this only concerns performance issues. I don't know what's ongoing concerning API changes, but let's treat that as a separate matter. At the moment I think Milan is holding the token. (Is anyone else working on this?) It's not day-to-day urgent, but it is important and would be good to get it sorted. Are you ok with this Milan? Simon {{{ Thu Oct 7 04:10:51 PDT 2010 simo...@microsoft.com * Implement auto-specialisation of imported Ids This big-ish patch arranges that if an Id 'f' is * Type-class overloaded f :: Ord a => [a] -> [a] * Defined with an INLINABLE pragma {-# INLINABLE f #-} * Exported from its defining module 'D' then in any module 'U' that imports D 1. Any call of 'f' at a fixed type will generate (a) a specialised version of f in U (b) a RULE that rewrites unspecialised calls to the specialised on e.g. if the call is (f Int dOrdInt xs) then the specialiser will generate $sfInt :: [Int] -> [Int] $sfInt = <code for f, imported from D, specialised> {-# RULE forall d. f Int d = $sfInt #-} 2. In addition, you can give an explicit {-# SPECIALISE -#} pragma for the imported Id {-# SPECIALISE f :: [Bool] -> [Bool] #-} This too generates a local specialised definition, and the corresponding RULE The new RULES are exported from module 'U', so that any module importing U will see the specialised versions of 'f', and will not re-specialise them. There's a flag -fwarn-auto-orphan that warns you if the auto-generated RULES are orphan rules. It's not in -Wall, mainly to avoid lots of error messages with existing packages. Main implementation changes - A new flag on a CoreRule to say if it was auto-generated. This is persisted across interface files, so there's a small change in interface file format. - Quite a bit of fiddling with plumbing, to get the {-# SPECIALISE #-} pragmas for imported Ids. In particular, a new field tgc_imp_specs in TcGblEnv, to keep the specialise pragmas for imported Ids between the typechecker and the desugarer. - Some new code (although surprisingly little) in Specialise, to deal with calls of imported Ids M ./compiler/basicTypes/BasicTypes.lhs -1 +7 M ./compiler/coreSyn/CoreSyn.lhs -1 +5 M ./compiler/deSugar/Desugar.lhs -14 +24 M ./compiler/deSugar/DsBinds.lhs -55 +66 M ./compiler/deSugar/DsForeign.lhs -4 +4 M ./compiler/hsSyn/HsBinds.lhs -9 +9 M ./compiler/iface/BinIface.hs -2 +4 M ./compiler/iface/IfaceSyn.lhs -1 +3 M ./compiler/iface/MkIface.lhs -6 +12 M ./compiler/iface/TcIface.lhs -1 +3 M ./compiler/main/DynFlags.hs +3 M ./compiler/rename/RnBinds.lhs -62 +84 M ./compiler/rename/RnEnv.lhs -9 +14 M ./compiler/rename/RnExpr.lhs -3 +3 M ./compiler/rename/RnSource.lhs -1 +1 M ./compiler/specialise/Rules.lhs -19 +11 M ./compiler/specialise/SpecConstr.lhs -1 +2 M ./compiler/specialise/Specialise.lhs -59 +156 M ./compiler/typecheck/TcBinds.lhs -24 +66 M ./compiler/typecheck/TcClassDcl.lhs -1 +1 M ./compiler/typecheck/TcDeriv.lhs -4 +2 M ./compiler/typecheck/TcHsSyn.lhs -6 +12 M ./compiler/typecheck/TcInstDcls.lhs -10 +19 M ./compiler/typecheck/TcRnDriver.lhs -13 +16 M ./compiler/typecheck/TcRnMonad.lhs -14 +15 M ./compiler/typecheck/TcRnTypes.lhs +1 M ./compiler/utils/FiniteMap.lhs -1 +3 }}} -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4342#comment:6> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list Glasgow-haskell-bugs@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs