Some of the changes only affect people who deal with the Python
interpreter at the C level because they're writing Python extension modules,
embedding the interpreter, or just hacking on the interpreter itself.
If you only write Python code, none of the changes described here will
affect you very much.
- Profiling and tracing functions can now be implemented in C,
which can operate at much higher speeds than Python-based functions
and should reduce the overhead of profiling and tracing. This
will be of interest to authors of development environments for
Python. Two new C functions were added to Python's API,
PyEval_SetProfile() and PyEval_SetTrace().
The existing sys.setprofile() and
sys.settrace() functions still exist, and have simply
been changed to use the new C-level interface. (Contributed by Fred
L. Drake, Jr.)
- Another low-level API, primarily of interest to implementors
of Python debuggers and development tools, was added.
PyInterpreterState_Head() and
PyInterpreterState_Next() let a caller walk through all
the existing interpreter objects;
PyInterpreterState_ThreadHead() and
PyThreadState_Next() allow looping over all the thread
states for a given interpreter. (Contributed by David Beazley.)
- A new "et" format sequence was added to
PyArg_ParseTuple; "et" takes both a parameter and
an encoding name, and converts the parameter to the given encoding
if the parameter turns out to be a Unicode string, or leaves it
alone if it's an 8-bit string, assuming it to already be in the
desired encoding. This differs from the "es" format character,
which assumes that 8-bit strings are in Python's default ASCII
encoding and converts them to the specified new encoding.
(Contributed by M.-A. Lemburg, and used for the MBCS support on
Windows described in the following section.)
- A different argument parsing function,
PyArg_UnpackTuple(), has been added that's simpler and
presumably faster. Instead of specifying a format string, the
caller simply gives the minimum and maximum number of arguments
expected, and a set of pointers to
PyObject*
variables that
will be filled in with argument values.
- Two new flags METH_NOARGS and METH_O are
available in method definition tables to simplify implementation of
methods with no arguments or a single untyped argument. Calling
such methods is more efficient than calling a corresponding method
that uses METH_VARARGS.
Also, the old METH_OLDARGS style of writing C methods is
now officially deprecated.
- Two new wrapper functions, PyOS_snprintf() and
PyOS_vsnprintf() were added to provide
cross-platform implementations for the relatively new
snprintf() and vsnprintf() C lib APIs. In
contrast to the standard sprintf() and
vsprintf() functions, the Python versions check the
bounds of the buffer used to protect against buffer overruns.
(Contributed by M.-A. Lemburg.)
- The _PyTuple_Resize() function has lost an unused
parameter, so now it takes 2 parameters instead of 3. The third
argument was never used, and can simply be discarded when porting
code from earlier versions to Python 2.2.
See About this document... for information on suggesting changes.