"Chris Mellon" <[EMAIL PROTECTED]> writes:
>> Some people here have been arguing that all code should use "with" to
>> ensure that the files are closed. But this still wouldn't solve the
>> problem of the large data structures being left around for an
>> arbitrary amount of time.
> I don't think anyone has suggested that. Let me be clear about *my*
> position: When you need to ensure that a file has been closed by a
> certain time, you need to be explicit about it. When you don't care,
> just that it will be closed "soonish" then relying on normal object
> lifetime calls is sufficient. This is true regardless of whether
> object lifetimes are handled via refcount or via "true" garbage
> collection.
But it's *not* true at all when relying only on a "true GC"! Your
program could easily run out of file descriptors if you only have a
real garbage collector and code this way (and are opening lots of
files). This is why destructors are useless in Java -- you can't rely
on them *ever* being called. In Python, however, destructors are
quite useful due to the refcounter.
> Relying on the specific semantics of refcounting to give
> certain lifetimes is a logic error.
>
> For example:
>
> f = some_file() #maybe it's the file store for a database implementation
> f.write('a bunch of stuff')
> del f
> #insert code that assumes f is closed.
That's not a logic error if you are coding in CPython, though I agree
that in this particular case the explicit use of "with" would be
preferable due to its clarity.
|>oug
--
http://mail.python.org/mailman/listinfo/python-list