[Python-Dev] Code Generation Idea Was: Bytecode idea

Guido van Rossum guido@python.org
Wed, 26 Feb 2003 10:50:53 -0500


>     >> None is moving slowly toward becoming a true constant.  Perhaps the
>     >> same should be true of True and False.
> 
>     Guido> Problem with this is that there's currently lots of code out
>     Guido> there that was recently modified to read
> 
>     Guido>   try:
>     Guido>     True
>     Guido>   except NameError:
>     Guido>     True = 1
>     Guido>     False = 0
> 
>     Guido> That would become a syntax error if True/False were true
>     Guido> constants. :-(
> 
> Hmmm...  Those code blocks would only be executed on older versions of the
> interpreter.  Is there some way to use that knowledge to finesse the
> problem?  It would be a real hack, but if the compiler recognized precisely
> the above construct (or at least assignment in an except block guarded by
> NameError), it could shut up about the assignment.

You would have to do a fairly significant analysis of all code in the
module to know that there are no assignments to globals True or False
anywhere, *and* you would have to add a heuristic to cope with the
very code fragment above, *and* you would have to have a firm belief
that no other code would do

  import foo
  foo.True = "True"

I've often mentioned the first item above (per-module code analysis)
as doable, but it's not done.

--Guido van Rossum (home page: http://www.python.org/~guido/)