Marpa::R2 теряет память
Я использую последнюю версию 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');
Что я могу сделать, чтобы предотвратить утечки памяти?
Изменить: теперь это сообщается как ошибка в rt.cpan.
Редактировать: это теперь исправлено в выпуске Marpa-R2 2.066000. Спасибо
1 ответ
Утечка исправлена в Marpa-R2 2.065_006 на CPAN. Спасибо за указание на это и спасибо amon за минимальный пример, который сэкономил мне время и упростил задачу.
Проблема оказалась в коде Perl. Две структуры содержат ссылки друг на друга - круговая ссылка. Тестирование фиксированной версии на примере amon приводит к тому, что использование памяти является абсолютно плоским с течением времени.
Я получу это исправление в индексированном выпуске (не для разработчиков) на CPAN как можно скорее.