RFC: Proposal: Deterministic Object Destruction
Ned Batchelder
ned at nedbatchelder.com
Sun Mar 4 09:37:00 EST 2018
On 3/4/18 8:26 AM, Ooomzay wrote:
> On Sunday, 4 March 2018 03:16:31 UTC, Paul Rubin wrote:
>> Chris Angelico <rosuav at gmail.com> writes:
>>> Yep, cool. Now do that with all of your smart pointers being on the
>>> heap too. You are not allowed to use ANY stack objects. ANY. Got it?
>> That's both overconstraining and not even that big a problem the way you
>> phrase it.
>>
>> 1) Python has both the "with" statement and try/finally. Both of these
>> run code at the exit from a syntactically defined scope. So they are
>> like stack allocation in C++, where a deallocator can run when the scope
>> exits.
>>
>> 2) Even with no scope-based de-allocation, it's common to put smart
>> pointers into containers like lists and vectors. So you could have a
>> unique_ptr to a filestream object, and stash the unique_ptr someplace as
>> a vector element, where the vector itself could be part of some even
>> more deeply nested structure. At some point, the big structure gets
>> deleted (maybe through a manually-executed delete statement). When that
>> happens, if the nested structures are all standard containers full of
>> unique_ptrs, the top-level finalizer will end up traversing the entire
>> tree and freeing up the file handles and whatever else might be in
>> there.
>>
>> It occurs to me, maybe #2 above is closer to what the OP is really after
>> in Python.
> Yep. C++ smart pointers are a good analogue to python references for
> purposes of this PEP.
>
>> I guess it's doable, but refcounts don't seem like the right
>> way.
> Well refcounts are definitely "doable": This is how the reference python implementation, CPython, currently manages to comply with this PEP and can
> therefore be used for RAII.
>
>
Are you including cyclic references in your assertion that CPython
behaves as you want?
--Ned.
More information about the Python-list
mailing list