Hello,

i am a longtime Reader of this list and this is the first time i a dare to speak up. Apology in advance for any noise, silly comments and not posting to python-ideas ;).

Am 11.09.2012 12:41, schrieb Victor Stinner:
I plan to implement other optimizations like unrolling loop or convert
a loop to a list comprehension, see the TODO file.

Don't hesitate to propose more optimizations if you have some ideas ;-)

Well how about implementing guards like in pypy?
They are not optimizations by themselves but should enable a whole lot of them.

I am not good at explaining so i've written this short example (python 2.7.3).
I hope it makes clear what i mean.

Thank you for reading
larudwer

#
# Example for implementing an guard
# by freezing global and local dictionary
# it is not an optimization by itself
# but should open the possibility for them.
#

class WorldChangedException(Exception): pass
class WorldShadowedException(Exception): pass

class frozendict(dict):
   def __setitem__(self, key, value):
       if key in globals():
           if self == locals():
               raise WorldShadowedException(key)
           else:
               raise WorldChangedException(key)

def put(string):
   print string

g = frozendict({'put': put, 'foo': 2})
l = frozendict({'bar': 'work fast'})

#
# This is just an poor example.
# astoptimizer should be able to generate
# much better code
#
f = compile("""
put( "trying fast path")
put(bar)
put = 27
""", "<astoptimizer>", "exec")

def test():
   global put # Workaround for UnboundLocalError
   put("trying slow path")
   put = 27

#
# Guard: since the world is frozen, nothing can change.
# if the fast path succeeds we take the result, else
# we use the slow path.
#
try:
   exec(f, g, l)
except WorldChangedException, e:
   print "WorldChangedException Caught", e
   test()
except WorldShadowedException, e:
   print "WorldShadowedException Caught", e
   test()


_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to