Hello
I've noticed that gambc40b14 and gambc40b15 don't collect memory while evaluating this statement in the repl (this is using chjmodule -- ask me if you want a smaller test case):
(build-recursively/import 'cj-stream) (stream-length (stream-iota))
*** ERROR IN ##cons -- Heap overflow 1>
stream-iota creates an infinite lazily evaluated list, so the above is of course essentially an endless loop. Since the head of the stream is not stored anywhere, I expected it to be garbage collected. In fact, the following all work as expected:
(define (f) (stream-length (stream-iota))) (f)
;;runs forever
(time (stream-length (stream-iota)))
;;runs forever
I don't know whether the behaviour of the first case might lead to a problem relevant in practice. Note that leaving the exception handler and running (##gc) still reclaims the space allocated in that case.
Christian.
Afficher les réponses par date