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.
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com