On 24 Nov, 16:11, Antoine Pitrou <solip...@pitrou.net> wrote: > [JUMP_IF_FALSE]
> It tries to evaluate the op of the stack (here nonevar) in a boolean > context (which theoretically involves calling __nonzero__ on the type) > and then jumps if the result is False (rather than True). [...] > As someone pointed out, the Python interpreter could grow CISC-like > opcodes so as to collapse "is not None" (or generically "is not > <constant>") into a single JUMP_IF_IS_NOT_CONST opcode. Of course, JUMP_IF_FALSE is already quite CISC-like, whereas testing if something is not None could involve some fairly RISC-like instructions: just compare the address of an operand with the address of None. As you point out, a lot of this RISC vs. CISC analysis (and inferences drawn from Python bytecode analysis) is somewhat academic: the cost of the JUMP_IF_FALSE instruction is likely to be minimal in the context of all the activity going on to evaluate the bytecodes. I imagine that someone (or a number of people) must have profiled the Python interpreter and shown how much time goes on the individual bytecode implementations and how much goes on the interpreter's own housekeeping activities. It would be interesting to see such figures. Paul -- http://mail.python.org/mailman/listinfo/python-list