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 как можно скорее.

Другие вопросы по тегам