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.

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to