Changes between Version 29 and Version 30 of NestedCPR


Ignore:
Timestamp:
Jan 13, 2014 10:57:07 AM (3 months ago)
Author:
nomeata
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • NestedCPR

    v29 v30  
    2323 * Do not destroy join points or improve the code genrator (see below). 
    2424 * Can we make sure more stuff gets the `Converging` flag, e.g. after a `case` of an unboxed value? Should case binders get the `Converging` flag? What about pattern match variables in strict data constructors? Unboxed values? See below. 
     25 
     26=== Motivating examples === 
     27 
     28Motivation is always good. Here I try to look at examples where people were expecting or hoping for nested CPR, and see how we are fairing: 
     29 
     30 * `facIO` in #1600: Not eligible for nested CPR, as the result is not forced. Using `return $!` makes this work. 
     31 * `mean` in #2289: Not eligible for nested CRP. The base case `go x l s | x > m      = P s l` is – to the demand analyzer – lazy in `s` and `l`, so doing nested CRP would make that stricter. It works with {{{s `seq` l `seq` P s}}}. But `P` ''is'' a strict constructor! I guess we need to make use of that, i.e. the application of a strict constructor to something possibly diverging stores this as terminating. 
     32 * #2387 works nicely! (but note that `go` uses a `!n` pattern already) 
    2533 
    2634=== Degradation exploration and explanation ===