On May 26, 2009, at 3:44 PM, Lisandro Dalcin wrote:

> On Tue, May 26, 2009 at 6:03 PM, Dag Sverre Seljebotn
> <[email protected]> wrote:
>> Lisandro Dalcin wrote:
>>> Wow... I'm very sorry. I got it totally wrong ...
>>>
>>> If the change you are proposing about simplifying the type system  
>>> only
>>> affect that, I'm actually +1 on your proposal. The canonical Python
>>> way is a mess in the context of Cython.
>>>
>>> I would just ask for the following:
>>>
>>> 1) When going from C to Python, for Python 2.X, try to avoid  
>>> returning
>>> a PyLong (basically dispach proper calls using
>>> sizeof(type)<=sizeof(long) )
>>>
>>> 2) Use __Pyx_T_FLOATING, just to avoid confussion.
>>>
>>>
>>> Of course, other way would be to just use the transform I proposed
>>> previously. I do not expect it to impact performance.
>>
>> To follow up here: Since Robert was concerned and I'm too lazy to
>> benchmark, I redid it. (This also fixes the recently reported bug of
>> course.)
>>
>
> But you are really, really lazy ;-) ... Try this:
>
> $ python -m timeit -n 10000000 -s 'import sys; f=sys.stdout'  
> 'f.softspace'
> 10000000 loops, best of 3: 0.218 usec per loop
>
> $ python -m timeit -n 10000000 -s 'import sys; f=sys.stdout'  
> 'f.closed'
> 10000000 loops, best of 3: 0.194 usec per loop
>
>
> So very little difference... Dict lookups likely dominate:
>
> $ python -m timeit -n 10000000 -s 'd=file.__dict__' 'd["closed"]'
> 10000000 loops, best of 3: 0.177 usec per loop
> $ python -m timeit -n 10000000 -s 'd=file.__dict__' 'd["softspace"]'
> 10000000 loops, best of 3: 0.168 usec per loop
>
>
> Even if we ignore the overhead of dict lookups, a PyMemberDef-based
> attribute (the outcome of 'cdef public something') should have almost
> identical overhead to a PyGetSetDef-based attribute (the outcome of
> 'cdef property'). Moreover, the former (PyMemberDef) requires a
> dispatching switch, then being perhaps a bit less efficient? The
> numbers above seems to support me, though I should do a better test
> (softspace is a 'int' and 'closed' a 'bool').

Thanks. If someone really cares about speed, I guess they shouldn't  
be accessing this through the Python interface anywayw...

>> http://hg.cython.org/cython/rev/11e826f95cde
>>
>
> Looks good. Though perhaps in the future we could review all this and
> get rid at all of PyMemberDef-based attributes... IMHO, that is just
> sugar for human C extension writers.

It also reduces the .c and shared object library sizes, though that's  
a pretty weak argument for this particular case.

- Robert

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to