perl - Marpa:: R2 pierde memoria
parsing memory-leaks (1)
La fuga se corrigió en Marpa-R2 2.065_006 en CPAN. Gracias por señalar esto y gracias a amon por el ejemplo mínimo, que me ahorró tiempo y facilitó las cosas.
El problema resultó ser el código de Perl. Dos estructuras tenían referencias entre sí: una referencia circular. Probar la versión fija con el ejemplo de amon produce un uso de memoria absolutamente plano a lo largo del tiempo.
Conseguiré esta solución en una versión indexada (que no sea de desarrollador) en CPAN lo antes posible.
Estoy utilizando la última versión de marpa :: r2 (Marpa-R2-2.065_002) y parece que se come toda la memoria muy rápido. Escribí el guión abajo para probarlo.
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'');
¿Qué puedo hacer para evitar fugas de memoria?
Editar: ahora se informa como un error en rt.cpan .
Editar: ahora está arreglado en el lanzamiento Marpa-R2 2.066000. Gracias