Changes to Python's build process and to the C API include:
- The cycle detection implementation used by the garbage collection
has proven to be stable, so it's now been made mandatory. You can no
longer compile Python without it, and the
--with-cycle-gc switch to configure has been removed.
- Python can now optionally be built as a shared library
(libpython2.3.so) by supplying --enable-shared
when running Python's configure script. (Contributed by Ondrej
Palkovsky.)
- The DL_EXPORT and DL_IMPORT macros
are now deprecated. Initialization functions for Python extension
modules should now be declared using the new macro
PyMODINIT_FUNC, while the Python core will generally
use the PyAPI_FUNC and PyAPI_DATA
macros.
- The interpreter can be compiled without any docstrings for
the built-in functions and modules by supplying
--without-doc-strings to the configure script.
This makes the Python executable about 10% smaller, but will also
mean that you can't get help for Python's built-ins. (Contributed by
Gustavo Niemeyer.)
- The PyArg_NoArgs() macro is now deprecated, and code
that uses it should be changed. For Python 2.2 and later, the method
definition table can specify the
METH_NOARGS flag, signalling that there are no arguments, and
the argument checking can then be removed. If compatibility with
pre-2.2 versions of Python is important, the code could use
PyArg_ParseTuple(args, "")
instead, but this will be slower
than using METH_NOARGS.
- PyArg_ParseTuple() accepts new format characters for various sizes of unsigned integers: "B" for unsigned char,
"H" for unsigned short int,
"I" for unsigned int,
and "K" for unsigned long long.
- A new function, PyObject_DelItemString(mapping,
char *key) was added as shorthand for
PyObject_DelItem(mapping, PyString_New(key))
.
- File objects now manage their internal string buffer
differently, increasing it exponentially when needed. This results in
the benchmark tests in Lib/test/test_bufio.py speeding up
considerably (from 57 seconds to 1.7 seconds, according to one
measurement).
- It's now possible to define class and static methods for a C
extension type by setting either the METH_CLASS or
METH_STATIC flags in a method's PyMethodDef
structure.
- Python now includes a copy of the Expat XML parser's source code,
removing any dependence on a system version or local installation of
Expat.
- If you dynamically allocate type objects in your extension, you
should be aware of a change in the rules relating to the
__module__ and __name__ attributes. In summary,
you will want to ensure the type's dictionary contains a
'__module__'
key; making the module name the part of the type
name leading up to the final period will no longer have the desired
effect. For more detail, read the API reference documentation or the
source.
Support for a port to IBM's OS/2 using the EMX runtime environment was
merged into the main Python source tree. EMX is a POSIX emulation
layer over the OS/2 system APIs. The Python port for EMX tries to
support all the POSIX-like capability exposed by the EMX runtime, and
mostly succeeds; fork() and fcntl() are
restricted by the limitations of the underlying emulation layer. The
standard OS/2 port, which uses IBM's Visual Age compiler, also gained
support for case-sensitive import semantics as part of the integration
of the EMX port into CVS. (Contributed by Andrew MacIntyre.)
On MacOS, most toolbox modules have been weaklinked to improve
backward compatibility. This means that modules will no longer fail
to load if a single routine is missing on the current OS version.
Instead calling the missing routine will raise an exception.
(Contributed by Jack Jansen.)
The RPM spec files, found in the Misc/RPM/ directory in the
Python source distribution, were updated for 2.3. (Contributed by
Sean Reifschneider.)
Other new platforms now supported by Python include AtheOS
(http://www.atheos.cx/), GNU/Hurd, and OpenVMS.
See About this document... for information on suggesting changes.