On Mon, Feb 23, 2015 at 9:57 PM, Kooda <ko...@upyum.com> wrote:

> Hi!
>
> I’ve been playing with lazy-seq for the past few days and found a very
> strange behaviour:
>
> The heap of the following program keeps growing rapidly in csi, running
> the same program after compilation seems to slow down the growth quite a
> lot but the heap isn’t constant as I was expecting it to be.
>
> Here is a test case of the problem:
>
>
> ; Start this script with `csi -:D -:hi100k -:hg101` to observe heap
> resizing
>
> (use lazy-seq)
>
> (define (complex-stream seq)
>   (lazy-map identity seq))
>
> ; This seems to leak:
> (lazy-each void (complex-stream (lazy-numbers)))
>
>
> ; This doesn't:
> #;(lazy-each void (lazy-map identity
>                           (lazy-numbers)))
>


You may be falling short of the issue described by SRFI 45,
which is that in all known Scheme implementations:

  (define (loop) (delay (force (loop))))
  (force (loop))

leaks memory.  In R7RS this becomes

  (define (loop) (delay-force (loop)))

which is required by the standard not to leak.

I'm not sure why you don't observe a leak in the
second example.

-- 
Alex
_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to