[Python-Dev] PEP 509: Add a private version to dict
Mark Shannon
mark at hotpy.org
Wed Jan 20 16:06:01 EST 2016
On 11/01/16 16:49, Victor Stinner wrote:
> Hi,
>
> After a first round on python-ideas, here is the second version of my
> PEP. The main changes since the first version are that the dictionary
> version is no more exposed at the Python level and the field type now
> also has a size of 64-bit on 32-bit platforms.
>
> The PEP is part of a serie of 3 PEP adding an API to implement a
> static Python optimizer specializing functions with guards. The second
> PEP is currently discussed on python-ideas and I'm still working on
> the third PEP.
If anyone wants to experiment (at the C, not Python, level) with dict
versioning to optimise load-global/builtins, then you can do so without
adding a version number.
A "version" can created by splitting the dict with "make_keys_shared"
and then making the keys-object immutable by setting "dk_usable" to zero.
This means that any change to the keys will force a keys-object change,
but changes to the values will not.
For many optimisations, this is want you want.
Using this trick:
To read a global, check that the keys is the expected keys and read the
value straight out of the values array at the known index.
To read a builtins, check that the module keys is the expected keys and
thus cannot shadow the builtins, then read the builtins as above.
I don't know how much help this will be for a static optimiser, but it
could work well for a dynamic optimiser. I used this optimisation in
HotPy for optimising object attribute lookups.
Cheers,
Mark.
More information about the Python-Dev
mailing list