[perl #131829] Weird memory leakage of sequences and other things ( (1…∞).grep(* < 0)[^10] )

2017-08-05 Thread Zoffix Znet via RT
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 {}



[perl #131829] Weird memory leakage of sequences and other things ( (1…∞).grep(* < 0)[^10] )

2017-08-02 Thread via RT
# New Ticket Created by  Aleks-Daniel Jakimenko-Aleksejev 
# Please include the string:  [perl #131829]
# in the subject line of all future correspondence about this issue. 
# https://rt.perl.org/Ticket/Display.html?id=131829 >


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…