2013-07-28 14 views
8

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

+3

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

+0

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

+3

Ok, błąd zgłoszony do błędu-Marpa-R2 [at] rt.cpan.org – jvverde

Odpowiedz

5

Nieszczelność jest ustalona w Marpa-R2 2.065_006 na CPAN. Dzięki za wskazanie tego i dzięki amonowi za minimalny przykład, który zaoszczędził mi czasu i ułatwił sprawę.

Problem okazał się być w kodzie Perla. Dwie struktury posiadały odniesienia do siebie nawzajem - okólnik. Testowanie wersji stacjonarnej za pomocą przykładu Amona powoduje zużycie pamięci, która z biegiem czasu jest absolutnie płaska.

Dostarczę tę poprawkę do zindeksowanej (czyli nie deweloperskiej) wersji na CPAN tak szybko, jak to możliwe.

+0

Tak, już próbuję tego z moim kodem i działa jak urok. Dziękuję Ci! – jvverde

+1

Ta poprawka jest teraz zawarta w pełnej, indeksowanej dystrybucji CPAN: Marpa-R2 2.066000 –