As usual there were a bunch of other improvements and bugfixes
scattered throughout the source tree. A search through the CVS change
logs finds there were 527 patches applied and 683 bugs fixed between
Python 2.1 and 2.2; 2.2.1 applied 139 patches and fixed 143 bugs;
2.2.2 applied 106 patches and fixed 82 bugs. These figures are likely
to be underestimates.
Some of the more notable changes are:
The code for the MacOS port for Python, maintained by Jack
Jansen, is now kept in the main Python CVS tree, and many changes
have been made to support MacOS X.
The most significant change is the ability to build Python as a
framework, enabled by supplying the --enable-framework
option to the configure script when compiling Python. According to
Jack Jansen, ``This installs a self-contained Python installation plus
the OS X framework "glue" into
/Library/Frameworks/Python.framework (or another location of
choice). For now there is little immediate added benefit to this
(actually, there is the disadvantage that you have to change your PATH
to be able to find Python), but it is the basis for creating a
full-blown Python application, porting the MacPython IDE, possibly
using Python as a standard OSA scripting language and much more.''
Most of the MacPython toolbox modules, which interface to MacOS APIs
such as windowing, QuickTime, scripting, etc. have been ported to OS X,
but they've been left commented out in setup.py. People who want
to experiment with these modules can uncomment them manually.
Keyword arguments passed to builtin functions that don't take them
now cause a TypeError exception to be raised, with the
message "function takes no keyword arguments".
Weak references, added in Python 2.1 as an extension module,
are now part of the core because they're used in the implementation
of new-style classes. The ReferenceError exception has
therefore moved from the weakref module to become a
built-in exception.
A new script, Tools/scripts/cleanfuture.py by Tim
Peters, automatically removes obsolete __future__ statements
from Python source code.
An additional flags argument has been added to the
built-in function compile(), so the behaviour of
__future__ statements can now be correctly observed in
simulated shells, such as those presented by IDLE and other
development environments. This is described in PEP 264.
(Contributed by Michael Hudson.)
The new license introduced with Python 1.6 wasn't
GPL-compatible. This is fixed by some minor textual changes to the
2.2 license, so it's now legal to embed Python inside a GPLed
program again. Note that Python itself is not GPLed, but instead is
under a license that's essentially equivalent to the BSD license,
same as it always was. The license changes were also applied to the
Python 2.0.1 and 2.1.1 releases.
When presented with a Unicode filename on Windows, Python will
now convert it to an MBCS encoded string, as used by the Microsoft
file APIs. As MBCS is explicitly used by the file APIs, Python's
choice of ASCII as the default encoding turns out to be an
annoyance. On Unix, the locale's character set is used if
locale.nl_langinfo(CODESET) is available. (Windows
support was contributed by Mark Hammond with assistance from
Marc-André Lemburg. Unix support was added by Martin von Löwis.)
Large file support is now enabled on Windows. (Contributed by
Tim Peters.)
The Tools/scripts/ftpmirror.py script
now parses a .netrc file, if you have one.
(Contributed by Mike Romberg.)
Some features of the object returned by the
xrange() function are now deprecated, and trigger
warnings when they're accessed; they'll disappear in Python 2.3.
xrange objects tried to pretend they were full sequence
types by supporting slicing, sequence multiplication, and the
in operator, but these features were rarely used and
therefore buggy. The tolist() method and the
start, stop, and step attributes are also
being deprecated. At the C level, the fourth argument to the
PyRange_New() function, "repeat", has also been
deprecated.
There were a bunch of patches to the dictionary
implementation, mostly to fix potential core dumps if a dictionary
contains objects that sneakily changed their hash value, or mutated
the dictionary they were contained in. For a while python-dev fell
into a gentle rhythm of Michael Hudson finding a case that dumped
core, Tim Peters fixing the bug, Michael finding another case, and round
and round it went.
On Windows, Python can now be compiled with Borland C thanks
to a number of patches contributed by Stephen Hansen, though the
result isn't fully functional yet. (But this is progress...)
Another Windows enhancement: Wise Solutions generously offered
PythonLabs use of their InstallerMaster 8.1 system. Earlier
PythonLabs Windows installers used Wise 5.0a, which was beginning to
show its age. (Packaged up by Tim Peters.)
Files ending in ".pyw" can now be imported on Windows.
".pyw" is a Windows-only thing, used to indicate that a script
needs to be run using PYTHONW.EXE instead of PYTHON.EXE in order to
prevent a DOS console from popping up to display the output. This
patch makes it possible to import such scripts, in case they're also
usable as modules. (Implemented by David Bolen.)
On platforms where Python uses the C dlopen() function
to load extension modules, it's now possible to set the flags used
by dlopen() using the sys.getdlopenflags() and
sys.setdlopenflags() functions. (Contributed by Bram Stolk.)
The pow() built-in function no longer supports 3
arguments when floating-point numbers are supplied.
pow(x, y, z) returns (x**y) % z, but
this is never useful for floating point numbers, and the final
result varies unpredictably depending on the platform. A call such
as pow(2.0, 8.0, 7.0) will now raise a TypeError
exception.