Nick Coghlan schrieb am 31.08.2016 um 06:30:
> On 31 August 2016 at 04:55, Serhiy Storchaka wrote:
>> On 30.08.16 21:20, Antoine Pitrou wrote:
>>> But the performance overhead of iterating over a 1-element list
>>> is small enough (it's just an array access after a pointer dereference)
>>> that it may not be larger than the overhead of the multiple tests and
>>> conditional branches your example shows.
>>
>> Iterating over a tuple is even faster. It needs one pointer dereference
>> less.
> 
> That comes at the cost of making metadata additions a bit more
> complicated though - you'd have to replace the existing tuple with a
> new one that adds your own metadata, rather than just appending to a
> list.
> 
> I do think there are enough subtleties here (going from no metadata ->
> some metadata, and some metadata -> more metadata) that it makes sense
> to provide a standard API for it (excluded from the stable ABI),
> rather than expecting plugin developers to roll their own.
> 
> Strawman:
> 
>     PyObject * PyCode_GetExtra(PyCodeObject *code, PyTypeObject *extra_type);
>     int PyCode_SetExtra(PyCodeObject *code, PyObject *extra);
>     int PyCode_DelExtra(PyCodeObject *code, PyTypeObject *extra_type);
> 
> Then Brett's example code would become:
> 
>     pyjion_cache = PyCode_GetExtra(code_obj, &PyPyjion_Type);
>     if (pyjion_cache == NULL) {
>         pyjion_cache = PyPyjion_New();
>         if (PyCode_SetExtra(code_obj, pyjion_cache) < 0) {
>             /* Something went wrong, report that somehow */        }
>     }
>     /* pyjion_cache is valid here */
> 
> Making those APIs fast (for an assumed small number of simultaneously
> active interpreter plugins) and thread-safe is then an internal
> CPython implementation detail, rather than being something plugin
> writers need to concern themselves with.

Looks like a good idea. New non-trivial field, new API.

GetExtra() can be a macro that implements the "only one entry and type
pointer matches" case for speed, then call back into the list lookup for
the less common cases.

Stefan


_______________________________________________
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

Reply via email to