[Python-ideas] PEP proposal: unifying function/method classes
Antoine Pitrou
solipsis at pitrou.net
Thu Mar 22 19:36:26 EDT 2018
On Thu, 22 Mar 2018 21:34:44 +0100
Jeroen Demeyer <J.Demeyer at UGent.be> wrote:
> Dear python-ideas,
>
> I would like to draft a PEP to change the implementation of functions
> and methods in CPython. The idea for this PEP come from a discussion on
> https://bugs.python.org/issue30071
>
> The core idea of the PEP is to reorganize classes for functions and
> methods with the goal of removing the difference between
> functions/methods implemented in C and functions/methods implemented in
> Python.
>
> Currently, CPython has two different function classes: the first is
> Python functions, which is what you get when defining a function with
> def or lambda. The second is built-in functions such as len, isinstance
> or numpy.dot. These are implemented in C.
>
> These two classes are completely independent with different
> functionality. For example, built-in functions do not have __get__ and
> therefore cannot be used as methods. And only Python functions support
> introspection like inspect.getargspec or inspect.getsourcefile.
>
> This is a problem for projects like Cython that want to implement
> functions in C but still want to offer functionality close to Python
> functions. In Cython, this was solved by inventing a new function class
> called cyfunction. Unfortunately, this new function class creates
> problems, for example the inspect module does not recognize such
> functions as being functions (this is the bug mentioned above) and the
> performance is worse (CPython has specific optimizations for calling
> built-in functions).
>
> When you look at methods, the inconsistency increases: On the one hand,
> the implementation of built-in functions and bound methods is very
> similar but built-in unbound methods are different. On the other hand,
> Python functions and unbound methods are identical but bound methods are
> different.
>
> Do you think that it makes sense to propose a PEP for this?
It does make sense, since the proposal sounds ambitious (and perhaps
impossible without breaking compatibility).
Regards
Antoine.
More information about the Python-ideas
mailing list