[Types-sig] Low-hanging fruit: recognizing builtins

Guido van Rossum guido@CNRI.Reston.VA.US
Wed, 15 Dec 1999 14:21:40 -0500

> What is the proposed framework for these sorts of experiments? Perhaps
> the first project should be an interpreter that can be extended with new
> bytecodes perhaps through a registration mechanism...and a hook to call
> Python code between parsing and generating bytecodes. You have
> specifically commissioned this experiment so it has a good chance of
> being "rolled in" but in the more general case...

Dynamic bytecode registration would slow the PVM too much.  Just hack
a few special cases into ceval.c and then go hack on the bytecode.
Note that the bytecode hacking could conceivably be done entirely in
Python.  I think Skip Montanaro may have tools to do this already.

A first approximation would be to go hunt through all existing code
objects in a module for LOAD_GLOBAL and STORE_GLOBAL opcodes with
built-in names; for all such built-in names that have no STORE_GLOBAL
anywhere, it's "safe enough" to use the special opcode.  Then of
course you will have to hunt through the bytecode for sequences of
LOAD_GLOBAL(<name>), followed by arbitrary code to load an object,
followed by CALL_FUNCTION(1).

--Guido van Rossum (home page: http://www.python.org/~guido/)