On Wed, Jan 20, 2016 at 7:22 PM, Brett Cannon <br...@python.org> wrote: > > > On Wed, 20 Jan 2016 at 10:11 Yury Selivanov <yselivanov...@gmail.com> wrote: >> >> On 2016-01-18 5:43 PM, Victor Stinner wrote: >> > Is someone opposed to this PEP 509? >> > >> > The main complain was the change on the public Python API, but the PEP >> > doesn't change the Python API anymore. >> > >> > I'm not aware of any remaining issue on this PEP. >> >> Victor, >> >> I've been experimenting with the PEP to implement a per-opcode >> cache in ceval loop (I'll share my progress on that in a few >> days). This allows to significantly speedup LOAD_GLOBAL and >> LOAD_METHOD opcodes, to the point, where they don't require >> any dict lookups at all. Some macro-benchmarks (such as >> chameleon_v2) demonstrate impressive ~10% performance boost. > > > Ooh, now my brain is trying to figure out the design of the cache. :) > >> >> >> I rely on your dict->ma_version to implement cache invalidation. >> >> However, besides guarding against version change, I also want >> to guard against the dict being swapped for another dict, to >> avoid situations like this: >> >> >> def foo(): >> print(bar) >> >> exec(foo.__code__, {'bar': 1}, {}) >> exec(foo.__code__, {'bar': 2}, {}) >> >> >> What I propose is to add a pointer "ma_extra" (same 64bits), >> which will be set to NULL for most dict instances (instead of >> ma_version). "ma_extra" can then point to a struct that has a >> globally unique dict ID (uint64), and a version tag (unit64). >> A macro like PyDict_GET_ID and PyDict_GET_VERSION could then >> efficiently fetch the version/unique ID of the dict for guards. >> >> "ma_extra" would also make it easier for us to extend dicts >> in the future. > > > Why can't you simply use the id of the dict object as the globally unique > dict ID? It's already globally unique amongst all Python objects which makes > it inherently unique amongst dicts. > > _______________________________________________ > 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/fijall%40gmail.com >
Brett, you need two things - the ID of the dict and the version tag. What we do in pypy is we have a small object (called, surprisingly, VersionTag()) and we use the ID of that. That way you can change the version id of an existing dict and have only one field. _______________________________________________ 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