2011/6/2 Robert Bradshaw <[email protected]>: >> Initially bindings was written to support bound class methods (am I right?) >> So when we use it for regular functions 'binding' in the name doesn't >> reflect its purpose. > > There's three kinds of functions we create: PyCFunctions, binding > PyCFunctions, and extension class methods (via descriptors). I was > asking about the latter. > > As for the first two, it reflects the difference in behavior. If I > take the function and assign it to a class, it will bind as a method > when I go to look it up. This is arguably the biggest difference > between built-in functions and Python functions. > >> One the other hand it's much more easy to write manually. >> >> About staticmethods: I think that CyFunction type should handle it as well >> because staticmethods can have custom attributes and act just like >> normal def one. >> >> The difference is insde descr_get it should return bound method for >> normal and self for staticmethods. > > Yep. Does that merit a new class, or a flag that's checked on every > function invocation (false 99.9% of the time)? >
tp_descr_get() is called each time function gets bound, isn't so? If it makes sens we can create both CyFunction and CyStaticFunction types. >> Here I've tried to support staticmethods inside bindings type: >> https://github.com/vitek/cython/commit/c0725ab340a8173d8e6724c62be3a135df58980e >> >>> >>> I think that small speed regression for better compatibility is OK if >>> we add a directive to not create binding functions. (It'd be nice if >>> we could work around it, but that's hard as CPython has special >>> hooks...) The bigger issue is that the binding behavior is backwards >>> incompatible, and perhaps in a subtle way. Perhaps we need to have a >>> phase where all currently non-binding functions that will become >>> binding functions will raise an error (or at least a warning) to wean >>> people off of the old behavior before making a switch. >>> >> >> Is the difference so significant? > > If anyone is assigning a Cython function to an object and then using > it they're counting on the current non-binding behavior, and it will > break. The speed is probably a lesser issue, which is what benchmarks > are for. > -- vitja. _______________________________________________ cython-devel mailing list [email protected] http://mail.python.org/mailman/listinfo/cython-devel
