[Python-ideas] Automatic context managers

MRAB python at mrabarnett.plus.com
Fri Apr 26 20:20:35 CEST 2013


On 26/04/2013 18:31, anatoly techtonik wrote:
> On Fri, Apr 26, 2013 at 6:54 PM, MRAB <python at mrabarnett.plus.com
> <mailto:python at mrabarnett.plus.com>> wrote:
>
>     On 26/04/2013 14:02, anatoly techtonik wrote:
>
>         On Thu, Apr 25, 2013 at 9:17 AM, Steven D'Aprano
>         <steve at pearwood.info <mailto:steve at pearwood.info>
>         <mailto:steve at pearwood.info <mailto:steve at pearwood.info>>> wrote:
>
>     [snip]
>
>         I am not touching destructor methods. The idea is to make with
>         statement
>         transparent - embed inside objects that require it. I am not
>         sure what
>         the implementation should be. Probably object should have an
>         ability to
>         enable context scope tracking in its constructor, to tell Python
>         to call
>         its __exit__ method at the moment when its reference count
>         reaches zero,
>         and before it is garbage collected.
>
>              On the other hand, objects being freed is not
>         deterministic. They'll
>              be freed when there are no longer any references to it,
>         which may be
>              Never.
>
>              Reference counting GCs are deterministic, but cannot deal with
>              circular references. Other GCs can deal with circular
>         references,
>              but are non-deterministic. Even the Java GC doesn't
>         guarantee that
>              the finalize() method will always be called.
>
>
>         This circular reference problem is interesting. In object space it
>         probably looks like a stellar detached from the visible (attached)
>         universe. Is the main problem in detecting it?
>
>     The problem is in knowing in which order the objects should be
>     collected.
>
>     For example, if A refers to B and B refers to A, should you collect A
>     then B, or B then A? If you collect A first, then, for a time, B will
>     be referring to a non-existent object. That's not good if the objects
>     have destructors which need to be run.
>
>
> And how does GC solve that? Can it complain about those stellars?
>
It doesn't solve that.



More information about the Python-ideas mailing list