[Roma.pm] GC
Aldo Calpini
dada at perl.it
Thu Apr 3 06:24:44 CST 2003
Oha wrote:
> credevo pero' che fosse fatto meglio: alcuni esempi? :) (sapete che mi
> piace fare il professore, no?)
> - scope. quando una variabile esce di scope si verifica al volo se ha
> reference count a zero e la si distrugge
nota che la nozione di "scope" esiste solo per le variabili lexical,
ossia quelle create con my().
esempio che dimostra la refcount > 0:
my $y;
{
my $x = 42;
my $y = \$x;
print "x=$x\n";
print "y=$$y\n";
}
my $x = "Inf";
print "x=$x\n";
print "y=$$y\n";
questo stampa:
x=42
y=42
x=Inf
y=42
ossia, $x è andata out-of-scope, ma ha ancora un refcount grazie
a $y quindi il valore (42) non viene garbaggiato(?).
> - reference count periodico
questo si applica agli oggetti e al loro metodo DESTROY, per lo più.
cito da perlboot.pod:
Destruction happens automatically via Perl's garbage collection (GC)
system, which is a quick but somewhat lazy reference-based GC system.
To know what to call, Perl insists that the destructor be named DESTROY.
Perl's notion of the right time to call a destructor is not well-defined
currently, which is why your destructors should not rely on when they
are called.
> - mem-copy (si prende un oggetto base (in perl e' main::) e lo si
> copia, riportando tutti gli oggetti collegati. le "isole" non vengono
> copiate e quindi distrutte)
le variabili lexical (my) stanno in uno scratchpad locale al blocco di
compilazione, che viene distrutto all'uscita del blocco. tutte le
altre, in pratica, vivono per sempre (ma non c'è nessuna copia, stanno
in uno stash globale).
> possibile che il perl usi solo il reference count?
sembrerebbe di sì. Parrot, del resto (l'engine del Perl6 prossimo
venturo), utilizza una tecnica di tipo "mark & sweep" su cui però non
so dirti altro :-).
> e se si, dato che nessuno mi garantisce la "pulizia" del codice dei
> moduli che uso, sono obligato a usare il perl atomico anziche' come
> demone?
cosa intendi per "come demone"?
cheers,
Aldo
__END__
$_=q,just perl,,s, , another ,,s,$, hacker,,print;
More information about the Roma
mailing list