[Python-Dev] Update on PEP 523 and adding a co_extra field to code objects

Brett Cannon brett at python.org
Fri Sep 2 18:45:17 EDT 2016


On Fri, 2 Sep 2016 at 15:11 Chris Angelico <rosuav at gmail.com> wrote:

> On Sat, Sep 3, 2016 at 7:56 AM, Brett Cannon <brett at python.org> wrote:
> > On Fri, 2 Sep 2016 at 13:31 Dino Viehland via Python-Dev
> > <python-dev at python.org> wrote:
> >>
> >> So it looks like both list and tuple are about within 5% of using
> co_extra
> >> directly.  Using a tuple instead of a list is about a wash except for
> >> make_v2 where list is 1.4x slower for some reason (which I didn't dig
> into).
> >>
> >> I would say that using a tuple and copying the tuple on updates makes
> >> sense as we don't expect these to change very often and we don't expect
> >> collisions to happen very often.
> >
> >
> > So would making co_extra a PyTupleObject instead of PyObject alleviate
> > people's worry of a collision problem? You're going to have to hold the
> GIL
> > anyway to interact with the tuple so there won't be any race condition in
> > replacing the tuple when it's grown (or initially set).
> >
>
> I'm not following how this solves the collision problem. If you have a
> tuple, how do the two (or more) users of it know which index they're
> using? They'd need to keep track separately for each object, or else
> inefficiently search the tuple for an object of appropriate type every
> time. What am I missing here?
>

You're not missing anything, you just have to pay for the search cost,
otherwise we're back to square one here of not worrying about the case of
multiple users. I don't see how you can have multiple users of a single
struct field and yet not have to do some search of some data structure to
find the relevant object you care about. We've tried maps and dicts and
they were too slow, and we proposed not worrying about multiple users but
people didn't like the idea of either not caring or relying on some
implicit practice that  evolved around the co_extra field. Using a tuple
seems to be the best option we can come up with short of developing a
linked list which isn't that much better than a tuple if you're simply
storing PyObjects. So either we're sticking with the lack of coordination
as outlined in the PEP because you don't imagine people using a combination
of Pyjion, vmprof, and/or some debugger simultaneously, or you do and we
have to just eat the performance degradation.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20160902/692160cb/attachment-0001.html>


More information about the Python-Dev mailing list