[Python-ideas] Optimizing builtins
Stefan Behnel
stefan_ml at behnel.de
Sun Jan 2 10:10:51 CET 2011
Benjamin Peterson, 01.01.2011 21:35:
> Guido van Rossum<guido at ...> writes:
>> The compiler has no way to notice this when a.py is being compiled.
>
> You could still optimize it if you insert a runtime "guard" before the range
> usage and see if its been overridden.
The problem here is that you wouldn't save the lookup. So you'd still pay a
high price to find out that the builtin has not been overridden.
There can be substantial savings for builtins that can be optimised away or
replaced by a tighter/adapted implementation. We do that a lot in Cython
where builtins are (by default) considered static unless redefined inside
of the module. An important example are generator expressions like
"any(genexpr)". If the function was known to be builtin at compile time,
CPython could generate much simpler byte code for these, dropping the need
for a generator and its closure.
But as long as you have to check for an override at each call, you end up
with the duplicated code (optimised and fall-back version) and an increased
entry overhead that may well kill the savings.
Stefan
More information about the Python-ideas
mailing list