[Python-Dev] Making None a keyword
Jeremy Hylton
jeremy@ZOPE.COM
Fri, 26 Apr 2002 10:10:12 -0400
>>>>> "FLD" == Fred L Drake, <fdrake@acm.org> writes:
FLD> Jeremy Hylton writes:
>> Does the parser prevent assignment to None? Or does the compiler
>> need to check for the use of None in an assignment?
FLD> Inside functions, you don't even need that. You just need to
FLD> use LOAD_CONST (or whatever its called now), since None is
FLD> entry 0 in the constants table, used by the implied "return
FLD> None" when control drops off the end. Doing this in function
FLD> buys most of the performance.
I don't understand what you mean, but I'll try to reply anyway :-).
I assume LOAD_NONE will eliminate the need for LOAD_CONST 0 (None).
Instead of this:
case LOAD_CONST:
x = GETCONST(oparg);
Py_INCREF(x);
PUSH(x);
goto fast_next_opcode;
we'd have this:
case LOAD_NONE:
Py_INCREF(Py_None);
PUSH(Py_None);
goto fast_next_opcode;
It's probably a wee bit faster and it makes the bytecode smaller,
because you don't need None in co_consts and you don't need an
argument to the bytecode.
Based on my cycle counter measurements before the conference, I
suspect the performance impact is, well, negligible.
Jeremy