Add big news item about nested scopes, __future__, and compile-time
warnings.
This commit is contained in:
parent
b87df3d0ab
commit
9d0fbdeaf7
36
Misc/NEWS
36
Misc/NEWS
|
@ -3,6 +3,42 @@ What's New in Python 2.1 beta 1?
|
||||||
|
|
||||||
Core language, builtins, and interpreter
|
Core language, builtins, and interpreter
|
||||||
|
|
||||||
|
- Following an outcry from the community about the amount of code
|
||||||
|
broken by the nested scopes feature introduced in 2.1a2, we decided
|
||||||
|
to make this feature optional, and to wait until Python 2.2 (or at
|
||||||
|
least 6 months) to make it standard. The option can be enabled on a
|
||||||
|
per-module basis by adding "from __future__ import nested_scopes" at
|
||||||
|
the beginning of a module (before any other statements, but after
|
||||||
|
comments and an optional docstring). See PEP 236 (Back to the
|
||||||
|
__future__) for a description of the __future__ statement. PEP 227
|
||||||
|
(Statically Nested Scopes) has been updated to reflect this change,
|
||||||
|
and to clarify the semantics in a number of endcases.
|
||||||
|
|
||||||
|
- The nested scopes code, when enabled, has been hardened, and most
|
||||||
|
bugs and memory leaks in it have been fixed.
|
||||||
|
|
||||||
|
- Compile-time warnings are now generated for a number of conditions
|
||||||
|
that will break or change in meaning when nested scopes are enabled:
|
||||||
|
|
||||||
|
- Using "from...import *" or "exec" without in-clause in a function
|
||||||
|
scope that also defines a lambda or nested function with one or
|
||||||
|
more free (non-local) variables. The presence of the import* or
|
||||||
|
bare exec makes it impossible for the compiler to determine the
|
||||||
|
exact set of local variables in the outer scope, which makes it
|
||||||
|
impossible to determine the bindings for free variables in the
|
||||||
|
inner scope. To avoid the warning about import *, change it into
|
||||||
|
an import of explicitly name object, or move the import* statement
|
||||||
|
to the global scope; to avoid the warning about bare exec, use
|
||||||
|
exec...in... (a good idea anyway -- there's a possibility that
|
||||||
|
bare exec will be deprecated in the future).
|
||||||
|
|
||||||
|
- Use of a global variable in a nested scope with the same name as a
|
||||||
|
local variable in a surrounding scope. This will change in
|
||||||
|
meaning with nested scopes: the name in the inner scope will
|
||||||
|
reference the variable in the outer scope rather than the global
|
||||||
|
of the same name. To avoid the warning, either rename the outer
|
||||||
|
variable, or use a global statement in the inner function.
|
||||||
|
|
||||||
- An optional object allocator has been included. This allocator is
|
- An optional object allocator has been included. This allocator is
|
||||||
optimized for Python objects and should be faster and use less memory
|
optimized for Python objects and should be faster and use less memory
|
||||||
than the standard system allocator. It is not enabled by default
|
than the standard system allocator. It is not enabled by default
|
||||||
|
|
Loading…
Reference in New Issue