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


- Virtually all 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.

- It should now build on the NeXT without intervention, even on the
3.3 Sparc pre-release.

- __import__ is now called with 4 arguments:
(modulename, globals, locals, fromlist)

- Characters passed to isspace() and friends are masked to nonnegative
values

- Correctly compute pow(-3.0, 3)

- Fix portability problems with getopt (configure now checks for a
non-GNU getopt)

- Don't add frozenmain.o to libPython.a

- Exceptions can now be classes

- The socket module exports a long list of socket related symbols

- Lots of Mac specific changes (this area of the source is not
completed!)

- When a module object is deleted, it clears out its own dictionary
(this fixes a circularity in the references between functions and
their global dictionary)

- Changed the error handling by [new]getargs() e.g. for "O&"

- Dynamic loading of modules using shared libraries is supported for
several new platforms

- Support "O&" in mkvalue()

- Extension to findmethod(): findmethodinchain() (where a chain is a
linked list of methodlist arrays)

- Callable() function is now public


Known bugs still remaining:
---------------------------

- There's still a memory leak in threads; bigger when
thread.exit_thread() is used


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