wiki:Status/SLPJ-Tickets

Version 169 (modified by simonpj, 3 years ago) (diff)

--

This page collects tickets that Simon PJ is interested in, so that he remembers them

Performance

Arity

  • #3924: weak arity leads to weak strictness
  • #3698: arity analysis again
  • #3697: class method selectors
  • #3034: divInt and arity
  • #3627: profiling and eta expansion
  • #2915: arity too small
  • #2762: arity analysis would fix a space leak
  • #2902: an excellent example of the need for arity analysis
  • #2823: another arity expansion bug (related to dictionaries)
  • #2440: bad code with type families; I believe this is also arity-related
  • #2762: Arity analysis
  • #2831: error expressions and arities
  • #1547: profiling and arity

Inlining

  • #4227: SPECIALISE pragmas for functions in other modules
  • #3781: inlining for local functions: discount for scrutinising free vars
  • #3765: CONLIKE things and case expressions (need two unfoldings)
  • #3755: idea for "wrapper peeling" for join points.
  • #3586: inlining default methods
  • #3526: Inliner behaviour confusing (waiting on Bryan)
  • #3181: check unboxing regression fixed in Big INLINE Patch
  • #3073 and Commentary/Compiler/DesugaringInstances: better desugaring for instances
  • #2422: interaction of inlining and specialisation
  • #2396: default class method not inlined
  • #2354: NOINLINE pragma ignored
  • #2353: GHC inliner doesn't inline (with follow-up from Ross)
  • #2078: INLINing improvement; ask Christian.Maeder@… to see if it improves CASL
  • #2840: top level unlifted string literals
  • #3123: feature request: recursive inlining and peeling

New code generator

  • New code generator tickets
  • #4065: forward propagation
  • #3969: better loops
  • #3132: fix cgCase of PrimAlts
  • #3458, #1216: undesirable allocation of something that is nearly a let-no-escape
  • #3462: allocate large objects with allocateLocal()
  • #2253: NCG could do better. Look at this when John D’s ncg is working
  • #783: SRTs getting big
  • #2289: cheap check at start of case alternatives
  • #2731: avoiding unnecessary evaluation when unpacking constructors
  • #3940: propagate fix
  • #3969: bad code for tight loop
  • #4090: failed getRegister in asm codegen

Other performance

  • #2607: space leak: inlining defeats selector thunk optimisation
  • #4470: merge identical counters
  • #2439: Strict dictionaries
  • #3138: returning a known constructor (Lennart's cmonad package)
  • #2988: better float-in
  • #2940: do CSE after CorePrep
  • #2670: record selectors behaving badly wrt optimisation
  • #1434: Slow conversion Double to Int
  • #2132: Optimise nested comparisons: if you know x>0 then you know x>=1 etc. Maybe a special pass that knows about arithmetic?
  • #149: float-out/CSE
  • #2289, #2387, #1600: nested CPR analysis
  • #2092: Possible quadratic-sized Eq instances. Does it really go quadratic, or does the join-point inlining machinery prevent it? Still to check: delicacy wrt case-of-case
  • #2255, #3767, #2642, #3831: Improve SpecConstr for free variables, and for join points.
  • #2374: SAT and MutableByteArray Max?

Compiler performance

  • #1969: quadratic behaviour in the specialiser
  • #2346: desugaring let-bindings
  • Use wildcards for dead variables in interface files.

Tiresome arithmetic things

  • #2281: properFraction implemented with modf primitive?
  • #4101: constant folding for (**)
  • #3676: realToFrac conversions
  • #3744: comparisons against minBound and maxBound are not optimised away
  • #3065: quot is sub-optimal
  • #2269: Word type to Double or Float conversions
  • #2271: floor, ceiling, round :: Double -> Int are awesomely slow
  • #1434: slow conversion Double to Int
  • #2270: gcd specialisation

GHCi

  • #4017: unhelpful GHCi message


Outright bugs

  • #1148, #2267, #1074, #2436, #1792, (related #3082): “Unused import” warnings should be generated from RdrNames
  • #4404: wrong "defined but not used" message with RecordWildCards
  • #2182: GHCi session retains instance after removing a module from scope
  • #1241: Lifting the Coverage Condition for functional dependencies isn’t the Right Thing Manuel
  • #1954: Incorrect “defined but not used” msg

