jvv*_*rde 8 perl parsing memory-leaks marpa
我正在使用marpa :: r2(Marpa-R2-2.065_002)的最新版本,它似乎非常快速地吃掉所有内存.我写下了波纹管脚本来测试它.
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');
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能防止内存泄漏?
编辑:现在报告为rt.cpan的错误.
编辑:现在修复Marpa-R2 2.066000.谢谢
泄漏在CPAN上的Marpa-R2 2.065_006中得到修复.感谢您指出这一点,并感谢amon的最小例子,这节省了我的时间并使事情变得更容易.
问题最终出现在Perl代码中.两个结构相互引用 - 循环引用.使用amon的示例测试固定版本会产生随时间推移而非常平坦的内存使用情况.
我会尽快将此修复程序修复为CPAN上的索引(即非开发人员)版本.