Thomas Lee <[EMAIL PROTECTED]> wrote: > I see. But restricting the switch to constants in the name of > performance may not make sense in a language like Python. Maybe this is > something for the PEP to discuss, but it seems such an implementation > would be confusing and sometimes it may not be possible to use a switch > case in place of if/elif/else statements at all.
The PEP already discussed it. Offering arbitrary expressions whose meaning can vary at runtime would kill any potential speedup (the ultimate purpose for having a switch statement), leaving us with if/elif/else that, paradoxically, ran faster in general than the equivalent switch statement. [snip] > a) unnecessarily duplication of constant values for the purpose of using > them as case values The vast majority of use-cases in C/C++ uses single character or small integer constants. This hasn't slowed down the switch/case use in C/C++, and I haven't even seen an over-abundance of const or macro definitions of constants in C/C++ switch/case statements. > I do get the distinction, I'm just wondering if the usefulness of the > semantics > (or lack thereof) are going to negate any potential performance > enhancements: if a switch statement is never used because it's only > useful in a narrow set of circumstances, then maybe we're looking to > improve performance in the wrong place? Please re-read the PEP, more specifically the 'Problem' section: "A nice example of this is the state machine implemented in pickle.py which is used to serialize Python objects. Other prominent cases include XML SAX parsers and Internet protocol handlers." > Just thinking about it, maybe there could be two different code paths > for switch statements: one when all the case values are constants (the > 'fast' one) and one where one or more are expressions. This would mean a > slightly longer compile time for switch statements while ensuring that > runtime execution is the maximum possible without placing any major > restrictions on what can be used as a case value. The non-fast version couldn't actually work if it referenced any names, given current Python semantics for arbitrary name binding replacements. - Josiah _______________________________________________ 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