Author serhiy.storchaka
Recipients python-dev, scoder, serhiy.storchaka, vstinner, yselivanov, ztane
Date 2016-08-22.12:29:11
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1471868951.47.0.947351097587.issue27128@psf.upfronthosting.co.za>
In-reply-to
Content
The problem is that passing keyword arguments as a dict is not the most efficient way due to an overhead of creating a dict. For now keyword arguments are pushed on the stack as interlaced array of keyword names and values. It may be more efficient to push values and names as continuous arrays (issue27213). PyArg_ParseTupleAndKeywords() accepts a tuple and a dict, but private function _PyArg_ParseTupleAndKeywordsFast() (issue27574) can be changed to accept positional and keyword arguments as continuous arrays: (int nargs, PyObject **args, int nkwargs, PyObject **kwnames, PyObject **kwargs). Therefore we will be forced either to change the signature of _PyObject_FastCall() and the meaning of METH_FASTCALL, or add new _PyObject_FastCallKw() and METH_FASTCALLKW for support fast passing keyword arguments. Or may be add yet _PyObject_FastCallNoKw() for faster passing only positional arguments without an overhead of _PyObject_FastCall(). And make older _PyObject_FastCall() and METH_FASTCALL obsolete.

There is yet one possibility. Argument Clinic can generate a dict that maps keyword argument names to indices of arguments and tie it to a function. External code should map names to indices using this dictionary and pass arguments as just a continuous array to function with METH_FASTCALL (raising an error if some argument is passed as positional and keyword, or if keyword-only argument is passed as positional, etc). In that case the kwargs parameter of _PyObject_FastCall() becomes obsolete too.
History
Date User Action Args
2016-08-22 12:29:11serhiy.storchakasetrecipients: + serhiy.storchaka, scoder, vstinner, python-dev, yselivanov, ztane
2016-08-22 12:29:11serhiy.storchakasetmessageid: <1471868951.47.0.947351097587.issue27128@psf.upfronthosting.co.za>
2016-08-22 12:29:11serhiy.storchakalinkissue27128 messages
2016-08-22 12:29:11serhiy.storchakacreate