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

Reply via email to