lunes, 19 de octubre de 2015

Desensamblando Python


%Python es considerado un lenguaje de "alto nivel", y al menos en algunas de sus 
%aplicaciones puede parecerlo sin problemas; no obstante, para aquellos que deseen
%ver los engranajes detrás, vean esta herramienta, dis. 

>>> import dis
>>> def fib(n):
...     if n==0 or n==1: return 1
...     else:
...             return fib(n-1)+fib(n-2)
... 
>>> dis.disassemble(fib.func_code)
  2           0 LOAD_FAST                0 (n)
              3 LOAD_CONST               1 (0)
              6 COMPARE_OP               2 (==)
              9 POP_JUMP_IF_TRUE        24
             12 LOAD_FAST                0 (n)
             15 LOAD_CONST               2 (1)
             18 COMPARE_OP               2 (==)
             21 POP_JUMP_IF_FALSE       28
        >>   24 LOAD_CONST               2 (1)
             27 RETURN_VALUE        

  4     >>   28 LOAD_GLOBAL              0 (fib)
             31 LOAD_FAST                0 (n)
             34 LOAD_CONST               2 (1)
             37 BINARY_SUBTRACT     
             38 CALL_FUNCTION            1
             41 LOAD_GLOBAL              0 (fib)
             44 LOAD_FAST                0 (n)
             47 LOAD_CONST               3 (2)
             50 BINARY_SUBTRACT     
             51 CALL_FUNCTION            1
             54 BINARY_ADD          
             55 RETURN_VALUE        
             56 LOAD_CONST               0 (None)
             59 RETURN_VALUE      

No hay comentarios:

Publicar un comentario