Feature or enhancement
The PyType_FromSpec family of functions provides a convenient and forward-compatible way mechanism for creating new types. It could in principle also be used to create callables providing a
vector call interface, which has significant performance benefits for binding libraries (see the
here).
One can already specify a member named __vectorcalloffset__ in PyType_FromSpec. This isn't fully working in the limited API, however. I encountered the following problems.
The Py_TPFLAGS_HAVE_VECTORCALL flag is not part of the limited API.
The PyVectorcall_NARGS() helper function is not part of the limited API.
One would normally set tp_call to the compatibility dispatch routine PyVectorcall_Call. It is, however, also not part of the public ABI.
Leaving tp_call unspecified is not an option. PyType_Ready() even throws an exception in type_ready_pre_checks() when tp_call is unspecified.
Pitch
I propose the following changes:
Adding Py_TPFLAGS_HAVE_VECTORCALL, PyVectorcall_NARGS(), and PyVectorcall_Call() to the limited API.
Redundant, but nice: Setting tp_call to PyVectorcall_Call when PyType_Ready encounters a type that doesn't have this field set.
Note that vector calls can be received and performed. This issue is just about the receiving end.
Previous discussion
See the discord thread
.