STINNER Victor added the comment:
Serhiy: "I don't propose to commit this complicated patch, but these results
can be used as a guide to the optimization of tuple creating. It is surprising
to me that this patch has any effect at all."
A new "fast call" calling convention was added to Python 3.6 to avoid the
creation of temporary tuples to pass function arguments. Benchmarks confirm
that Python 3.7 is faster than Python 3.5 of functions that Serhiy suggested to
optimize. I confirm that I was also surprised that fast call has a significant
effect on performance!
Fast calls don't require complex code like reuse_argtuples_3.patch which
requires to check carefully the reference counter. In the past, a similar
optimization on property_descr_get() introduced complex bugs: see issue #24276
and issue #26811. Fast calls don't use such issues.
The implementation of fast calls is currently incomplete: tp_new, tp_init and
tp_call slots still require a tuple and a dict for positional and keyword
arguments. I'm working on an enhancement for Python 3.7 to support also fast
calls for these slots. In the meanwhile, callbacks using tp_call don't benefit
yet on fast calls.
That's why I had to keep the tuple/refcount optimization in
property_descr_get(), to not introduce a performance regression.
I consider that this issue can now be closed as "fixed".
resolution: -> fixed
status: open -> closed
Python tracker <rep...@bugs.python.org>
Python-bugs-list mailing list