Du langage interprété ? Ou pas...

Nous avons vu dans les sections précédentes que python générait des fichiers précompilés. Précompilés, ca veut dire quoi ? Contrairement à un langage compilé qui génère du code directement compréhensible par le processeur de votre ordi, le code précompilé est compréhensible par un processeur virtuel. D'ou le nom “machine virtuelle” que l'on retrouve en Java, .NET, et oui, donc, en python.

Donc, la première fois que python tente d'exécuter un code stocké dans un fichier py, hop, il nous génère une petit “assembly” python dans un fichier .pyc. Il y a aussi sa petite soeur optimisée .pyo.

Dans nos modules jb, et martin, nous pouvons ainsi nous amuser à aller voir le code (puisque vous vous ennuyez) ainsi généré. Pour cela ;

import dis
import jb
dis.dis(jb.bourrin)
Disassembly of generer_guid:
5           0 LOAD_GLOBAL              0 (input)
            3 LOAD_CONST               1 ('Saisir le nombre de guid a generer svp :\n')
            6 CALL_FUNCTION            1
            9 STORE_FAST               1 (nb)

6          12 LOAD_GLOBAL              1 (type)
           15 LOAD_FAST                1 (nb)
           18 CALL_FUNCTION            1
           21 LOAD_GLOBAL              2 (int)
           24 COMPARE_OP               2 (==)
           27 JUMP_IF_FALSE           44 (to 74)
           30 POP_TOP             

7          31 SETUP_LOOP              41 (to 75)
           34 LOAD_GLOBAL              3 (range)
           37 LOAD_FAST                1 (nb)
           40 CALL_FUNCTION            1
           43 GET_ITER            
           44 FOR_ITER                23 (to 70)
           47 STORE_FAST               2 (i)
           50 LOAD_GLOBAL              4 (str)
           53 LOAD_GLOBAL              5 (uuid)
           56 LOAD_ATTR                6 (uuid4)
           59 CALL_FUNCTION            0
           62 CALL_FUNCTION            1
           65 PRINT_ITEM          
           66 PRINT_NEWLINE       
           67 JUMP_ABSOLUTE           44
           70 POP_BLOCK           
           71 JUMP_FORWARD             1 (to 75)
           74 POP_TOP             
           75 LOAD_CONST               0 (None)
           78 RETURN_VALUE        
           

Pour ceux qui se sont déjà frottés à du langage assembleur, on peut reconnaître des instruction très bas niveau ; pas celle de notre processeur, mais celles de la machine virtuelle python : (LOAD_CONST, PRINT_ITEM, RETURN_VALUE…) ainsi que ces opérandes.

Table des matières

 
python_partie_3.txt · Dernière modification: 2012/03/02 11:21 par admin
 
Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante:Public Domain
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Run by Debian Driven by DokuWiki