[Chicken-users] Strange memory leak with lazy-seq

2015-02-23 Thread Kooda
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)))


-- 
Envoyé depuis ma GameBoy.

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


Re: [Chicken-users] Strange memory leak with lazy-seq

2015-02-23 Thread John Cowan
Kooda scripsit:

 (define (complex-stream seq)
   (lazy-map identity seq))

Lazy-map isn't lazy, so you are basically generating an eager list
processing each element, and discarding the whole mess.


-- 
John Cowan  http://www.ccil.org/~cowanco...@ccil.org
Where the wombat has walked, it will inevitably walk again.
   (even through brick walls!)

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


Re: [Chicken-users] Strange memory leak with lazy-seq

2015-02-23 Thread Alex Shinn
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