[Warszawa-pm] Scope::Guard

Tadeusz Sośnierz tadeusz.sosnierz w onet.pl
Pią, 12 Paź 2012, 00:18:46 PDT


On Fri, 12 Oct 2012 09:09:40 +0200, Piotr Fusik <piotr w fusik.info> wrote:

> Perl nie jest tu wyjątkiem: tak samo jest w Java, C#, JavaScript.
> Wszystkie te języki mają garbage collector, którego zadaniem jest  
> zwalnianie
> pamięci w programie, ale nie kontrola zasobów takich jak otwarte pliki.

Tu nie do końca. W Perlu nie ma jednak garbage collectora, który "jak
zbierze to zbierze". Jest reference counting, i teoretycznie wychodząc ze
scope wskaźnik powinien się zmniejszać, a obiekt sam zwalniać; tak jak
robi to Gobject a za tym i np. Vala.

Ciekawostką, którą ostatnio wypatrzyłem przy okazji czytania o
Devel::SizeMe jest taki przypadek:

sub foo {
       my $var = 'a' x 100_000;
}

Pytanie, kiedy zostanie zwolniona pamięć zaalokowana na $var? Okazuje się,
że nigdy. O ile skalar $var oczywiście nie będzie już tam rezydował, o
tyle Perl i tak nie zwolni tej pamięci systemowi; będzie ją trzymał po to,
żeby przy następnym wejściu do funkcji nie alokować jej ponownie. Zabawne.

Pozdrawiam,
Tadek


Więcej informacji o liście Warszawa-pm