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?
>>> 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?