[Python-Dev] Re: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.227,2.228
Tim Peters
tim.one@home.com
Fri, 24 Aug 2001 18:26:13 -0400
> ! /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
[Michael Hudson]
> I think not.
>
> If, as I *think*, all code objects compiled in 2.2 have
>
> ob.co_flags & __future__.nested_scopes.compiler_flag
>
> non-zero, then, eg., idle will compile all code typed interactively
> (after the first line, anyway) with
> __future__.nested_scopes.compiler_flag in the supplied_flags argument
> to compile(). This could be wormed around, obviously, but I don't see
> the point.
Your belief was true of 2.2a1 but not of 2.2a2. For 2.2a1, Guido simply
turned on nested_scopes by default (and so every code object had CO_NESTED
set). For 2.2a2, Jeremy returned from paternity leave and took away the
*possibility* of turning nested scopes off. As a result, the *only*
reference to CO_NESTED now in the C part of Python is in the #define of
PyCF_MASK_OBSOLETE, and Python itself never sets CO_NESTED. That's part of
what I meant when I said (in a different recent thread) that any piece of
code using these flags is eventually going to get surprised: these
implementation details are as internal and transient as they get.
This isn't critical now, but I can't help but notice that we've got 8 bit
positions assigned in the co_flags int. One is meaningless in 2.2a2
(CO_NESTED), and two more will eventually become meaningless
(CO_GENERATOR_ALLOWED and CO_FUTURE_DIVISION). I'm not worried about
running out of "real" co_flags bits, but so long as we're stuck *also* using
co_flags to communicate-- from caller to dynamically-compiled callee --which
still-optional future-features are in effect, we burn another bit position
every time we dream up a future-feature with semantic content.
So, but later rather than sooner, I expect we're going to have to recycle
these temporary future-feature co_flags bits. When that happens, it may be
prudent to *warn* about obsolete flag values for a release cycle (before
recycling them), for the benefit of insane people who can't restrain
themselves from playing with undocumented bits <wink>.