PDA

View Full Version : [Python]Bytecode


The_ouroboros
03-07-2013, 15:13
Stavo dando un occhio alle macchine virtuali stack-based e ho scoperto una cosina cool di python


>>> def re_check(obj, pattern):
""" Generic regex checking function (case insensitive) [True/Fase] """
p = re.compile(pattern, re.IGNORECASE)
m = p.match(obj)
if m:
return True
else:
return False

>>> dis.dis(re_check)
3 0 LOAD_GLOBAL 0 (re)
3 LOAD_ATTR 1 (compile)
6 LOAD_FAST 1 (pattern)
9 LOAD_GLOBAL 0 (re)
12 LOAD_ATTR 2 (IGNORECASE)
15 CALL_FUNCTION 2
18 STORE_FAST 2 (p)

4 21 LOAD_FAST 2 (p)
24 LOAD_ATTR 3 (match)
27 LOAD_FAST 0 (obj)
30 CALL_FUNCTION 1
33 STORE_FAST 3 (m)

5 36 LOAD_FAST 3 (m)
39 POP_JUMP_IF_FALSE 46

6 42 LOAD_GLOBAL 4 (True)
45 RETURN_VALUE

8 >> 46 LOAD_GLOBAL 5 (False)
49 RETURN_VALUE
50 LOAD_CONST 1 (None)
53 RETURN_VALUE

>>> def power2(power):
for x in range(0, power+1):
n = 1 << x
print "2^%d \t %d" % (x, n)


>>> dis.dis(power2)
2 0 SETUP_LOOP 52 (to 55)
3 LOAD_GLOBAL 0 (range)
6 LOAD_CONST 1 (0)
9 LOAD_FAST 0 (power)
12 LOAD_CONST 2 (1)
15 BINARY_ADD
16 CALL_FUNCTION 2
19 GET_ITER
>> 20 FOR_ITER 31 (to 54)
23 STORE_FAST 1 (x)

3 26 LOAD_CONST 2 (1)
29 LOAD_FAST 1 (x)
32 BINARY_LSHIFT
33 STORE_FAST 2 (n)

4 36 LOAD_CONST 3 ('2^%d \t %d')
39 LOAD_FAST 1 (x)
42 LOAD_FAST 2 (n)
45 BUILD_TUPLE 2
48 BINARY_MODULO
49 PRINT_ITEM
50 PRINT_NEWLINE
51 JUMP_ABSOLUTE 20
>> 54 POP_BLOCK
>> 55 LOAD_CONST 0 (None)
58 RETURN_VALUE


Voi cosa ne pensate delle Vm JIT?

cdimauro
03-07-2013, 22:08
Penso che se le prestazioni sono in assoluto importanti, rappresentano la via da seguire.

Comunque se oggi fossi stato all'EuroPython avresti potuto seguire un bellissimo talk di Larry Hastings proprio sui bytecode.

P.S. Io sono andato un po' oltre (http://code.google.com/p/wpython2/). Nella sezione download ci sono pure le slide. ;)

mone.java
04-07-2013, 09:37
Penso che se le prestazioni sono in assoluto importanti, rappresentano la via da seguire.

Comunque se oggi fossi stato all'EuroPython avresti potuto seguire un bellissimo talk di Larry Hastings proprio sui bytecode.

P.S. Io sono andato un po' oltre (http://code.google.com/p/wpython2/). Nella sezione download ci sono pure le slide. ;)


Ma non ha più avuto prosieguo questo progetto? ho visto che le ultime modifiche sono 2009/2010....

cdimauro
04-07-2013, 11:39
E' fermo per cronica mancanza di tempo. Ho tante idee che potrebbero migliorare notevolmente il progetto, ma al momento non riesco proprio a farcela... :cry:

mone.java
04-07-2013, 12:49
Peccato sembrava molto interessante... Hai cercato di crearci attorno una comunità? purtroppo io non sono abituato a pensare cosi a basso livello... però mi intriga tantissimo...

cdimauro
04-07-2013, 13:29
L'interesse c'è a parole, perché alla fine nessuno si impegna in progetti complessi come questo. Dopo i complimenti, insomma, devo sempre essere io a continuare. Solo che ho poco tempo, e ho altro a cui cui pensare.

Ma so che ritornerò a lavorarci, perché ho tanta roba che voglio implementare.