At 11:13 AM 6/25/2006 -0700, Raymond Hettinger wrote:
>No thanks.  That is its own can of worms.  The obvious solutions (like const
>declarations, macros, or a syntax to force compile-time expression 
>evaluation)
>are unlikely to sit well because they run afoul Python's deeply ingrained
>dynamism.

I think perhaps you haven't been paying close attention to Fredrik's 
proposal.  The "static" operator simply lifts expression evaluation to 
function definition time, so that this:

     def x(y):
         print y * static(123+456)

becomes equivalent to this:

     foo = 123+456
     def x(y):
         print y * foo

This simple transformation doesn't "run afoul" of anything that I'm aware 
of, any more than the "with:" statement does.

Meanwhile, you seem to be arguing that forcing the use of literals at 
compilation time is somehow more dynamic than allowing them to be computed 
at runtime!  I don't get it.  Are you perhaps thinking that it's necessary 
to know the values at compilation time in order to compile the switch 
statement?  If so, note that the dictionary entries can be loaded by the 
code where the function is defined, and accessed as a free variable within 
the function body.  This is the same way that other "static" expressions 
would be implemented.

(On an unrelated note, I think that maybe rather than making "static" look 
like a function call, we should use a form that looks more like a generator 
expression, conditional, or yield expression, i.e. (static 123+456) instead 
of static(123+456), as this emphasizes its nature as an element of language 
syntax rather than making it look like a function call.)

_______________________________________________
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