I am using latest release of marpa::r2 (Marpa-R2-2.065_002) and it seems to eat all memory very fast. I wrote the bellow script to test it.
use strict;
use warnings FATAL => 'all';
use Marpa::R2;
use Data::Dumper;
my $grammar = Marpa::R2::Scanless::G->new({
action_object => __PACKAGE__,
source => \(<<'END_OF_SOURCE'),
:default ::= action => ::array
:start ::= path
path ::=
step action => _do_step
step ~ [a-z]+
END_OF_SOURCE
});
sub _do_step{ return {step => $_[1]}};
sub new {} #The Marpa::R2 needs it
sub compile{
my ($query) = @_;
return undef unless $query;
my $reader = Marpa::R2::Scanless::R->new({
grammar => $grammar,
trace_terminals => 0,
});
$reader->read(\$query);
print Dumper $reader->value;
}
compile($_) foreach ('aaaa'..'zzzz');
What can I do to prevent the memory leaks?
Edit: This is now reported as a bug to rt.cpan.
Edit: It is now fixed on release Marpa-R2 2.066000. Thanks
The leak is fixed in Marpa-R2 2.065_006 on CPAN. Thanks for pointing this out and thanks to amon for the minimal example, which saved me time and made things easier.
The problem turned out to be in the Perl code. Two structures held references to each other -- a circular reference. Testing the fixed version with amon's example produces memory use that is absolutely flat over time.
I'll get this fix into an indexed (that is non-developer's) release on CPAN as soon as possible.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With