Antoon Pardon wrote:
Indeed, and it has been, which is a matter of well-recorded history. Constant folding has been used since the early Fortran compilers.Op 2005-01-18, Diez B. Roggisch schreef <[EMAIL PROTECTED]>:
Something else I was thinking about. I think it would be nice if the python compilor could figure out whether a genexp in a list or tuple expression always generates the same list or tuple and then instead of generating code would generate the list or tuple in place.
This won't ever happen in python - at least not in python otherwise similar to the one we know...
The thing you're after is known as "common subexpression elemination" and can only be done in purely functional languages. While that certainly is an interesting property of a language, it e.g. forbids functions like time.time() - a too huge paradigm shift for python.
I don't see how generating byte code for a = 9; when seeing the expression a = 3 + 6, would be a problem for non-functional languages.
I agree that things like [time.time() for i in xrange(10)] shouldn't be pregenerated and that the problem is more complicated as I thought.
But during compilation the compilor could do an anlysis of the code do determine whether there are side effects or not. If the compilor then would store a code in the byte code for functions that are guaranteed side-effect free and only pregenerated objects generated by expressions with no side-effect, some common subexpression elimination could be done even in a non-functional language.
But you've already stated that the problem is more complicated than you thought. I presume you are already prepared to bail on any function that calls into external modules or extensions, since clearly nothing can be known about their behaviors vis a vis side effects.
Python is *designed* as a dynamic language. I wish you would embrace this aspect rather than continually trying to shoehorn it into a static straitjacket. Efficiency is good. Flexibility is better.
regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -- http://mail.python.org/mailman/listinfo/python-list