interpreter vs. compiled

castironpi castironpi at gmail.com
Fri Jul 18 01:15:52 CEST 2008


On Jul 17, 5:37 pm, I V <ivle... at gmail.com> wrote:
> On Thu, 17 Jul 2008 15:08:17 -0700, castironpi wrote:
> > The Python disassembly is baffling though.
>
> >>>> y= 3
> >>>> dis.dis('x=y+1')
>
> You can't disassemble strings of python source (well, you can, but, as
> you've seen, the results are not meaningful). You need to compile the
> source first:
>
> >>> code = compile('y=x+1','-', 'single')
> >>> dis.dis(code)
>
>   1           0 LOAD_NAME                0 (x)
>               3 LOAD_CONST               0 (1)
>               6 BINARY_ADD          
>               7 STORE_NAME               1 (y)
>              10 LOAD_CONST               1 (None)
>              13 RETURN_VALUE
>
> You may well find these byte codes more meaningful. Note that there is a
> list of opcodes athttp://docs.python.org/lib/bytecodes.html

Oh.  How is the stack represented?  Does it keep track of which stack
positions (TOS, TOS1, etc.) are in what registers?  Does stack
manipulation consume processor cycles?  Here is what I'm thinking:

LOAD_NAME: stack= [ x ]
reg0: x
tos: reg0
LOAD_CONST: stack= [ 1, x ]
reg0: x
reg1: 1
tos: reg1
BINARY_ADD: stack= [ x+ 1, x ]
reg0: x
reg1: x+ 1
tos: reg1
STORE_NAME: y= [ x+ 1], stack= same
reg0: x
reg1: x+ 1
tos: reg1

I may be totally off.



More information about the Python-list mailing list