[Python-Dev] Making None a keyword (original) (raw)

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