On 05/16/2012 10:36 AM, "Martin v. Löwis" wrote:
> And, we want this to somehow work with existing Python; we still
> support users on Python 2.4.
This makes the question out-of-scope for python-dev - we only discuss
new versions of Python here. Old versions cannot be developed anymore
(as they are released already).
Point taken. Sorry about that, and I appreciate your patience with me.
I guess my idea was that if some mechanism was approved for future
Python versions, we would feel easier about hacking around older Python
versions.
Of course, nothing is better than this not being a problem, as you seem
to suggest. But:
typedef struct {
unsigned long extension_id;
void *data;
} PyTypeObjectExtensionEntry;
and then a type object can (somehow!) point to an array of these. The
array is linearly scanned
It's unclear to me why you think that a linear scan is faster than
a dictionary lookup. The contrary will be the case - the dictionary
lookup (PyObject_GetAttr) will be much faster.
I've benchmarked using a PyObject* as a function-pointer-capsule using
the above mechanism; that added about 2-3 nanoseconds of overhead on
what would be a 5 nanosecond call in pure C. (There will only be 1 or 2
entries in that list...)
Dict lookups are about 18 nanoseconds for me, using interned string
objects (see below). Perhaps that can be reduced somewhat, but I highly
doubt you'll get to 3-4 nanoseconds?
Cython benchmark (which does translate do what you'd do in C):
def hammer_dict(int n):
cdef dict the_dict
a = "hello"
b = "there"
the_dict = {a : a, b : a}
for i in range(n):
the_dict[b]
Dag
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com