[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Much simpler leak-free implementation possible?



Hello Phil,

Thank you very much for your insights.  
 
> I encourage you to extend your proof-of-concept to a full reference
> implementation.  

Thank you for the invitation.  I'll see what I can do, if time allows.  

> Second, you will need to decide on and implement some abstraction
> that hides the underlying cps mechanism.  

Yes.  I've been thinking about that.  I have some untested ideas, but
as you noted, I'm not sure they fit well with the traditional stream API
(e.g. having to use car/cdr instead of stream-car, stream-cdr).  The
result might not be suitable for this SRFI.      

> I belive your characterization of your stream-unfold as "trivial" and
> "vastly simpler" than the one in the srfi reference implementation
> is unfair, because you solve a considerably simpler problem. 

Conceded.

> I can tell you that times3 runs to completion and correctly
> evaluates (times3 1000000) on my Windows 98 machine, using
> both MzScheme and Petite Chez Scheme, without thrashing
> the hard disk looking for memory, ...

This is also true on my machine.  However, when I try 
(times3 100000000), I do run out of memory (it is easy to see in the
performance tab of the Windows task manager that the memory consumed
increases up to >400MB, at which point it starts thrashing).  Perhaps I'm
doing something wrong.  Are you using the definition?

  (define from0 
     (let loop ((x 0))
       (stream-delay
         (stream-cons x (loop (+ x 1))))))

The CPS solution does not have the same problem on my machine.  It just
seems to run forever with pretty much flat space consumption.    

Best regards
Andre