Changes between Version 58 and Version 59 of Supercompilation


Ignore:
Timestamp:
Nov 21, 2009 4:11:19 AM (4 years ago)
Author:
pejo
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Supercompilation

    v58 v59  
    1313== Shortcomings of the prototype ==  
    1414 
    15  * Use a state monad 
    1615 * Uses eager substitution 
    17  * Divide by zero 
    1816 * Homeomorphic embedding for types?  Currently all types are regarded as equal (like literals).  Decision: leave it this way for now. 
    1917 * Msg does not respect alpha-equivalence.  If we match lambda against lambdas, and the binders differ, we say "different".  Decision: deal with alpha-equiv in msg when we have the new alg working. 
    20  * Inlining `unsafePerformIO` 
     18 * Inlining `unsafePerformIO` and other NOINLINE things. 
    2119 * Adding constraint info 
    2220   * case (x>y)of { ....case (x>y) of ... } 
     
    2523 * case var subst 
    2624 * strictness annotations 
    27  * Extend homemb. 
    2825 
    2926 
     
    8986     * (Given no cycle in imports) Perhaps the things we can not inline should be put at the top level in the same module, and the old module discarded? 
    9087 
    91  * Can we improve the homeomorphic embedding so that append xs xs is not embedded in append xs ys? 
     88 * Can we improve the homeomorphic embedding so that append xs xs is not embedded in append xs ys? '''Done''' 
    9289 
    9390 * http://hackage.haskell.org/trac/ghc/ticket/2598 
     
    9996 
    10097What next? '''Implement the new algorithm.''' 
    101  
    102  * Exposing all unfoldings: 
    103    * Flag -fexpose-all-unfoldings (a cousin of -fomit-interface-pragmas) (default is off) to switch on the spit-out-all-unfoldings stuff. 
    104    * Validate with flag off; then push. 
    105  * Add IO monad;  
    10698 * Figure out arity for each top-level (lambda lifted) function, and only inline when it is saturated.  (Write notes in paper, explaining why this might be good.)  NB: linearity becomes simpler, because a variable cannot occur under a lambda. 
    107   * Neil's msg idea 
     99  * Neil's msg idea; Will not help as much in practice since we are guaranteed to have the same head 
    108100 
    109101Later 
     
    116108 
    117109Done 
     110 * Exposing all unfoldings: 
     111   * Flag -fexpose-all-unfoldings (a cousin of -fomit-interface-pragmas) (default is off) to switch on the spit-out-all-unfoldings stuff. 
     112   * Validate with flag off; then push. 
     113 * Add IO monad;  
    118114 * Faster representation for memo table; a finite map driven by the head function  
    119115 * Refined whistle-blowing test