RE: [Python-Dev] peps 329, 266, 267
At 04:39 PM 4/21/04 -0400, Jewett, Jim J wrote:
If this is really only about globals and builtins, then you can just initialize each module's dictionary with a copy of builtins. (Or cache them in the module __dict__ on the first lookup, since you know where it would have gone.)
Phillip J. Eby:
Interesting thought. The same process that currently loads the __builtins__ member could instead update the namespace directly.
There's only one problem with this idea, and it's a big one: 'import *' would now include all the builtins, causing one module's builtins (or changes thereto) to propagate to other modules.
Why is this bad?
Because some modules are examined by software, and only the expected names belong there. For example, I believe if you run 'pydoc' on such a module, it will proceed to document all the builtins.
The reason to import * is that you intend to use the module's members as if they were your own. If the other module actually has modified a builtin, you'll need to do the same, or the imported members won't work quite right.
*shudder* I'm glad the language really doesn't work in the way you just described. :) No, just because one module shadows a builtin, doesn't mean you have to follow suit.
... declare that the any builtin used in a module that's known to be a builtin, is allowed to be optimized to the meaning of that builtin.
In effect, '__builtins__' should be considered an implementation detail, not part of the language,
Many builtins (None, True, KeyError) are effectively keywords, and I would agree.
Others, like __debug__, are really used for intermodule communication, because there isn't any other truly global namespace. (Perhaps there should be a conventional place to look, such as a settings module?)
__debug__ is also a builtin, in the sense of being optimizable by the compiler, so I don't see any reason to look at it differently. In fact, isn't __debug__ *already* treated as a constant by the compilers? Python 2.2.2 (#37, Oct 14 2002, 17:02:34) [MSC 32 bit (Intel)] on win32 Type "copyright", "credits" or "license" for more information. IDLE 0.8 -- press F1 for help
__debug__ 1 __debug__=0 SyntaxError: can not assign to __debug__ (
, line 1)
Yep, I guess so.
participants (1)
-
Phillip J. Eby