Blip: A bytecode compiler for Python 3
github.com
github.com
edit: precision
>>> @dis.dis
... def foo():
... print a
... print a
... print a
...
3 0 LOAD_GLOBAL 0 (a)
3 PRINT_ITEM
4 PRINT_NEWLINE
4 5 LOAD_GLOBAL 0 (a)
8 PRINT_ITEM
9 PRINT_NEWLINE
5 10 LOAD_GLOBAL 0 (a)
13 PRINT_ITEM
14 PRINT_NEWLINE
15 LOAD_CONST 0 (None)
18 RETURN_VALUE
I don't know how much value the optimised bytecode would bring though, likely not much outside of specific tight loops, and even then it's still only interpreted cpython, for little more cost you can integrate scipy solutions (e.g. numba) which'll likely have a much more significant impact. class A:
def __init__(self, value=0):
self.b = value
def __str__(self):
if self.b == 0:
global a
a = A(1)
elif self.b == 1:
import __builtin__, __main__
__builtin__.a = 2
del __main__.a
return str(self.b)
a = A()
def foo():
print a
print a
print a
foo()
This generates: 1
2
3
but it's a different 'a' in all three cases; the last isn't even from the module's namespace.Yes, the output was from my first version. I rewrote it to be more explicit about changing the 'a' each time, and forgot to update the output section.
Do it in CakeML to have a more assured Python compiler.