On Fri, Jun 19, 2020 at 09:36:24AM +0100, Jonathan Fine wrote:

> What I did not say explicitly, or not clearly enough, was that the previous
> use would continue unchanged. The only change would be that a function
> object would have a flag, which would tell the interpreter whether the
> associated code object was transient or permanent. (This, as I recall, I
> did mention in my original post.)

Who sets the flag?

If user code can set the flag, then users can maliciously or 
accidentally set the flag on code objects which should be garbage 
collected, causing a memory leak, or clear the flag on code objects 
which should not be garbage collected, potentially causing a segfault.

I think that if anyone is imagining a process where the interpreter does 
something like this:

    # this happens on every single reference to any object
    if type(obj) is a code object and flag is set:
        pass
    else:
        increment the reference count

(and similar for decrements) the cost of checking the type and/or flag 
is going to be significant. According to issue 40255, a similar 
experiment lead to a 10% slowdown.

https://bugs.python.org/issue40255

There are more practical ways to implement immortal objects. I don't 
know what they are :-) but they must exist because Python had them 
before (and maybe still does?) and people keep experimenting with them.



-- 
Steven
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/EIU6NZPHF5CDJV64YAKLQZTB5SXMLUU7/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to