On Wed, 02 Aug 2017 03:59:53 -0700, alex.jakime...@gmail.com wrote:
> Code:
> say (1…∞).grep(* < 0)[^10]
>
>
> Given that all of the values are thrown away by grep, I expect the
> memory usage to be constant (even though the code will never finish).
> However, it seems that there's a leak somewhere.
>
> There's a lot to this, so please see IRC log:
> https://irclog.perlgeek.de/perl6-dev/2017-08-02#i_14956475
> For example, gather-take seems to be leaking as well, and in some
> cases it doesn't leak if you remove map, or if you use a range instead
> of a sequence…
Found another example without any maps or WhateverCodes that's leaking on
2017.07-87-g6d3ba60 and I'm fairly sure I tried that code a while back (to see
if `$a = Seq; for @$a` vs `$a := Seq; for $a` was caching/non-caching) and back
then memory didn't grow on this code.
my $a := 1…∞; for $a {}
And this is the same gather/take issue as binding to an infinite Seq made out
of an Iterator instead of gather/take does not leak anything:
my $a := Seq.new: class :: does Iterator { method is-lazy (-->True) {};
method pull-one { 42 } }.new; for $a {}