[Python-Dev] PyWeakref_GetObject() borrows its reference from... whom? (original) (raw)

Guido van Rossum guido at python.org
Mon Oct 10 18:49:25 EDT 2016


On Mon, Oct 10, 2016 at 1:57 PM, Larry Hastings <larry at hastings.org> wrote:

On 10/10/2016 06:37 PM, Guido van Rossum wrote: Modified +1: you can't change the behavior of the existing API, but you can deprecate it and introduce a better one with a different name. We'll have until Python 4.0 to carry through the deprecation anyways. And I doubt this is the only C API change needed for happy gil-free coding...

First, "deprecate" won't work for these semantics for the Gilectomy branch. I simply cannot safely support the semantics of the existing function. All call sites need to change.

Oh, in the gilectomy you can fix all call sites. Even in CPython. But 3rd party extensions should not have this API removed in Python 3.7.

Second, consider that every function that returns a borrowed reference--PyDictGetItem(), PyListGetItem()--has to change too, to return an actual (non-borrowed) reference. It's going to be a major upheaval in the C API.

Yeah, this has been discussed to death in the rest of the thread.

For now I'm going to leave the names as-is and just change the semantics everywhere. If this approach really works, and if we decide we want to merge it back into trunk--and those are both still big if's--we can revisit this decision.

Changing something as subtle as this to an API sounds really bad even in an experimental branch. But it's your branch and you can do what you want (then again, why did you bring it up here? :-).

I haven't yet ruled out abandoning reference counting completely and going to 100% tracing garbage collecting,

I guess that would have its own set of pros and cons.

-- --Guido van Rossum (python.org/~guido)



More information about the Python-Dev mailing list