Petr Viktorin schrieb am 10.05.19 um 00:07:
On 5/9/19 5:33 PM, Jeroen Demeyer wrote:
Maybe you misunderstood my proposal. I want to allow both for extra flexibility:
- METH_FASTCALL (possibly combined with METH_KEYWORDS) continues to work
as before. If you don't want to care about the implementation details of vectorcall, this is the right thing to use.
- METH_VECTORCALL (using exactly the vectorcallfunc signature) is a new
calling convention for applications that want the lowest possible overhead at the cost of being slightly harder to use.
Then we can, in the spirit of minimalism, not add METH_VECTORCALL at all. [...] METH_FASTCALL is currently not documented, and it should be renamed before it's documented. Names with "fast" or "new" generally don't age well.
I personally don't see an advantage in having both, apart from helping code that wants to be fast also on Py3.7, for example. It unnecessarily complicates the CPython implementation and C-API.
I'd be ok with removing FASTCALL in favour of VECTORCALL. That's more code to generate for Cython in order to adapt to Py<3.6, Py3.6, Py3.7 and then Py>=3., but well, seeing the heap of code that we *already* generate, it's not going to hurt our users much.
It would, however, be (selfishly) helpful if FASTCALL could still go through a deprecation period, because we'd like to keep the current Cython 0.29.x release series compatible with Python 3.8, and I'd like to avoid adding support for VECTORCALL and compiling out FASTCALL in a point release. Removing it in Py3.9 seems ok to me.