Python vs Java garbage collection?

Beni Cherniavsky cben at techunix.technion.ac.il
Mon Jan 6 13:50:24 EST 2003


On 2002-12-28, Stuart D. Gathman wrote:

> On Thu, 26 Dec 2002 15:28:35 -0500, Antonio Cuni wrote:
>
> > I'd like if python had a feature comparable to C++'s deterministic
> > destructors; something like the following (invented syntax):
> >
> > def foo():
> >   auto mymutex = acquire_mutex()
> >   auto myfile = open(filename, 'w')
> >   auto mysocket = open_socket()
> >   do_stuff
> >
> > I presume it's not easy to assure that "auto" variables can be destroyed
> > at the end of the function: e.g., what if objects bound to auto
> > variables have refcount > 1 ?
>
I was lately thinking along similar lines.  For Jython and for any
resource release, one must indicate explicitly when to destroy the object.
Whatever syntax you use, you still define a predictable place where the
object is destroyed.  No way around it.  So I don't think one should be
troubled by remaining references to the object - if the programmer chose
to end the object's life, he should realise that that's what he's doing.

> 1) This feature should not reclaim memory, only call __del__().If
> references were still live, the effect would be the same as calling
> __del__() on a live object.
>
> 2) __del__() would get called again when memory is actually reclaimed.
> Therefore, your feature would be much safer if it called another special
> function - say close() or dispose() at the end of the block.
>
I think this is a technical question: is it possible in CPython and Jython
to mutate an existing object's class, to mark it as dead?  If yes, then a
facility to explicitly force a __del__ if any (and fry the object so it
can't be used any more) would be a solution for writing portable code:

x = acquire()
try:
    do_something(x)
finally:
    finalize(x)

This would manualy guarantee a timely __del__.  If frying the object to
prevent the double __del__ is a problem, __del__ must be given up for
such cases and a new attribute should be agreed upon.

-- 
Beni Cherniavsky <cben at tx.technion.ac.il>






More information about the Python-list mailing list