New constraint simplifier

  • #4232: main meta-ticket for the new type checker
  • #4296: SkolemOccurs
  • #4295: Higher rank and impredicative
  • #4338: superclass equalities
  • #4310: deferred equalities and forall types (needs Brent's work)
  • #816. #3108: extreme delicacy in solve order, involving fundeps
  • #1823: refinement
  • #3714: error message if associated family has excess parameters
  • #3554: assertion failure
  • #3330: type checker loops
  • #3500: recursive dictionaries
  • #3787: bad program produced
  • #4226: strange implicit-parameter behaviour
  • #4160: Type families crash in HEAD
  • #4200: don't require UndecidableInstances for equality constraints
  • #4178: unnecessary skolem escape check
  • #4179: loop in type inference
  • #4174: bad error message
  • #4093: constraint simplifier loops
  • #2296: position info for fundep message
  • #2683: muttering about boxy type ASSERT
  • #4044, #4045: these were crashes something to do with type functions when building GHC
  • #3064: performance of constraint simplifier
  • TypeFunctionsStatus
  • #3927, #4139: overlap warnings with GADTs
  • #3851: type family expansion
  • #3826: equality reasoning failure
  • #3692: bogus error message with constraint after arrow
  • #3742: implication constraints and inference
  • #3731: recursive dictionaries
  • #3738: don't float MethodInsts out of INLINE right hand sides.
  • #2256: Incomplete inference when generalising
  • #2239: Lack of improvement with type functions Manuel
  • #700: universals in pattern matching
  • #3696: better error message fr missing signature
  • #4175: better GHCi info for type-function instances
  • #4254: fundeps
  • #4259: overlapping type family instances

Types and type inference

  • #4466: explicit type application
  • #3490: superclasses and ambiguity
  • #3638: rules and rigidity for GADTs
  • #3632: better update for records with existentials
  • #1496: Newtype deriving and type families type soundness problem
  • #1897: Ambiguity: don't infer a type that can't be checked if the type is given as a signature (this one is important). See SPJ's mailbox: Haskell type system/Ambiguity.
  • #2859: optimise coercion terms
  • #2641: revise what -XExtendedDefaultRules does
  • #1634: deep skolemisation; also this one #3592
  • #3018: be lazier about solving class instances
  • #2357: Implement the Haskell Prime proposal for polymorphic pattern bindings

Impredicativity

  • #2846: polymorphism leaking into constraints
  • #2193: Bad error message with impredicative types
  • #1330: another bad error message (Church2)

Better error messages

  • #3440: type families and GADT error message
  • #3169: better occurs-check error message
  • #2648: Report out of date interface files robustly
  • #2599: Better error message for non-rigid types
  • #2588: Better error message about ‘forall’
  • #2360: Better location info in occurs-check message.
  • #1856: Better error message for mutually recursive modules
  • #1928: Confusing type error message (Claus makes suggestions)
  • #2534: Another confusing type error message
  • #2442: Better error message heuristics for “not in scope” Max B’s patch
  • #2900: Improve decomposition of function types
  • #3023: Apply fundeps before printing error

Template Haskell

Features

  • #4479: type directed name resolution (TDNR)
  • #4426: simpler rule for implicit quantification
  • #4372: better quasiquotes
  • #4359: lambda case
  • #4370: monad comprehensions
  • #4148: improvements to mdo syntax
  • #595: pattern-match overlap checking
  • #3843: Add plugins
  • #3701: Implicitly declared existentials: a class as a type
  • #3480: Fingerprints in TypeRep
  • #3217: better flag handling for GHCi
  • #788: Class aliases
  • #2806: Require bang patterns on unlifted let-bindings
  • #2600, #2110: Bind type variables and constraints in RULES
  • #1930: Infix type operators: a+b.
  • #960: Generate local info for ‘undefined’. Implicit location parameters in general
  • #2135: Warn when exporting a function whose type mentions a type constructor defined locally but not itself exported
  • #2526: Add -fwarn-missing-export-signatures
  • #2119: Explicitly importing deprecated symbols should generate deprecation warnings
  • #2116: GHCi should load as much of the module as it can
  • #2207: Load interfaces for GHC.* even without -O
  • #1231: Better deprecations

Not sure what to do about these

  • #2284: the state-hack "optimisation" causes much re-computation
  • #3872: divergence in simplifier
  • #4005: generational GC pathalogical case
  • #1349: strict function argument types