[Python-Dev] Switch statement

Phillip J. Eby pje at telecommunity.com
Wed Jun 21 22:50:23 CEST 2006


At 01:16 PM 6/21/2006 -0700, Guido van Rossum wrote:
>On 6/21/06, Phillip J. Eby <pje at telecommunity.com> wrote:
> > >But that's not the discerning rule in my mind; the rule is, how to
> > >define "at function definition time".
> >
> > Waaaaa!  (i.e., my head hurts again :)
>
>Um, wasn't this your proposal (to freeze the case expressions at
>function definition time)?

Actually, I proposed that either that *or* first use could work, and in 
subsequent discussion I sided with first use.

Greg didn't quote the rest of my original post or any of the subsequent 
discussion in the post you picked up on, so that probably gave you the 
impression I was still in favor of function definition time, when I had 
already begun leaning towards "first use" as easier to define.


>Yeah, but if you have names for your constants it would be a shame if
>you couldn't use them because they happen to be defined in the same
>scope.

Maybe the real answer is to have a "const" declaration, not necessarily the 
way that Fredrik suggested, but a way to pre-declare constants e.g.:

     const FOO = 27

And then require case expressions to be either literals or constants.  The 
constants need not be computable at compile time, just runtime.  If a 
constant is defined using a foldable expression (e.g. FOO = 27 + 43), then 
the compiler can always optimize it down to a code level 
constant.  Otherwise, it can just put constants into cells that the 
functions use as part of their closure.  (For that matter, the switch 
statement jump tables, if any, can be put in a cell too.)


>I don't like "first use" because it seems to invite tricks.

Okay, then I think we need a way to declare a global as being constant.  It 
seems like all the big problems with switch/case basically amount to us 
trying to wiggle around the need to explicitly declare constants.



More information about the Python-Dev mailing list