> On 18 Jun 2020, at 18:42, Jonathan Fine <jfine2...@gmail.com> wrote:
> 
> Hi Barry
> 
> Thank you for your interest in my proposal. Let me try to answer your 
> question. You wrote:
> 
> To make the code avoid COW you would need to be able to make sure that all 
> code memory blocks are not mixed in with PyObject memory blocks.
>  
> Then the ref count dance will have trigger COW for the code.
> 
> The relevant parts of my proposal are (emphasis added)
> 
> When a Python function is called, the interpreter increases the refcount of 
> its code object. At the end of the function's execution, the interpreter 
> decreases the refcount. (An example below shows this.)
>  
> **If Python were extended to take advantage of permanent code objects**, then 
> for example popular code objects could be loaded into memory in this way. 
> This can reduce memory usage (by sharing immutable resources) and reduce 
> startup time.
> 
> I wanted this to mean that if the interpreter needs access to a permanent 
> code object, it simply accesses it, without changing any reference counts. 
> For this reason, permanent code objects don't need a refcount field. And 
> without that field, there is no refcount dance.
> 
> The interpreter has privileged access to permanent code objects (just as it 
> has to its own internals, unless deliberately exposed).
> 
> However, the code that is being interpreted has no such access. To enable 
> something like
>     >>> fn.__code__.co_code
>     b'whatever-the-bytecodes-are'
> Python must have fn.__code__ return something that DOES have a refcount 
> field. It could be some sort of proxy object. Or it could be a 'transient 
> copy' of the permanent code object.
> 
> I tried to explain this in the Appendix, perhaps not well enough. I hope this 
> helps.

Did my last reply cover a possible implementation of this?

e.g. The code is nowhere near the ref-count that triggers COW.

Barry



> 
> -- 
> Jonathan

_______________________________________________
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/2MLRJURRNMXYW2IQT3OEMY4WWAWXHTKO/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to