Używam najnowszego wydania marpa :: r2 (Marpa-R2-2.065_002) i wydaje się, że bardzo szybko je wszystkie pamięci. Napisałem poniższy skrypt, żeby go przetestować.Marpa :: Pamięć wycieków R2
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');
Co mogę zrobić, aby zapobiec wyciekom pamięci?
Edytuj: Zostało to zgłoszone jako błąd do rt.cpan.
Edytuj: Jest teraz ustalony na wydaniu Marpa-R2 2.066000. Dzięki
potwierdzona z moim Marpa v2.064 na perl5 v16.3. Minimalny kod do odtworzenia: 'perl -MMarpa :: R2 -e '* M :: = * Marpa :: R2 :: Scanless ::; my $ g = M :: G-> new ({source => \ q (: start :: = A A :: = [])}); M :: R-> new ({gramatyka => $ g}) dla 1 .. 1E5''. Czy masz już zgłoszony błąd? – amon
Złożyłeś błąd? Przepraszam, jestem nowy w tych rzeczach. Gdzie powinienem to zrobić? Dzięki za twoje potwierdzenie i minimalny kod – jvverde
Ok, błąd zgłoszony do błędu-Marpa-R2 [at] rt.cpan.org – jvverde