[Python-Dev] Tackling circular dependencies in 2.0?
Greg Ward
gward@cnri.reston.va.us
Mon, 20 Sep 1999 13:53:03 -0400
> Not knowing anything much about memory
> management, would it be possible to have a sort of mixed ref count/garbage
> collection system where you only use the gc stuff as a last resort? My
> thought is that it would be useful to use gc to find and reclaim circular
> garbage.
That's *sorta* what Perl does, 'though you can still be bitten by
circular refs in a long-running process. Err, long-running thread. You
see, Perl has a mark-and-sweep garbage collector which is run only on
thread shutdown.
From the "perlobj" man page:
[code sample omitted because I'm sure many python-dev readers
automatically filter out any message that matches /[\$\@\%]\w+/
it's just a constructor that creates objects for a recursive data
structure]
If you create nodes like that, they (currently) won't go
away unless you break their self reference yourself. (In
other words, this is not to be construed as a feature, and
you shouldn't depend on it.)
Almost.
When an interpreter thread finally shuts down (usually when
your program exits), then a rather costly but complete
mark-and-sweep style of garbage collection is performed, and
everything allocated by that thread gets destroyed. This is
essential to support Perl as an embedded or a
multithreadable language. For example, this program
demonstrates Perl's two-phased garbage collection:
[more interesting code omitted]
Interesting idea, but I don't think it's what Skip had in mind.
Greg
--
Greg Ward - software developer gward@cnri.reston.va.us
Corporation for National Research Initiatives
1895 Preston White Drive voice: +1-703-620-8990
Reston, Virginia, USA 20191-5434 fax: +1-703-620-0913