[Python-ideas] Preallocated tuples and dicts for function calls

Serhiy Storchaka storchaka at gmail.com
Sat Mar 9 04:19:14 EST 2019


08.03.19 23:16, Martin Bammer пише:
> what about the idea that the interpreter preallocates and preinitializes the
> tuples and dicts for function calls where possible when loading a module?
> 
> Before calling a function then the interpreter would just need to update the
> items which are dynamic and then call the function.

A kind of this already has been implemented.

Tuples and dicts use free lists, so when you allocate a small tuple or 
an empty dict, you usually do not use expensive memory allocating 
functions, but take a preallocated object from a free list.

Although, this still has some overhead. This is why the property object 
had an attached preallocated tuple for passing the self argument to the 
getter function. But this was a complex and errorprone code. There were 
at least three attempts to fix it, and new flaws were found month later 
after every attempt. Finally this microoptimizations has been removed, 
and named tuples will use a special type for getters of their attribute 
in 3.8.

Internally, CPython uses the private "fast" calling convention for many 
builtin functions and methods. It allows to avoid creating an 
intermediate tuple and dict at all. In future this convention will be 
exposed publically. Cython already uses it, so third-party extensions 
written in Cython have an advantage of using it.



More information about the Python-ideas mailing list