===================================
==> Release 1.2 <==
===================================


- Most known bugs have been fixed.  For example the pow(2,2,3L) bug on
Linux has been fixed.  Also the re-entrancy problems with __del__ have
been fixed.

- Most known memory leaks have been fixed.

- Phase 2 of the Great Renaming has been executed.  The header files
now use the new names (PyObject instead of object, etc.).  The linker
also sees the new names.  Most source files still use the old names,
by virtue of the rename2.h header file.  If you include Python.h, you
only see the new names.  Dynamically linked modules have to be
recompiled.

- The hooks for implementing "safe-python" (better called "restricted
execution") are in place.  Specifically, the import statement is
implemented by calling the built-in function __import__, and the
built-in names used in a particular scope are taken from the
dictionary __builtins__ in that scope's global dictionary.  See also
the new module rexec.py.

- The import statement now supports the syntax "import a.b.c" and
"from a.b.c import name".  No meaningful implementation exists, but
one can be prototyped by replacing the built-in __import__ function.

- All machinery used by the import statement (or the built-in
__import__ function) is now exposed through the new built-in module
"imp".  All dynamic loading machinery is moved to the new file
importdl.c.

- Persistent storage is supported through the use of the module
"pickle" and "shelve" (implemented in Python).  Read the .py files for
more info.  There's also a "copy" module implementing deepcopy and
normal (shallow) copy operations.

- Documentation strings for many objects types are accessible through
the __doc__ attribute.  Modules, classes and functions support special
syntax to initialize the __doc__ attribute: if the first statement
consists of just a string literal, that string literal becomes the
value of the __doc__ attribute.  The default __doc__ attribute is
None.  Documentation strings are also supported for built-in
functions, types and modules; however this feature hasn't been widely
used yet.  See the 'new' module for an example.

- The __coerce__ and __cmp__ methods for user-defined classes once
again work as expected.  As an example, there's a new standard class
Complex in the library.

- The functions posix.popen() and posix.fdopen() now have an optional
third argument to specify the buffer size, and default their second
(mode) argument to 'r' -- in analogy to the builtin open() function.

- Improved support for the Apple Macintosh, e.g. interfaces to (a few)
resource mananger functions, get/set file type and creator, gestalt,
sound manager, speech manager, MacTCP, comm toolbox, and the think C
console library.  (Sorry, no Mac binary yet.  Will try to produce one
shortly, plus instructions on how to compile with THINK C 6.0.)

- Used autoconf 2.0 to generate the configure script.  Adapted
configure.in to use the new features in autoconf 2.0.


--Guido van Rossum, CWI, Amsterdam <Guido.van.Rossum@cwi.nl>
URL:  <http://www.cwi.nl/cwi/people/Guido.van.Rossum.html>
