[Chicken-users] Strange memory leak with lazy-seq
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
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
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