[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