Antoon Pardon wrote:

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.

Indeed, and it has been, which is a matter of well-recorded history. Constant folding has been used since the early Fortran compilers.

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

Reply via email to