2011/6/1 mark florisson <markflorisso...@gmail.com>: > On 31 May 2011 20:25, Vitja Makarov <vitja.maka...@gmail.com> wrote: >> Hi! >> >> Is bindings performance issue valuable? >> >> $ cat bindbench.pyx >> def wo_bindings(): >> pass >> >> def outer(): >> def inner(): >> pass >> return inner >> with_bindings = outer() >> >> $ python >>>>> import timeit >>>>> timeit.repeat('with_bindings()', setup='from bindbench import >>>>> wo_bindings, with_bindings', repeat=1, number=100000000) >> [6.169871807098389] >>>>> timeit.repeat('wo_bindings()', setup='from bindbench import wo_bindings, >>>>> with_bindings', repeat=1, number=100000000) >> [4.609416961669922] >> >> PyCBindings makes it 1.3 (difference is about 15ns on my laptop) times >> slower for CPython interpreter execution. >> As CPython has some optimizations for CFunctions and PyCFunctions. >> >> Does it make sense for us? Or we can easily switch to bindings? >> >> -- >> vitja. >> _______________________________________________ >> cython-devel mailing list >> cython-devel@python.org >> http://mail.python.org/mailman/listinfo/cython-devel >> > > I think switching should be fine, if you'd desperately need the speed > you'd be calling c(p)def functions from Cython. In fact, when the > fused cfunction will be ready it will be even slightly slower, as it > overrides the tp_call. But perhaps that should really be made into a > subclass... > > Anyway, would you use these for Python classes and module-level def > functions (and closures) only, or would you also use them in extension > classes? Because I found at least a bit of problem there, as extension > class methods get 'self' passed as the first argument to the C > function (as PyCFunctionObject.m_self), whereas methods in Python > classes get 'self' passed in the args tuple (and the m_self is > unused). >
Recently I've found a problem with static methods (__new__ for example) of inner classes (classes created inside a function, for instance) I think binding version should be used for all regular def functions (defs, staticmethods, classmethods and so on). I also think that it's better to rename binding_PyCFunction_Type to something like CyFunctionType and make it more like PyFunction. -- vitja. _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel