Python History
--------------

This file contains the release messages for previous Python releases.
As you read on you go back to the dark ages of Python's history.


======================================================================

What's New in Python 3.4.6?
===========================

Release date: 2017-01-17

There were no changes between 3.4.6rc1 and 3.4.6 final.


What's New in Python 3.4.6rc1?
==============================

Release date: 2017-01-02

Core and Builtins
-----------------

- Issue #28648: Fixed crash in Py_DecodeLocale() in debug build on Mac OS X
  when decode astral characters.  Patch by Xiang Zhang.

- Issue #28426: Fixed potential crash in PyUnicode_AsDecodedObject() in debug
  build.

Library
-------

- Issue #28563: Fixed possible DoS and arbitrary code execution when handle
  plural form selections in the gettext module.  The expression parser now
  supports exact syntax supported by GNU gettext.

- In the curses module, raise an error if window.getstr() or window.instr() is
  passed a negative value.

- Issue #27783: Fix possible usage of uninitialized memory in operator.methodcaller.

- Issue #27774: Fix possible Py_DECREF on unowned object in _sre.

- Issue #27760: Fix possible integer overflow in binascii.b2a_qp.

- Issue #27758: Fix possible integer overflow in the _csv module for large record
  lengths.

- Issue #27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the
  HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates
  that the script is in CGI mode.

- Issue #27759: Fix selectors incorrectly retain invalid file descriptors.
  Patch by Mark Williams.

Build
-----

- Issue #28248: Update Windows build to use OpenSSL 1.0.2j.

Tests
-----

- Issue #27369: In test_pyexpat, avoid testing an error message detail that
  changed in Expat 2.2.0.


What's New in Python 3.4.5?
===========================

Release date: 2016-06-26

Tests
-----

- Issue #26867: Ubuntu's openssl OP_NO_SSLv3 is forced on by default; fix test.


What's New in Python 3.4.5rc1?
==============================

Release date: 2016-06-11

Core and Builtins
-----------------

- Issue #26478: Fix semantic bugs when using binary operators with dictionary
  views and tuples.

- Issue #26171: Fix possible integer overflow and heap corruption in
  zipimporter.get_data().

Library
-------

- Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283.

- Fix TLS stripping vulnerability in smptlib, CVE-2016-0772.  Reported by Team
  Oststrom

- Issue #25939: On Windows open the cert store readonly in ssl.enum_certificates.

- Issue #26012: Don't traverse into symlinks for ** pattern in
  pathlib.Path.[r]glob().

- Issue #24120: Ignore PermissionError when traversing a tree with
  pathlib.Path.[r]glob().  Patch by Ulrich Petri.

- Skip getaddrinfo if host is already resolved.
  Patch by A. Jesse Jiryu Davis.

- Add asyncio.timeout() context manager.

- Issue #26050: Add asyncio.StreamReader.readuntil() method.
  Patch by Марк Коренберг.

Tests
-----

- Issue #25940: Changed test_ssl to use self-signed.pythontest.net.  This
  avoids relying on svn.python.org, which recently changed root certificate.


What's New in Python 3.4.4?
===========================

Release date: 2015/12/20

Windows
-------

- Issue #25844: Corrected =/== typo potentially leading to crash in launcher.


What's New in Python 3.4.4rc1?
==============================

Release date: 2015/12/06

Core and Builtins
-----------------

- Issue #25709: Fixed problem with in-place string concatenation and utf-8
  cache.

- Issue #24097: Fixed crash in object.__reduce__() if slot name is freed inside
  __getattr__.

- Issue #24731: Fixed crash on converting objects with special methods
  __bytes__, __trunc__, and __float__ returning instances of subclasses of
  bytes, int, and float to subclasses of bytes, int, and float correspondingly.

- Issue #25388: Fixed tokenizer crash when processing undecodable source code
  with a null byte.

- Issue #22995: Default implementation of __reduce__ and __reduce_ex__ now
  rejects builtin types with not defined __new__.

- Issue #24802: Avoid buffer overreads when int(), float(), compile(), exec()
  and eval() are passed bytes-like objects.  These objects are not
  necessarily terminated by a null byte, but the functions assumed they were.

- Issue #24402: Fix input() to prompt to the redirected stdout when
  sys.stdout.fileno() fails.

- Issue #24806: Prevent builtin types that are not allowed to be subclassed from
  being subclassed through multiple inheritance.

- Issue #24848: Fixed a number of bugs in UTF-7 decoding of misformed data.

- Issue #25280: Import trace messages emitted in verbose (-v) mode are no
  longer formatted twice.

- Issue #25003: os.urandom() doesn't use getentropy() on Solaris because
  getentropy() is blocking, whereas os.urandom() should not block. getentropy()
  is supported since Solaris 11.3.

- Issue #25182: The stdprinter (used as sys.stderr before the io module is
  imported at startup) now uses the backslashreplace error handler.

- Issue #24891: Fix a race condition at Python startup if the file descriptor
  of stdin (0), stdout (1) or stderr (2) is closed while Python is creating
  sys.stdin, sys.stdout and sys.stderr objects. These attributes are now set
  to None if the creation of the object failed, instead of raising an OSError
  exception. Initial patch written by Marco Paolini.

- Issue #21167: NAN operations are now handled correctly when python is
  compiled with ICC even if -fp-model strict is not specified.

- Issue #4395: Better testing and documentation of binary operators.
  Patch by Martin Panter.

- Issue #24467: Fixed possible buffer over-read in bytearray. The bytearray
  object now always allocates place for trailing null byte and it's buffer now
  is always null-terminated.

- Issue #24115: Update uses of PyObject_IsTrue(), PyObject_Not(),
  PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains()
  to check for and handle errors correctly.

- Issue #24257: Fixed system error in the comparison of faked
  types.SimpleNamespace.

- Issue #22939: Fixed integer overflow in iterator object.  Patch by
  Clement Rouault.

- Issue #23985: Fix a possible buffer overrun when deleting a slice from
  the front of a bytearray and then appending some other bytes data.

- Issue #24102: Fixed exception type checking in standard error handlers.

- Issue #23757: PySequence_Tuple() incorrectly called the concrete list API
  when the data was a list subclass.

- Issue #24407: Fix crash when dict is mutated while being updated.

- Issue #24096: Make warnings.warn_explicit more robust against mutation of the
  warnings.filters list.

- Issue #23996: Avoid a crash when a delegated generator raises an
  unnormalized StopIteration exception.  Patch by Stefan Behnel.

- Issue #24022: Fix tokenizer crash when processing undecodable source code.

- Issue #23309: Avoid a deadlock at shutdown if a daemon thread is aborted
  while it is holding a lock to a buffered I/O object, and the main thread
  tries to use the same I/O object (typically stdout or stderr).  A fatal
  error is emitted instead.

- Issue #22977: Fixed formatting Windows error messages on Wine.
  Patch by Martin Panter.

- Issue #23803: Fixed str.partition() and str.rpartition() when a separator
  is wider then partitioned string.

- Issue #23192: Fixed generator lambdas.  Patch by Bruno Cauet.

- Issue #23629: Fix the default __sizeof__ implementation for variable-sized
  objects.

- Issue #24044: Fix possible null pointer dereference in list.sort in out of
  memory conditions.

- Issue #21354: PyCFunction_New function is exposed by python DLL again.

Library
-------

- Issue #24903: Fix regression in number of arguments compileall accepts when
  '-d' is specified.  The check on the number of arguments has been dropped
  completely as it never worked correctly anyway.

- Issue #25764: In the subprocess module, preserve any exception caused by
  fork() failure when preexec_fn is used.

- Issue #6478: _strptime's regexp cache now is reset after changing timezone
  with time.tzset().

- Issue #25177: Fixed problem with the mean of very small and very large
  numbers. As a side effect, statistics.mean and statistics.variance should
  be significantly faster.

- Issue #25718: Fixed copying object with state with boolean value is false.

- Issue #10131: Fixed deep copying of minidom documents.  Based on patch
  by Marian Ganisin.

- Issue #25725: Fixed a reference leak in pickle.loads() when unpickling
  invalid data including tuple instructions.

- Issue #25663: In the Readline completer, avoid listing duplicate global
  names, and search the global namespace before searching builtins.

- Issue #25688: Fixed file leak in ElementTree.iterparse() raising an error.

- Issue #23914: Fixed SystemError raised by unpickler on broken pickle data.

- Issue #25691: Fixed crash on deleting ElementTree.Element attributes.

- Issue #25624: ZipFile now always writes a ZIP_STORED header for directory
  entries.  Patch by Dingyuan Wang.

- Issue #25583: Avoid incorrect errors raised by os.makedirs(exist_ok=True)
  when the OS gives priority to errors such as EACCES over EEXIST.

- Issue #25593: Change semantics of EventLoop.stop() in asyncio.

- Issue #6973: When we know a subprocess.Popen process has died, do
  not allow the send_signal(), terminate(), or kill() methods to do
  anything as they could potentially signal a different process.

- Issue #25578: Fix (another) memory leak in SSLSocket.getpeercer().

- Issue #25590: In the Readline completer, only call getattr() once per
  attribute.

- Issue #25498: Fix a crash when garbage-collecting ctypes objects created
  by wrapping a memoryview.  This was a regression made in 3.4.3.  Based
  on patch by Eryksun.

- Issue #18010: Fix the pydoc web server's module search function to handle
  exceptions from importing packages.

- Issue #25510: fileinput.FileInput.readline() now returns b'' instead of ''
  at the end if the FileInput was opened with binary mode.
  Patch by Ryosuke Ito.

- Issue #25530: Disable the vulnerable SSLv3 protocol by default when creating
  ssl.SSLContext.

- Issue #25569: Fix memory leak in SSLSocket.getpeercert().

- Issue #21827: Fixed textwrap.dedent() for the case when largest common
  whitespace is a substring of smallest leading whitespace.
  Based on patch by Robert Li.

- Issue #25471: Sockets returned from accept() shouldn't appear to be
  nonblocking.

- Issue #25441: asyncio: Raise error from drain() when socket is closed.

- Issue #25411: Improved Unicode support in SMTPHandler through better use of
  the email package. Thanks to user simon04 for the patch.

- Issue #25380: Fixed protocol for the STACK_GLOBAL opcode in
  pickletools.opcodes.

- Issue #23972: Updates asyncio datagram create method allowing reuseport
  and reuseaddr socket options to be set prior to binding the socket.
  Mirroring the existing asyncio create_server method the reuseaddr option
  for datagram sockets defaults to True if the O/S is 'posix' (except if the
  platform is Cygwin). Patch by Chris Laws.

- Issue #25304: Add asyncio.run_coroutine_threadsafe().  This lets you
  submit a coroutine to a loop from another thread, returning a
  concurrent.futures.Future.  By Vincent Michel.

- Issue #25319: When threading.Event is reinitialized, the underlying condition
  should use a regular lock rather than a recursive lock.

- Issue #25232: Fix CGIRequestHandler to split the query from the URL at the
  first question mark (?) rather than the last. Patch from Xiang Zhang.

- Issue #24657: Prevent CGIRequestHandler from collapsing slashes in the
  query part of the URL as if it were a path. Patch from Xiang Zhang.

- Issue #22958: Constructor and update method of weakref.WeakValueDictionary
  now accept the self and the dict keyword arguments.

- Issue #22609: Constructor of collections.UserDict now accepts the self keyword
  argument.

- Issue #25262. Added support for BINBYTES8 opcode in Python implementation of
  unpickler.  Highest 32 bits of 64-bit size for BINUNICODE8 and BINBYTES8
  opcodes no longer silently ignored on 32-bit platforms in C implementation.

- Issue #25034: Fix string.Formatter problem with auto-numbering and
  nested format_specs. Patch by Anthon van der Neut.

- Issue #25233: Rewrite the guts of asyncio.Queue and
  asyncio.Semaphore to be more understandable and correct.

- Issue #23600: Default implementation of tzinfo.fromutc() was returning
  wrong results in some cases.

- Issue #25203: Failed readline.set_completer_delims() no longer left the
  module in inconsistent state.

- Prevent overflow in _Unpickler_Read.

- Issue #25047: The XML encoding declaration written by Element Tree now
  respects the letter case given by the user. This restores the ability to
  write encoding names in uppercase like "UTF-8", which worked in Python 2.

- Issue #19143: platform module now reads Windows version from kernel32.dll to
  avoid compatibility shims.

- Issue #23517: Fix rounding in fromtimestamp() and utcfromtimestamp() methods
  of datetime.datetime: microseconds are now rounded to nearest with ties
  going to nearest even integer (ROUND_HALF_EVEN), instead of being rounding
  towards zero (ROUND_DOWN). It's important that these methods use the same
  rounding mode than datetime.timedelta to keep the property:
  (datetime(1970,1,1) + timedelta(seconds=t)) == datetime.utcfromtimestamp(t).
  It also the rounding mode used by round(float) for example.

- Issue #24684: socket.socket.getaddrinfo() now calls
  PyUnicode_AsEncodedString() instead of calling the encode() method of the
  host, to handle correctly custom string with an encode() method which doesn't
  return a byte string. The encoder of the IDNA codec is now called directly
  instead of calling the encode() method of the string.

- Issue #24982: shutil.make_archive() with the "zip" format now adds entries
  for directories (including empty directories) in ZIP file.

- Issue #24857: Comparing call_args to a long sequence now correctly returns a
  boolean result instead of raising an exception.  Patch by A Kaptur.

- Issue #25019: Fixed a crash caused by setting non-string key of expat parser.
  Based on patch by John Leitch.

- Issue #24917: time_strftime() buffer over-read.

- Issue #23144: Make sure that HTMLParser.feed() returns all the data, even
  when convert_charrefs is True.

- Issue #16180: Exit pdb if file has syntax error, instead of trapping user
  in an infinite loop.  Patch by Xavier de Gaye.

- Issue #21112: Fix regression in unittest.expectedFailure on subclasses.
  Patch from Berker Peksag.

- Issue #24931: Instances of subclasses of namedtuples have their own __dict__
  which breaks the inherited __dict__ property and breaks the _asdict() method.
  Removed the __dict__ property to prevent the conflict and fixed _asdict().

- Issue #24764: cgi.FieldStorage.read_multi() now ignores the Content-Length
  header in part headers. Patch written by Peter Landry and reviewed by Pierre
  Quentel.

- Issue #24774: Fix docstring in http.server.test. Patch from Chiu-Hsiang Hsu.

- Issue #21159: Improve message in configparser.InterpolationMissingOptionError.
  Patch from Łukasz Langa.

- Issue #23888: Handle fractional time in cookie expiry. Patch by ssh.

- Issue #23004: mock_open() now reads binary data correctly when the type of
  read_data is bytes.  Initial patch by Aaron Hill.

- Issue #23652: Make it possible to compile the select module against the
  libc headers from the Linux Standard Base, which do not include some
  EPOLL macros.  Patch by Matt Frank.

- Issue #22932: Fix timezones in email.utils.formatdate.
  Patch from Dmitry Shachnev.

- Issue #23779: imaplib raises TypeError if authenticator tries to abort.
  Patch from Craig Holmquist.

- Issue #23319: Fix ctypes.BigEndianStructure, swap correctly bytes. Patch
  written by Matthieu Gautier.

- Issue #23254: Document how to close the TCPServer listening socket.
  Patch from Martin Panter.

- Issue #19450: Update Windows and OS X installer builds to use SQLite 3.8.11.

- Issue #23441: rcompleter now prints a tab character instead of displaying
  possible completions for an empty word.  Initial patch by Martin Sekera.

- Issue #24735: Fix invalid memory access in
  itertools.combinations_with_replacement().

- Issue #17527: Add PATCH to wsgiref.validator. Patch from Luca Sbardella.

- Issue #24683: Fixed crashes in _json functions called with arguments of
  inappropriate type.

- Issue #21697: shutil.copytree() now correctly handles symbolic links that
  point to directories.  Patch by Eduardo Seabra and Thomas Kluyver.

- Issue #24620: Random.setstate() now validates the value of state last element.

- Issue #22153: Improve unittest docs. Patch from Martin Panter and evilzero.

- Issue #24206: Fixed __eq__ and __ne__ methods of inspect classes.

- Issue #21750: mock_open.read_data can now be read from each instance, as it
  could in Python 3.3.

- Issue #23247: Fix a crash in the StreamWriter.reset() of CJK codecs.

- Issue #18622: unittest.mock.mock_open().reset_mock would recurse infinitely.
  Patch from Nicola Palumbo and Laurent De Buyst.

- Issue #24608: chunk.Chunk.read() now always returns bytes, not str.

- Issue #18684: Fixed reading out of the buffer in the re module.

- Issue #24259: tarfile now raises a ReadError if an archive is truncated
  inside a data segment.

- Issue #24552: Fix use after free in an error case of the _pickle module.

- Issue #24514: tarfile now tolerates number fields consisting of only
  whitespace.

- Issue #19176: Fixed doctype() related bugs in C implementation of ElementTree.
  A deprecation warning no longer issued by XMLParser subclass with default
  doctype() method.  Direct call of doctype() now issues a warning.  Parser's
  doctype() now is not called if target's doctype() is called.  Based on patch
  by Martin Panter.

- Issue #20387: Restore semantic round-trip correctness in tokenize/untokenize
  for tab-indented blocks.

- Issue #24456: Fixed possible buffer over-read in adpcm2lin() and lin2adpcm()
  functions of the audioop module.

- Issue #24336: The contextmanager decorator now works with functions with
  keyword arguments called "func" and "self".  Patch by Martin Panter.

- Issue #24489: ensure a previously set C errno doesn't disturb cmath.polar().

- Issue #5633: Fixed timeit when the statement is a string and the setup is not.

- Issue #24326: Fixed audioop.ratecv() with non-default weightB argument.
  Original patch by David Moore.

- Issue #23840: tokenize.open() now closes the temporary binary file on error
  to fix a resource warning.

- Issue #24257: Fixed segmentation fault in sqlite3.Row constructor with faked
  cursor type.

- Issue #22107: tempfile.gettempdir() and tempfile.mkdtemp() now try again
  when a directory with the chosen name already exists on Windows as well as
  on Unix.  tempfile.mkstemp() now fails early if parent directory is not
  valid (not exists or is a file) on Windows.

- Issue #6598: Increased time precision and random number range in
  email.utils.make_msgid() to strengthen the uniqueness of the message ID.

- Issue #24091: Fixed various crashes in corner cases in C implementation of
  ElementTree.

- Issue #21931: msilib.FCICreate() now raises TypeError in the case of a bad
  argument instead of a ValueError with a bogus FCI error number.
  Patch by Jeffrey Armstrong.

- Issue #23796: peek and read1 methods of BufferedReader now raise ValueError
  if they called on a closed object. Patch by John Hergenroeder.

- Issue #24521: Fix possible integer overflows in the pickle module.

- Issue #22931: Allow '[' and ']' in cookie values.

- Issue #20274: Remove ignored and erroneous "kwargs" parameters from three
  METH_VARARGS methods on _sqlite.Connection.

- Issue #24094: Fix possible crash in json.encode with poorly behaved dict
  subclasses.

- Asyncio issue 222 / PR 231 (Victor Stinner) -- fix @coroutine
  functions without __name__.

- Issue #9246: On POSIX, os.getcwd() now supports paths longer than 1025 bytes.
  Patch written by William Orr.

- The keywords attribute of functools.partial is now always a dictionary.

- Issues #24099, #24100, and #24101: Fix free-after-use bug in heapq's siftup
  and siftdown functions.

- Backport collections.deque fixes from Python 3.5.  Prevents reentrant badness
  during deletion by deferring the decref until the container has been restored
  to a consistent state.

- Issue #23008: Fixed resolving attributes with boolean value is False in pydoc.

- Fix asyncio issue 235: LifoQueue and PriorityQueue's put didn't
  increment unfinished tasks (this bug was introduced in 3.4.3 when
  JoinableQueue was merged with Queue).

- Issue #23908: os functions now reject paths with embedded null character
  on Windows instead of silently truncate them.

- Issue #23728: binascii.crc_hqx() could return an integer outside of the range
  0-0xffff for empty data.

- Issue #23811: Add missing newline to the PyCompileError error message.
  Patch by Alex Shkop.

- Issue #17898: Fix exception in gettext.py when parsing certain plural forms.

- Issue #22982: Improve BOM handling when seeking to multiple positions of
  a writable text file.

- Issue #23865: close() methods in multiple modules now are idempotent and more
  robust at shutdown. If they need to release multiple resources, all are
  released even if errors occur.

- Issue #23881: urllib.request.ftpwrapper constructor now closes the socket if
  the FTP connection failed to fix a ResourceWarning.

- Issue #23400: Raise same exception on both Python 2 and 3 if sem_open is not
  available.  Patch by Davin Potts.

- Issue #15133: _tkinter.tkapp.getboolean() now supports Tcl_Obj and always
  returns bool.  tkinter.BooleanVar now validates input values (accepted bool,
  int, str, and Tcl_Obj).  tkinter.BooleanVar.get() now always returns bool.

- Issue #23338: Fixed formatting ctypes error messages on Cygwin.
  Patch by Makoto Kato.

- Issue #16840: Tkinter now supports 64-bit integers added in Tcl 8.4 and
  arbitrary precision integers added in Tcl 8.5.

- Issue #23834: Fix socket.sendto(), use the C Py_ssize_t type to store the
  result of sendto() instead of the C int type.

- Issue #21526: Tkinter now supports new boolean type in Tcl 8.5.

- Issue #23838: linecache now clears the cache and returns an empty result on
  MemoryError.

- Issue #18473: Fixed 2to3 and 3to2 compatible pickle mappings.  Fixed
  ambiguous reverse mappings.  Added many new mappings.  Import mapping is no
  longer applied to modules already mapped with full name mapping.

- Issue #23745: The new email header parser now handles duplicate MIME
  parameter names without error, similar to how get_param behaves.

- Issue #23792: Ignore KeyboardInterrupt when the pydoc pager is active.
  This mimics the behavior of the standard unix pagers, and prevents
  pipepager from shutting down while the pager itself is still running.

- Issue #23742: ntpath.expandvars() no longer loses unbalanced single quotes.

- Issue #21802: The reader in BufferedRWPair now is closed even when closing
  writer failed in BufferedRWPair.close().

- Issue #23671: string.Template now allows to specify the "self" parameter as
  keyword argument.  string.Formatter now allows to specify the "self" and
  the "format_string" parameters as keyword arguments.

- Issue #21560: An attempt to write a data of wrong type no longer cause
  GzipFile corruption.  Original patch by Wolfgang Maier.

- Issue #23647: Increase imaplib's MAXLINE to accommodate modern mailbox sizes.

- Issue #23539: If body is None, http.client.HTTPConnection.request now sets
  Content-Length to 0 for PUT, POST, and PATCH headers to avoid 411 errors from
  some web servers.

- Issue #22351: The nntplib.NNTP constructor no longer leaves the connection
  and socket open until the garbage collector cleans them up.  Patch by
  Martin Panter.

- Issue #23136: _strptime now uniformly handles all days in week 0, including
  Dec 30 of previous year.  Based on patch by Jim Carroll.

- Issue #23700: Iterator of NamedTemporaryFile now keeps a reference to
  NamedTemporaryFile instance.  Patch by Bohuslav Kabrda.

- Issue #22903: The fake test case created by unittest.loader when it fails
  importing a test module is now picklable.

- Issue #23568: Add rdivmod support to MagicMock() objects.
  Patch by Håkan Lövdahl.

- Issue #23138: Fixed parsing cookies with absent keys or values in cookiejar.
  Patch by Demian Brecht.

- Issue #23051: multiprocessing.Pool methods imap() and imap_unordered() now
  handle exceptions raised by an iterator.  Patch by Alon Diamant and Davin
  Potts.

- Issue #22928: Disabled HTTP header injections in http.client.
  Original patch by Demian Brecht.

- Issue #23615: Modules bz2, tarfile and tokenize now can be reloaded with
  imp.reload().  Patch by Thomas Kluyver.

- Issue #23476: In the ssl module, enable OpenSSL's X509_V_FLAG_TRUSTED_FIRST
  flag on certificate stores when it is available.

- Issue #23576: Avoid stalling in SSL reads when EOF has been reached in the
  SSL layer but the underlying connection hasn't been closed.

- Issue #23504: Added an __all__ to the types module.

- Issue #20204: Added the __module__ attribute to _tkinter classes.

- Issue #23521: Corrected pure python implementation of timedelta division.

 * Eliminated OverflowError from timedelta * float for some floats;
 * Corrected rounding in timedelta true division.

- Issue #21619: Popen objects no longer leave a zombie after exit in the with
  statement if the pipe was broken.  Patch by Martin Panter.

- Issue #6639: Module-level turtle functions no longer raise TclError after
  closing the window.

- Issues #814253, #9179: Warnings now are raised when group references and
  conditional group references are used in lookbehind assertions in regular
  expressions.

- Issue #23215: Multibyte codecs with custom error handlers that ignores errors
  consumed too much memory and raised SystemError or MemoryError.
  Original patch by Aleksi Torhamo.

- Issue #5700: io.FileIO() called flush() after closing the file.
  flush() was not called in close() if closefd=False.

- Issue #23374: Fixed pydoc failure with non-ASCII files when stdout encoding
  differs from file system encoding (e.g. on Mac OS).

- Issue #23481: Remove RC4 from the SSL module's default cipher list.

- Issue #21548: Fix pydoc.synopsis() and pydoc.apropos() on modules with empty
  docstrings.

- Issue #22885: Fixed arbitrary code execution vulnerability in the dbm.dumb
  module.  Original patch by Claudiu Popa.

- Issue #23146: Fix mishandling of absolute Windows paths with forward
  slashes in pathlib.

- Issue #23421: Fixed compression in tarfile CLI.  Patch by wdv4758h.

- Issue #23367: Fix possible overflows in the unicodedata module.

- Issue #23361: Fix possible overflow in Windows subprocess creation code.

- Issue #23801: Fix issue where cgi.FieldStorage did not always ignore the
  entire preamble to a multipart body.

- Issue #23310: Fix MagicMock's initializer to work with __methods__, just
  like configure_mock().  Patch by Kasia Jachim.

- asyncio: New event loop APIs: set_task_factory() and get_task_factory().

- asyncio: async() function is deprecated in favour of ensure_future().

- Issue #23898: Fix inspect.classify_class_attrs() to support attributes
  with overloaded __eq__ and __bool__.  Patch by Mike Bayer.

- Issue #24298: Fix inspect.signature() to correctly unwrap wrappers
  around bound methods.

- Issue #23572: Fixed functools.singledispatch on classes with falsy
  metaclasses.  Patch by Ethan Furman.

IDLE
----

- Issue 15348: Stop the debugger engine (normally in a user process)
  before closing the debugger window (running in the IDLE process).
  This prevents the RuntimeErrors that were being caught and ignored.

- Issue #24455: Prevent IDLE from hanging when a) closing the shell while the
  debugger is active (15347); b) closing the debugger with the [X] button
  (15348); and c) activating the debugger when already active (24455).
  The patch by Mark Roseman does this by making two changes.
  1. Suspend and resume the gui.interaction method with the tcl vwait
  mechanism intended for this purpose (instead of root.mainloop & .quit).
  2. In gui.run, allow any existing interaction to terminate first.

- Change 'The program' to 'Your program' in an IDLE 'kill program?' message
  to make it clearer that the program referred to is the currently running
  user program, not IDLE itself.

- Issue #24750: Improve the appearance of the IDLE editor window status bar.
  Patch by Mark Roseman.

- Issue #25313: Change the handling of new built-in text color themes to better
  address the compatibility problem introduced by the addition of IDLE Dark.
  Consistently use the revised idleConf.CurrentTheme everywhere in idlelib.

- Issue #24782: Extension configuration is now a tab in the IDLE Preferences
  dialog rather than a separate dialog.   The former tabs are now a sorted
  list.  Patch by Mark Roseman.

- Issue #22726: Re-activate the config dialog help button with some content
  about the other buttons and the new IDLE Dark theme.

- Issue #24820: IDLE now has an 'IDLE Dark' built-in text color theme.
  It is more or less IDLE Classic inverted, with a cobalt blue background.
  Strings, comments, keywords, ... are still green, red, orange, ... .
  To use it with IDLEs released before November 2015, hit the
  'Save as New Custom Theme' button and enter a new name,
  such as 'Custom Dark'.  The custom theme will work with any IDLE
  release, and can be modified.

- Issue #25224: README.txt is now an idlelib index for IDLE developers and
  curious users.  The previous user content is now in the IDLE doc chapter.
  'IDLE' now means 'Integrated Development and Learning Environment'.

- Issue #24820: Users can now set breakpoint colors in
  Settings -> Custom Highlighting.  Original patch by Mark Roseman.

- Issue #24972: Inactive selection background now matches active selection
  background, as configured by users, on all systems.  Found items are now
  always highlighted on Windows.  Initial patch by Mark Roseman.

- Issue #24570: Idle: make calltip and completion boxes appear on Macs
  affected by a tk regression.  Initial patch by Mark Roseman.

- Issue #24988: Idle ScrolledList context menus (used in debugger)
  now work on Mac Aqua.  Patch by Mark Roseman.

- Issue #24801: Make right-click for context menu work on Mac Aqua.
  Patch by Mark Roseman.

- Issue #25173: Associate tkinter messageboxes with a specific widget.
  For Mac OSX, make them a 'sheet'.  Patch by Mark Roseman.

- Issue #25198: Enhance the initial html viewer now used for Idle Help.
  * Properly indent fixed-pitch text (patch by Mark Roseman).
  * Give code snippet a very Sphinx-like light blueish-gray background.
  * Re-use initial width and height set by users for shell and editor.
  * When the Table of Contents (TOC) menu is used, put the section header
  at the top of the screen.

- Issue #25225: Condense and rewrite Idle doc section on text colors.

- Issue #21995: Explain some differences between IDLE and console Python.

- Issue #22820: Explain need for *print* when running file from Idle editor.

- Issue #25224: Doc: augment Idle feature list and no-subprocess section.

- Issue #25219: Update doc for Idle command line options.
  Some were missing and notes were not correct.

- Issue #24861: Most of idlelib is private and subject to change.
  Use idleib.idle.* to start Idle. See idlelib.__init__.__doc__.

- Issue #25199: Idle: add synchronization comments for future maintainers.

- Issue #16893: Replace help.txt with help.html for Idle doc display.
  The new idlelib/help.html is rstripped Doc/build/html/library/idle.html.
  It looks better than help.txt and will better document Idle as released.
  The tkinter html viewer that works for this file was written by Mark Roseman.
  The now unused EditorWindow.HelpDialog class and helt.txt file are deprecated.

- Issue #24199: Deprecate unused idlelib.idlever with possible removal in 3.6.

- Issue #24790: Remove extraneous code (which also create 2 & 3 conflicts).

- Issue #23672: Allow Idle to edit and run files with astral chars in name.
  Patch by Mohd Sanad Zaki Rizvi.

- Issue 24745: Idle editor default font. Switch from Courier to
  platform-sensitive TkFixedFont.  This should not affect current customized
  font selections.  If there is a problem, edit $HOME/.idlerc/config-main.cfg
  and remove 'fontxxx' entries from [Editor Window].  Patch by Mark Roseman.

- Issue #21192: Idle editor. When a file is run, put its name in the restart bar.
  Do not print false prompts. Original patch by Adnan Umer.

- Issue #13884: Idle menus. Remove tearoff lines. Patch by Roger Serwy.

- Issue #23184: remove unused names and imports in idlelib.
  Initial patch by Al Sweigart.

Tests
-----

- Issue #25616: Tests for OrderedDict are extracted from test_collections
  into separate file test_ordered_dict.

- Issue #25099: Make test_compileall not fail when an entry on sys.path cannot
  be written to (commonly seen in administrative installs on Windows).

- Issue #24751: When running regrtest with the ``-w`` command line option,
  a test run is no longer marked as a failure if all tests succeed when
  re-run.

- Issue #21520: test_zipfile no longer fails if the word 'bad' appears
  anywhere in the name of the current directory.

- Issue #23799: Added test.support.start_threads() for running and
  cleaning up multiple threads.

- Issue #22390: test.regrtest now emits a warning if temporary files or
  directories are left after running a test.

- Issue #23583: Added tests for standard IO streams in IDLE.

Build
-----

- Issue #23445: pydebug builds now use "gcc -Og" where possible, to make
  the resulting executable faster.

- Issue #24603: Update Windows builds to use OpenSSL1.0.2d
  and OS X 10.5 installer to use OpenSSL 1.0.2e.

C API
-----

- Issue #23998: PyImport_ReInitLock() now checks for lock allocation error

Documentation
-------------

- Issue #12067: Rewrite Comparisons section in the Expressions chapter of the
  language reference. Some of the details of comparing mixed types were
  incorrect or ambiguous. NotImplemented is only relevant at a lower level
  than the Expressions chapter. Added details of comparing range() objects,
  and default behaviour and consistency suggestions for user-defined classes.
  Patch from Andy Maier.

- Issue #24952: Clarify the default size argument of stack_size() in
  the "threading" and "_thread" modules. Patch from Mattip.

- Issue #24808: Update the types of some PyTypeObject fields. Patch by
  Joseph Weston.

- Issue #22812: Fix unittest discovery examples.
  Patch from Pam McA'Nulty.

- Issue #24129: Clarify the reference documentation for name resolution.
  This includes removing the assumption that readers will be familiar with the
  name resolution scheme Python used prior to the introduction of lexical
  scoping for function namespaces. Patch by Ivan Levkivskyi.

- Issue #20769: Improve reload() docs. Patch by Dorian Pula.

- Issue #23589: Remove duplicate sentence from the FAQ.  Patch by Yongzhi Pan.

- Issue #24729: Correct IO tutorial to match implementation regarding
  encoding parameter to open function.

- Issue #24351: Clarify what is meant by "identifier" in the context of
  string.Template instances.

- Issue #22155: Add File Handlers subsection with createfilehandler to tkinter
  doc.  Remove obsolete example from FAQ.  Patch by Martin Panter.

- Issue #24029: Document the name binding behavior for submodule imports.

- Issue #24077: Fix typo in man page for -I command option: -s, not -S.

Tools/Demos
-----------

- Issue #25440: Fix output of python-config --extension-suffix.

- Issue #23330: h2py now supports arbitrary filenames in #include.

- Issue #24031: make patchcheck now supports git checkouts, too.

Windows
-------

- Issue #24306: Sets component ID for launcher to match 3.5 and later
  to avoid downgrading.

- Issue #25022: Removed very outdated PC/example_nt/ directory.


What's New in Python 3.4.3?
===========================

Release date: 2015-02-23

Core and Builtins
-----------------

- Issue #22735: Fix many edge cases (including crashes) involving custom mro()
  implementations.

- Issue #22896: Avoid using PyObject_AsCharBuffer(), PyObject_AsReadBuffer()
  and PyObject_AsWriteBuffer().

- Issue #21295: Revert some changes (issue #16795) to AST line numbers and
  column offsets that constituted a regression.

- Issue #21408: The default __ne__() now returns NotImplemented if __eq__()
  returned NotImplemented.  Original patch by Martin Panter.

- Issue #23321: Fixed a crash in str.decode() when error handler returned
  replacement string longer than malformed input data.

- Issue #23048: Fix jumping out of an infinite while loop in the pdb.

- Issue #20335: bytes constructor now raises TypeError when encoding or errors
  is specified with non-string argument.  Based on patch by Renaud Blanch.

- Issue #22335: Fix crash when trying to enlarge a bytearray to 0x7fffffff
  bytes on a 32-bit platform.

- Issue #22653: Fix an assertion failure in debug mode when doing a reentrant
  dict insertion in debug mode.

- Issue #22643: Fix integer overflow in Unicode case operations (upper, lower,
  title, swapcase, casefold).

- Issue #22604: Fix assertion error in debug mode when dividing a complex
  number by (nan+0j).

- Issue #22470: Fixed integer overflow issues in "backslashreplace",
  "xmlcharrefreplace", and "surrogatepass" error handlers.

- Issue #22520: Fix overflow checking when generating the repr of a unicode
  object.

- Issue #22519: Fix overflow checking in PyBytes_Repr.

- Issue #22518: Fix integer overflow issues in latin-1 encoding.

- Issue #23165: Perform overflow checks before allocating memory in the
  _Py_char2wchar function.

Library
-------

- Issue #23399: pyvenv creates relative symlinks where possible.

- Issue #23099: Closing io.BytesIO with exported buffer is rejected now to
  prevent corrupting exported buffer.

- Issue #23363: Fix possible overflow in itertools.permutations.

- Issue #23364: Fix possible overflow in itertools.product.

- Issue #23366: Fixed possible integer overflow in itertools.combinations.

- Issue #23369: Fixed possible integer overflow in
  _json.encode_basestring_ascii.

- Issue #23353: Fix the exception handling of generators in
  PyEval_EvalFrameEx(). At entry, save or swap the exception state even if
  PyEval_EvalFrameEx() is called with throwflag=0. At exit, the exception state
  is now always restored or swapped, not only if why is WHY_YIELD or
  WHY_RETURN. Patch co-written with Antoine Pitrou.

- Issue #18518: timeit now rejects statements which can't be compiled outside
  a function or a loop (e.g. "return" or "break").

- Issue #23094: Fixed readline with frames in Python implementation of pickle.

- Issue #23268: Fixed bugs in the comparison of ipaddress classes.

- Issue #21408: Removed incorrect implementations of __ne__() which didn't
  returned NotImplemented if __eq__() returned NotImplemented.  The default
  __ne__() now works correctly.

- Issue #19996: :class:`email.feedparser.FeedParser` now handles (malformed)
  headers with no key rather than assuming the body has started.

- Issue #23248: Update ssl error codes from latest OpenSSL git master.

- Issue #23098: 64-bit dev_t is now supported in the os module.

- Issue #23250: In the http.cookies module, capitalize "HttpOnly" and "Secure"
  as they are written in the standard.

- Issue #23063: In the distutils' check command, fix parsing of reST with code or
  code-block directives.

- Issue #23209, #23225: selectors.BaseSelector.close() now clears its internal
  reference to the selector mapping to break a reference cycle. Initial patch
  written by Martin Richard.

- Issue #21356: Make ssl.RAND_egd() optional to support LibreSSL. The
  availability of the function is checked during the compilation. Patch written
  by Bernard Spil.

- Issue #20896, #22935: The :func:`ssl.get_server_certificate` function now
  uses the :data:`~ssl.PROTOCOL_SSLv23` protocol by default, not
  :data:`~ssl.PROTOCOL_SSLv3`, for maximum compatibility and support platforms
  where :data:`~ssl.PROTOCOL_SSLv3` support is disabled.

- Issue #23111: In the ftplib, make ssl.PROTOCOL_SSLv23 the default protocol
  version.

- Issue #23132: Mitigate regression in speed and clarity in functools.total_ordering.

- Issue #22585: On OpenBSD 5.6 and newer, os.urandom() now calls getentropy(),
  instead of reading /dev/urandom, to get pseudo-random bytes.

- Issue #23112: Fix SimpleHTTPServer to correctly carry the query string and
  fragment when it redirects to add a trailing slash.

- Issue #23093: In the io, module allow more operations to work on detached
  streams.

- Issue #19104: pprint now produces evaluable output for wrapped strings.

- Issue #23071: Added missing names to codecs.__all__.  Patch by Martin Panter.

- Issue #15513: Added a __sizeof__ implementation for pickle classes.

- Issue #19858: pickletools.optimize() now aware of the MEMOIZE opcode, can
  produce more compact result and no longer produces invalid output if input
  data contains MEMOIZE opcodes together with PUT or BINPUT opcodes.

- Issue #22095: Fixed HTTPConnection.set_tunnel with default port.  The port
  value in the host header was set to "None".  Patch by Demian Brecht.

- Issue #23016: A warning no longer produces an AttributeError when the program
  is run with pythonw.exe.

- Issue #21775: shutil.copytree(): fix crash when copying to VFAT. An exception
  handler assumed that that OSError objects always have a 'winerror' attribute.
  That is not the case, so the exception handler itself raised AttributeError
  when run on Linux (and, presumably, any other non-Windows OS).
  Patch by Greg Ward.

- Issue #1218234: Fix inspect.getsource() to load updated source of
  reloaded module. Initial patch by Berker Peksag.

- Issue #22959: In the constructor of http.client.HTTPSConnection, prefer the
  context's check_hostname attribute over the *check_hostname* parameter.

- Issue #16043: Add a default limit for the amount of data xmlrpclib.gzip_decode
  will return. This resolves CVE-2013-1753.

- Issue #22966: Fix __pycache__ pyc file name clobber when pyc_compile is
  asked to compile a source file containing multiple dots in the source file
  name.

- Issue #21971: Update turtledemo doc and add module to the index.

- Issue #21032. Fixed socket leak if HTTPConnection.getresponse() fails.
  Original patch by Martin Panter.

- Issue #22960: Add a context argument to xmlrpclib.ServerProxy constructor.

- Issue #22915: SAX parser now supports files opened with file descriptor or
  bytes path.

- Issue #22609: Constructors and update methods of mapping classes in the
  collections module now accept the self keyword argument.

- Issue #22788: Add *context* parameter to logging.handlers.HTTPHandler.

- Issue #22921: Allow SSLContext to take the *hostname* parameter even if
  OpenSSL doesn't support SNI.

- Issue #22894: TestCase.subTest() would cause the test suite to be stopped
  when in failfast mode, even in the absence of failures.

- Issue #22638: SSLv3 is now disabled throughout the standard library.
  It can still be enabled by instantiating a SSLContext manually.

- Issue #22370: Windows detection in pathlib is now more robust.

- Issue #22841: Reject coroutines in asyncio add_signal_handler().
  Patch by Ludovic.Gasc.

- Issue #22849: Fix possible double free in the io.TextIOWrapper constructor.

- Issue #12728: Different Unicode characters having the same uppercase but
  different lowercase are now matched in case-insensitive regular expressions.

- Issue #22821: Fixed fcntl() with integer argument on 64-bit big-endian
  platforms.

- Issue #22406: Fixed the uu_codec codec incorrectly ported to 3.x.
  Based on patch by Martin Panter.

- Issue #17293: uuid.getnode() now determines MAC address on AIX using netstat.
  Based on patch by Aivars Kalvāns.

- Issue #22769: Fixed ttk.Treeview.tag_has() when called without arguments.

- Issue #22417: Verify certificates by default in httplib (PEP 476).

- Issue #22775: Fixed unpickling of http.cookies.SimpleCookie with protocol 2
  and above.  Patch by Tim Graham.

- Issue #22366: urllib.request.urlopen will accept a context object
  (SSLContext) as an argument which will then used be for HTTPS connection.
  Patch by Alex Gaynor.

- Issue #22776: Brought excluded code into the scope of a try block in
  SysLogHandler.emit().

- Issue #22665: Add missing get_terminal_size and SameFileError to
  shutil.__all__.

- Issue #17381: Fixed handling of case-insensitive ranges in regular
  expressions.

- Issue #22410: Module level functions in the re module now cache compiled
  locale-dependent regular expressions taking into account the locale.

- Issue #22759: Query methods on pathlib.Path() (exists(), is_dir(), etc.)
  now return False when the underlying stat call raises NotADirectoryError.

- Issue #8876: distutils now falls back to copying files when hard linking
  doesn't work.  This allows use with special filesystems such as VirtualBox
  shared folders.

- Issue #18853: Fixed ResourceWarning in shlex.__nain__.

- Issue #9351: Defaults set with set_defaults on an argparse subparser
  are no longer ignored when also set on the parent parser.

- Issue #21991: Make email.headerregistry's header 'params' attributes
  be read-only (MappingProxyType).  Previously the dictionary was modifiable
  but a new one was created on each access of the attribute.

- Issue #22641: In asyncio, the default SSL context for client connections
  is now created using ssl.create_default_context(), for stronger security.

- Issue #22435: Fix a file descriptor leak when SocketServer bind fails.

- Issue #13096: Fixed segfault in CTypes POINTER handling of large
  values.

- Issue #11694: Raise ConversionError in xdrlib as documented.  Patch
  by Filip Gruszczyński and Claudiu Popa.

- Issue #22462: Fix pyexpat's creation of a dummy frame to make it
  appear in exception tracebacks.

- Issue #21173: Fix len() on a WeakKeyDictionary when .clear() was called
  with an iterator alive.

- Issue #11866: Eliminated race condition in the computation of names
  for new threads.

- Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules
  is mutated while iterating.  Patch by Olivier Grisel.

- Issue #22219: The zipfile module CLI now adds entries for directories
  (including empty directories) in ZIP file.

- Issue #22449: In the ssl.SSLContext.load_default_certs, consult the
  environmental variables SSL_CERT_DIR and SSL_CERT_FILE on Windows.

- Issue #20076: Added non derived UTF-8 aliases to locale aliases table.

- Issue #20079: Added locales supported in glibc 2.18 to locale alias table.

- Issue #22396: On 32-bit AIX platform, don't expose os.posix_fadvise() nor
  os.posix_fallocate() because their prototypes in system headers are wrong.

- Issue #22517: When an io.BufferedRWPair object is deallocated, clear its
  weakrefs.

- Issue #22448: Improve canceled timer handles cleanup to prevent
  unbound memory usage. Patch by Joshua Moore-Oliva.

- Issue #23009: Make sure selectors.EpollSelector.select() works when no
  FD is registered.

IDLE
----

- Issue #20577: Configuration of the max line length for the FormatParagraph
  extension has been moved from the General tab of the Idle preferences dialog
  to the FormatParagraph tab of the Config Extensions dialog.
  Patch by Tal Einat.

- Issue #16893: Update Idle doc chapter to match current Idle and add new
  information.

- Issue #3068: Add Idle extension configuration dialog to Options menu.
  Changes are written to HOME/.idlerc/config-extensions.cfg.
  Original patch by Tal Einat.

- Issue #16233: A module browser (File : Class Browser, Alt+C) requires an
  editor window with a filename.  When Class Browser is requested otherwise,
  from a shell, output window, or 'Untitled' editor, Idle no longer displays
  an error box.  It now pops up an Open Module box (Alt+M). If a valid name
  is entered and a module is opened, a corresponding browser is also opened.

- Issue #4832: Save As to type Python files automatically adds .py to the
  name you enter (even if your system does not display it).  Some systems
  automatically add .txt when type is Text files.

- Issue #21986: Code objects are not normally pickled by the pickle module.
  To match this, they are no longer pickled when running under Idle.

- Issue #23180: Rename IDLE "Windows" menu item to "Window".
  Patch by Al Sweigart.

Tests
-----

- Issue #23392: Added tests for marshal C API that works with FILE*.

- Issue #18982: Add tests for CLI of the calendar module.

- Issue #19548: Added some additional checks to test_codecs to ensure that
  statements in the updated documentation remain accurate. Patch by Martin
  Panter.

- Issue #22838: All test_re tests now work with unittest test discovery.

- Issue #22173: Update lib2to3 tests to use unittest test discovery.

- Issue #16000: Convert test_curses to use unittest.

- Issue #21456: Skip two tests in test_urllib2net.py if _ssl module not
  present. Patch by Remi Pointel.

- Issue #22770: Prevent some Tk segfaults on OS X when running gui tests.

- Issue #23211: Workaround test_logging failure on some OS X 10.6 systems.

- Issue #23345: Prevent test_ssl failures with large OpenSSL patch level
  values (like 0.9.8zc).

- Issue #22289: Prevent test_urllib2net failures due to ftp connection timeout.

Build
-----

- Issue #15506: Use standard PKG_PROG_PKG_CONFIG autoconf macro in the configure
  script.

- Issue #22935: Allow the ssl module to be compiled if openssl doesn't support
  SSL 3.

- Issue #16537: Check whether self.extensions is empty in setup.py. Patch by
  Jonathan Hosmer.

- Issue #18096: Fix library order returned by python-config.

- Issue #17219: Add library build dir for Python extension cross-builds.

- Issue #17128: Use private version of OpenSSL for 3.4.3 OS X 10.5+ installer.

C API
-----

- Issue #22079: PyType_Ready() now checks that statically allocated type has
  no dynamically allocated bases.

Documentation
-------------

- Issue #19548: Update the codecs module documentation to better cover the
  distinction between text encodings and other codecs, together with other
  clarifications. Patch by Martin Panter.

- Issue #22914: Update the Python 2/3 porting HOWTO to describe a more automated
  approach.

- Issue #21514: The documentation of the json module now refers to new JSON RFC
  7159 instead of obsoleted RFC 4627.

Tools/Demos
-----------

- Issue #22314: pydoc now works when the LINES environment variable is set.

Windows
-------

- Issue #17896: The Windows build scripts now expect external library sources
  to be in ``PCbuild\..\externals`` rather than ``PCbuild\..\..``.

- Issue #17717: The Windows build scripts now use a copy of NASM pulled from
  svn.python.org to build OpenSSL.

- Issue #22644: The bundled version of OpenSSL has been updated to 1.0.1j.


What's New in Python 3.4.2?
===========================

Release date: 2014-10-06

Library
-------

- Issue #10510: distutils register and upload methods now use HTML standards
  compliant CRLF line endings.

- Issue #9850: Fixed macpath.join() for empty first component.  Patch by
  Oleg Oshmyan.

- Issue #22427: TemporaryDirectory no longer attempts to clean up twice when
  used in the with statement in generator.

- Issue #20912: Now directories added to ZIP file have correct Unix and MS-DOS
  directory attributes.

- Issue #21866: ZipFile.close() no longer writes ZIP64 central directory
  records if allowZip64 is false.

- Issue #22415: Fixed debugging output of the GROUPREF_EXISTS opcode in the re
  module.  Removed trailing spaces in debugging output.

- Issue #22423: Unhandled exception in thread no longer causes unhandled
  AttributeError when sys.stderr is None.

- Issue #21332: Ensure that ``bufsize=1`` in subprocess.Popen() selects
  line buffering, rather than block buffering.  Patch by Akira Li.


What's New in Python 3.4.2rc1?
==============================

Release date: 2014-09-22

Core and Builtins
-----------------

- Issue #22258: Fix the internal function set_inheritable() on Illumos.
  This platform exposes the function ``ioctl(FIOCLEX)``, but calling it fails
  with errno is ENOTTY: "Inappropriate ioctl for device". set_inheritable()
  now falls back to the slower ``fcntl()`` (``F_GETFD`` and then ``F_SETFD``).

- Issue #21669: With the aid of heuristics in SyntaxError.__init__, the
  parser now attempts to generate more meaningful (or at least more search
  engine friendly) error messages when "exec" and "print" are used as
  statements.

- Issue #21642: In the conditional if-else expression, allow an integer written
  with no space between itself and the ``else`` keyword (e.g. ``True if 42else
  False``) to be valid syntax.

- Issue #21523: Fix over-pessimistic computation of the stack effect of
  some opcodes in the compiler.  This also fixes a quadratic compilation
  time issue noticeable when compiling code with a large number of "and"
  and "or" operators.

Library
-------

- Issue #21091: Fix API bug: email.message.EmailMessage.is_attachment is now
  a method.  Since EmailMessage is provisional, we can change the API in a
  maintenance release, but we use a trick to remain backward compatible with
  3.4.0/1.

- Issue #21079: Fix email.message.EmailMessage.is_attachment to return the
  correct result when the header has parameters as well as a value.

- Issue #22247: Add NNTPError to nntplib.__all__.

- Issue #4180: The warnings registries are now reset when the filters
  are modified.

- Issue #22419: Limit the length of incoming HTTP request in wsgiref server to
  65536 bytes and send a 414 error code for higher lengths. Patch contributed
  by Devin Cook.

- Lax cookie parsing in http.cookies could be a security issue when combined
  with non-standard cookie handling in some web browsers.  Reported by
  Sergey Bobrov.

- Issue #22384: An exception in Tkinter callback no longer crashes the program
  when it is run with pythonw.exe.

- Issue #22168: Prevent turtle AttributeError with non-default Canvas on OS X.

- Issue #21147: sqlite3 now raises an exception if the request contains a null
  character instead of truncate it.  Based on patch by Victor Stinner.

- Issue #21951: Fixed a crash in Tkinter on AIX when called Tcl command with
  empty string or tuple argument.

- Issue #21951: Tkinter now most likely raises MemoryError instead of crash
  if the memory allocation fails.

- Issue #22338: Fix a crash in the json module on memory allocation failure.

- Issue #22226: First letter no longer is stripped from the "status" key in
  the result of Treeview.heading().

- Issue #19524: Fixed resource leak in the HTTP connection when an invalid
  response is received.  Patch by Martin Panter.

- Issue #22051: turtledemo no longer reloads examples to re-run them.
  Initialization of variables and gui setup should be done in main(),
  which is called each time a demo is run, but not on import.

- Issue #21933: Turtledemo users can change the code font size with a menu
  selection or control(command) '-' or '+' or control-mousewheel.
  Original patch by Lita Cho.

- Issue #21597: The separator between the turtledemo text pane and the drawing
  canvas can now be grabbed and dragged with a mouse.  The code text pane can
  be widened to easily view or copy the full width of the text.  The canvas
  can be widened on small screens.  Original patches by Jan Kanis and Lita Cho.

- Issue #18132: Turtledemo buttons no longer disappear when the window is
  shrunk.  Original patches by Jan Kanis and Lita Cho.

- Issue #22216: smtplib now resets its state more completely after a quit.  The
  most obvious consequence of the previous behavior was a STARTTLS failure
  during a connect/starttls/quit/connect/starttls sequence.

- Issue #22185: Fix an occasional RuntimeError in threading.Condition.wait()
  caused by mutation of the waiters queue without holding the lock.  Patch
  by Doug Zongker.

- Issue #22182: Use e.args to unpack exceptions correctly in
  distutils.file_util.move_file. Patch by Claudiu Popa.

- The webbrowser module now uses subprocess's start_new_session=True rather
  than a potentially risky preexec_fn=os.setsid call.

- Issue #22236: Fixed Tkinter images copying operations in NoDefaultRoot mode.

- Issue #22191: Fix warnings.__all__.

- Issue #15696: Add a __sizeof__ implementation for mmap objects on Windows.

- Issue #22068: Avoided reference loops with Variables and Fonts in Tkinter.

- Issue #22165: SimpleHTTPRequestHandler now supports undecodable file names.

- Issue #8797: Raise HTTPError on failed Basic Authentication immediately.
  Initial patch by Sam Bull.

- Issue #20729: Restored the use of lazy iterkeys()/itervalues()/iteritems()
  in the mailbox module.

- Issue #21448: Changed FeedParser feed() to avoid O(N**2) behavior when
  parsing long line.  Original patch by Raymond Hettinger.

- Issue #22184: The functools LRU Cache decorator factory now gives an earlier
  and clearer error message when the user forgets the required parameters.

- Issue #17923: glob() patterns ending with a slash no longer match non-dirs on
  AIX.  Based on patch by Delhallt.

- Issue #21121: Don't force 3rd party C extensions to be built with
  -Werror=declaration-after-statement.

- Issue #21975: Fixed crash when using uninitialized sqlite3.Row (in particular
  when unpickling pickled sqlite3.Row).  sqlite3.Row is now initialized in the
  __new__() method.

- Issue #21580: Now Tkinter correctly handles bytes arguments passed to Tk.
  In particular this allows to initialize images from binary data.

- Issue #17172: Make turtledemo start as active on OS X even when run with
  subprocess.  Patch by Lita Cho.

- Issue #21704: Fix build error for _multiprocessing when semaphores
  are not available.  Patch by Arfrever Frehtes Taifersar Arahesis.

- Fix repr(_socket.socket) on Windows 64-bit: don't fail with OverflowError
  on closed socket. repr(socket.socket) already works fine.

- Issue #16133: The asynchat.async_chat.handle_read() method now ignores
  BlockingIOError exceptions.

- Issue #22044: Fixed premature DECREF in call_tzinfo_method.
  Patch by Tom Flanagan.

- Issue #19884: readline: Disable the meta modifier key if stdout is not
  a terminal to not write the ANSI sequence "\033[1034h" into stdout. This
  sequence is used on some terminal (ex: TERM=xterm-256color") to enable
  support of 8 bit characters.

- Issue #21888: plistlib's load() and loads() now work if the fmt parameter is
  specified.

- Issue #21044: tarfile.open() now handles fileobj with an integer 'name'
  attribute.  Based on patch by Antoine Pietri.

- Issue #21867: Prevent turtle crash due to invalid undo buffer size.

- Issue #19076: Don't pass the redundant 'file' argument to self.error().

- Issue #21942: Fixed source file viewing in pydoc's server mode on Windows.

- Issue #11259: asynchat.async_chat().set_terminator() now raises a ValueError
  if the number of received bytes is negative.

- Issue #12523: asynchat.async_chat.push() now raises a TypeError if it doesn't
  get a bytes string

- Issue #21707: Add missing kwonlyargcount argument to
  ModuleFinder.replace_paths_in_code().

- Issue #20639: calling Path.with_suffix('') allows removing the suffix
  again.  Patch by July Tikhonov.

- Issue #21714: Disallow the construction of invalid paths using
  Path.with_name().  Original patch by Antony Lee.

- Issue #21897: Fix a crash with the f_locals attribute with closure
  variables when frame.clear() has been called.

- Issue #21151: Fixed a segfault in the winreg module when ``None`` is passed
  as a ``REG_BINARY`` value to SetValueEx.  Patch by John Ehresman.

- Issue #21090: io.FileIO.readall() does not ignore I/O errors anymore. Before,
  it ignored I/O errors if at least the first C call read() succeed.

- Issue #21781: ssl.RAND_add() now supports strings longer than 2 GB.

- Issue #11453: asyncore: emit a ResourceWarning when an unclosed file_wrapper
  object is destroyed. The destructor now closes the file if needed. The
  close() method can now be called twice: the second call does nothing.

- Issue #21858: Better handling of Python exceptions in the sqlite3 module.

- Issue #21476: Make sure the email.parser.BytesParser TextIOWrapper is
  discarded after parsing, so the input file isn't unexpectedly closed.

- Issue #21729: Used the "with" statement in the dbm.dumb module to ensure
  files closing.  Patch by Claudiu Popa.

- Issue #21491: socketserver: Fix a race condition in child processes reaping.

- Issue #21832: Require named tuple inputs to be exact strings.

- Issue #19145: The times argument for itertools.repeat now handles
  negative values the same way for keyword arguments as it does for
  positional arguments.

- Issue #21812: turtle.shapetransform did not transform the turtle on the
  first call.  (Issue identified and fixed by Lita Cho.)

- Issue #21635: The difflib SequenceMatcher.get_matching_blocks() method
  cache didn't match the actual result.  The former was a list of tuples
  and the latter was a list of named tuples.

- Issue #21722: The distutils "upload" command now exits with a non-zero
  return code when uploading fails.  Patch by Martin Dengler.

- Issue #21723: asyncio.Queue: support any type of number (ex: float) for the
  maximum size. Patch written by Vajrasky Kok.

- Issue #21326: Add a new is_closed() method to asyncio.BaseEventLoop.
  run_forever() and run_until_complete() methods of asyncio.BaseEventLoop now
  raise an exception if the event loop was closed.

- Issue #21774: Fixed NameError for an incorrect variable reference in the
  XML Minidom code for creating processing instructions.
  (Found and fixed by Claudiu Popa.)

- Issue #21766: Prevent a security hole in CGIHTTPServer by URL unquoting paths
  before checking for a CGI script at that path.

- Issue #21310: Fixed possible resource leak in failed open().

- Issue #21677: Fixed chaining nonnormalized exceptions in io close() methods.

- Issue #11709: Fix the pydoc.help function to not fail when sys.stdin is not a
  valid file.

- Issue #13223: Fix pydoc.writedoc so that the HTML documentation for methods
  that use 'self' in the example code is generated correctly.

- Issue #21463: In urllib.request, fix pruning of the FTP cache.

- Issue #21618: The subprocess module could fail to close open fds that were
  inherited by the calling process and already higher than POSIX resource
  limits would otherwise allow.  On systems with a functioning /proc/self/fd
  or /dev/fd interface the max is now ignored and all fds are closed.

- Issue #21552: Fixed possible integer overflow of too long string lengths in
  the tkinter module on 64-bit platforms.

- Issue #14315: The zipfile module now ignores extra fields in the central
  directory that are too short to be parsed instead of letting a struct.unpack
  error bubble up as this "bad data" appears in many real world zip files in
  the wild and is ignored by other zip tools.

- Issue #21402: tkinter.ttk now works when default root window is not set.

- Issue #10203: sqlite3.Row now truly supports sequence protocol.  In particular
  it supports reverse() and negative indices.  Original patch by Claudiu Popa.

- Issue #18807: If copying (no symlinks) specified for a venv, then the python
  interpreter aliases (python, python3) are now created by copying rather than
  symlinking.

- Issue #14710: pkgutil.get_loader() no longer raises an exception when None is
  found in sys.modules.

- Issue #14710: pkgutil.find_loader() no longer raises an exception when a
  module doesn't exist.

- Issue #21481: Argparse equality and inequality tests now return
  NotImplemented when comparing to an unknown type.

- Issue #8743: Fix interoperability between set objects and the
  collections.Set() abstract base class.

- Issue #13355: random.triangular() no longer fails with a ZeroDivisionError
  when low equals high.

- Issue #21538: The plistlib module now supports loading of binary plist files
  when reference or offset size is not a power of two.

- Issue #21801: Validate that __signature__ is None or an instance of Signature.

- Issue #21923: Prevent AttributeError in distutils.sysconfig.customize_compiler
  due to possible uninitialized _config_vars.

- Issue #21323: Fix http.server to again handle scripts in CGI subdirectories,
  broken by the fix for security issue #19435.  Patch by Zach Byrne.

Extension Modules
-----------------

- Issue #22176: Update the ctypes module's libffi to v3.1.  This release
  adds support for the Linux AArch64 and POWERPC ELF ABIv2 little endian
  architectures.

Build
-----

- Issue #15661: python.org OS X installers are now distributed as signed
  installer packages compatible with the Gatekeeper security feature.

- Issue #21958: Define HAVE_ROUND when building with Visual Studio 2013 and
  above.  Patch by Zachary Turner.

- Issue #15759: "make suspicious", "make linkcheck" and "make doctest" in Doc/
  now display special message when and only when there are failures.

- Issue #17095: Fix Modules/Setup *shared* support.

- Issue #21811: Anticipated fixes to support OS X versions > 10.9.

- Issue #21166: Prevent possible segfaults and other random failures of
  python --generate-posix-vars in pybuilddir.txt build target.

IDLE
----

- Issue #17390: Adjust Editor window title; remove 'Python',
  move version to end.

- Issue #14105: Idle debugger breakpoints no longer disappear
  when inseting or deleting lines.

- Issue #17172: Turtledemo can now be run from Idle.
  Currently, the entry is on the Help menu, but it may move to Run.
  Patch by Ramchandra Apt and Lita Cho.

- Issue #21765: Add support for non-ascii identifiers to HyperParser.

- Issue #21940: Add unittest for WidgetRedirector. Initial patch by Saimadhav
  Heblikar.

- Issue #18592: Add unittest for SearchDialogBase. Patch by Phil Webster.

- Issue #21694: Add unittest for ParenMatch. Patch by Saimadhav Heblikar.

- Issue #21686: add unittest for HyperParser. Original patch by Saimadhav
  Heblikar.

- Issue #12387: Add missing upper(lower)case versions of default Windows key
  bindings for Idle so Caps Lock does not disable them. Patch by Roger Serwy.

- Issue #21695: Closing a Find-in-files output window while the search is
  still in progress no longer closes Idle.

- Issue #18910: Add unittest for textView. Patch by Phil Webster.

- Issue #18292: Add unittest for AutoExpand. Patch by Saihadhav Heblikar.

- Issue #18409: Add unittest for AutoComplete. Patch by Phil Webster.

Tests
-----

- Issue #22166: With the assistance of a new internal _codecs._forget_codec
  helping function, test_codecs now clears the encoding caches to avoid the
  appearance of a reference leak

- Issue #22236: Tkinter tests now don't reuse default root window.  New root
  window is created for every test class.

- Issue #20746: Fix test_pdb to run in refleak mode (-R).  Patch by Xavier
  de Gaye.

- Issue #22060: test_ctypes has been somewhat cleaned up and simplified; it
  now uses unittest test discovery to find its tests.

- Issue #22104: regrtest.py no longer holds a reference to the suite of tests
  loaded from test modules that don't define test_main().

- Issue #22002: Added ``load_package_tests`` function to test.support and used
  it to implement/augment test discovery in test_asyncio, test_email,
  test_importlib, test_json, and test_tools.

- Issue #21976: Fix test_ssl to accept LibreSSL version strings.  Thanks
  to William Orr.

- Issue #21918: Converted test_tools from a module to a package containing
  separate test files for each tested script.

- Issue #20155: Changed HTTP method names in failing tests in test_httpservers
  so that packet filtering software (specifically Windows Base Filtering Engine)
  does not interfere with the transaction semantics expected by the tests.

- Issue #19493: Refactored the ctypes test package to skip tests explicitly
  rather than silently.

- Issue #18492: All resources are now allowed when tests are not run by
  regrtest.py.

- Issue #21634: Fix pystone micro-benchmark: use floor division instead of true
  division to benchmark integers instead of floating point numbers. Set pystone
  version to 1.2. Patch written by Lennart Regebro.

- Issue #21605: Added tests for Tkinter images.

- Issue #21493: Added test for ntpath.expanduser().  Original patch by
  Claudiu Popa.

- Issue #19925: Added tests for the spwd module. Original patch by Vajrasky Kok.

- Issue #21522: Added Tkinter tests for Listbox.itemconfigure(),
  PanedWindow.paneconfigure(), and Menu.entryconfigure().

Documentation
-------------

- Issue #21777: The binary sequence methods on bytes and bytearray are now
  documented explicitly, rather than assuming users will be able to derive
  the expected behaviour from the behaviour of the corresponding str methods.

Windows
-------

- Issue #21671, #22160, CVE-2014-0224: The bundled version of OpenSSL has been
  updated to 1.0.1i.

- Issue #10747: Use versioned labels in the Windows start menu.
  Patch by Olive Kilburn.

Tools/Demos
-----------

- Issue #22201: Command-line interface of the zipfile module now correctly
  extracts ZIP files with directory entries.  Patch by Ryan Wilson.

- Issue #21906: Make Tools/scripts/md5sum.py work in Python 3.
  Patch by Zachary Ware.

- Issue #21629: Fix Argument Clinic's "--converters" feature.


What's New in Python 3.4.1?
===========================

Release date: 2014-05-18

Core and Builtins
-----------------

- Issue #21418: Fix a crash in the builtin function super() when called without
  argument and without current frame (ex: embedded Python).

- Issue #21425: Fix flushing of standard streams in the interactive
  interpreter.

- Issue #21435: In rare cases, when running finalizers on objects in cyclic
  trash a bad pointer dereference could occur due to a subtle flaw in
  internal iteration logic.

Library
-------

- Issue #10744: Fix PEP 3118 format strings on ctypes objects with a nontrivial
  shape.

- Issue #20998: Fixed re.fullmatch() of repeated single character pattern
  with ignore case.  Original patch by Matthew Barnett.

- Issue #21075: fileinput.FileInput now reads bytes from standard stream if
  binary mode is specified.  Patch by Sam Kimbrel.

- Issue #21396: Fix TextIOWrapper(..., write_through=True) to not force a
  flush() on the underlying binary stream.  Patch by akira.

- Issue #21470: Do a better job seeding the random number generator by
  using enough bytes to span the full state space of the Mersenne Twister.

- Issue #21398: Fix an unicode error in the pydoc pager when the documentation
  contains characters not encodable to the stdout encoding.

Tests
-----

- Issue #17756: Fix test_code test when run from the installed location.

- Issue #17752: Fix distutils tests when run from the installed location.

IDLE
----

- Issue #18104: Add idlelib/idle_test/htest.py with a few sample tests to begin
  consolidating and improving human-validated tests of Idle. Change other files
  as needed to work with htest.  Running the module as __main__ runs all tests.


What's New in Python 3.4.1rc1?
==============================

Release date: 2014-05-05

Core and Builtins
-----------------

- Issue #21274: Define PATH_MAX for GNU/Hurd in Python/pythonrun.c.

- Issue #21209: Fix sending tuples to custom generator objects with the yield
  from syntax.

- Issue #21134: Fix segfault when str is called on an uninitialized
  UnicodeEncodeError, UnicodeDecodeError, or UnicodeTranslateError object.

- Issue #19537: Fix PyUnicode_DATA() alignment under m68k.  Patch by
  Andreas Schwab.

- Issue #20929: Add a type cast to avoid shifting a negative number.

- Issue #20731: Properly position in source code files even if they
  are opened in text mode. Patch by Serhiy Storchaka.

- Issue #20637: Key-sharing now also works for instance dictionaries of
  subclasses.  Patch by Peter Ingebretson.

- Issue #12546: Allow ``\x00`` to be used as a fill character when using str, int,
  float, and complex __format__ methods.

- Issue #13598: Modify string.Formatter to support auto-numbering of
  replacement fields. It now matches the behavior of str.format() in
  this regard. Patches by Phil Elson and Ramchandra Apte.

Library
-------

- Issue #21088: Bugfix for curses.window.addch() regression in 3.4.0.
  In porting to Argument Clinic, the first two arguments were reversed.

- Issue #21469: Reduced the risk of false positives in robotparser by
  checking to make sure that robots.txt has been read or does not exist
  prior to returning True in can_fetch().

- Issue #21321: itertools.islice() now releases the reference to the source
  iterator when the slice is exhausted.  Patch by Anton Afanasyev.

- Issue #9815: assertRaises now tries to clear references to local variables
  in the exception's traceback.

- Issue #13204: Calling sys.flags.__new__ would crash the interpreter,
  now it raises a TypeError.

- Issue #19385: Make operations on a closed dbm.dumb database always raise the
  same exception.

- Issue #21207: Detect when the os.urandom cached fd has been closed or
  replaced, and open it anew.

- Issue #21291: subprocess's Popen.wait() is now thread safe so that
  multiple threads may be calling wait() or poll() on a Popen instance
  at the same time without losing the Popen.returncode value.

- Issue #21127: Path objects can now be instantiated from str subclass
  instances (such as ``numpy.str_``).

- Issue #15002: urllib.response object to use _TemporaryFileWrapper (and
  _TemporaryFileCloser) facility. Provides a better way to handle file
  descriptor close. Patch contributed by Christian Theune.

- Issue #12220: mindom now raises a custom ValueError indicating it doesn't
  support spaces in URIs instead of letting a 'split' ValueError bubble up.

- Issue #21239: patch.stopall() didn't work deterministically when the same
  name was patched more than once.

- Issue #21222: Passing name keyword argument to mock.create_autospec now
  works.

- Issue #21197: Add lib64 -> lib symlink in venvs on 64-bit non-OS X POSIX.

- Issue #17498: Some SMTP servers disconnect after certain errors, violating
  strict RFC conformance.  Instead of losing the error code when we issue the
  subsequent RSET, smtplib now returns the error code and defers raising the
  SMTPServerDisconnected error until the next command is issued.

- Issue #17826: setting an iterable side_effect on a mock function created by
  create_autospec now works. Patch by Kushal Das.

- Issue #7776: Fix ``Host:`` header and reconnection when using
  http.client.HTTPConnection.set_tunnel(). Patch by Nikolaus Rath.

- Issue #20968: unittest.mock.MagicMock now supports division.
  Patch by Johannes Baiter.

- Issue #21529 (CVE-2014-4616): Fix arbitrary memory access in
  JSONDecoder.raw_decode with a negative second parameter. Bug reported by Guido
  Vranken.

- Issue #21169: getpass now handles non-ascii characters that the
  input stream encoding cannot encode by re-encoding using the
  replace error handler.

- Issue #21171: Fixed undocumented filter API of the rot13 codec.
  Patch by Berker Peksag.

- Issue #21172: isinstance check relaxed from dict to collections.Mapping.

- Issue #21155: asyncio.EventLoop.create_unix_server() now raises a ValueError
  if path and sock are specified at the same time.

- Issue #21149: Improved thread-safety in logging cleanup during interpreter
  shutdown. Thanks to Devin Jeanpierre for the patch.

- Issue #20145: `assertRaisesRegex` and `assertWarnsRegex` now raise a
  TypeError if the second argument is not a string or compiled regex.

- Issue #21058: Fix a leak of file descriptor in
  :func:`tempfile.NamedTemporaryFile`, close the file descriptor if
  :func:`io.open` fails

- Issue #21200: Return None from pkgutil.get_loader() when __spec__ is missing.

- Issue #21013: Enhance ssl.create_default_context() when used for server side
  sockets to provide better security by default.

- Issue #20633: Replace relative import by absolute import.

- Issue #20980: Stop wrapping exception when using ThreadPool.

- Issue #21082: In os.makedirs, do not set the process-wide umask. Note this
  changes behavior of makedirs when exist_ok=True.

- Issue #20990: Fix issues found by pyflakes for multiprocessing.

- Issue #21015: SSL contexts will now automatically select an elliptic
  curve for ECDH key exchange on OpenSSL 1.0.2 and later, and otherwise
  default to "prime256v1".

- Issue #20995: Enhance default ciphers used by the ssl module to enable
  better security an prioritize perfect forward secrecy.

- Issue #20884: Don't assume that __file__ is defined on importlib.__init__.

- Issue #21499: Ignore __builtins__ in several test_importlib.test_api tests.

- Issue #20879: Delay the initialization of encoding and decoding tables for
  base32, ascii85 and base85 codecs in the base64 module, and delay the
  initialization of the unquote_to_bytes() table of the urllib.parse module, to
  not waste memory if these modules are not used.

- Issue #19157: Include the broadcast address in the usable hosts for IPv6
  in ipaddress.

- Issue #11599: When an external command (e.g. compiler) fails, distutils now
  prints out the whole command line (instead of just the command name) if the
  environment variable DISTUTILS_DEBUG is set.

- Issue #4931: distutils should not produce unhelpful "error: None" messages
  anymore.  distutils.util.grok_environment_error is kept but doc-deprecated.

- Issue #20875: Prevent possible gzip "'read' is not defined" NameError.
  Patch by Claudiu Popa.

- Issue #11558: ``email.message.Message.attach`` now returns a more
  useful error message if ``attach`` is called on a message for which
  ``is_multipart`` is False.

- Issue #20283: RE pattern methods now accept the string keyword parameters
  as documented.  The pattern and source keyword parameters are left as
  deprecated aliases.

- Issue #20778: Fix modulefinder to work with bytecode-only modules.

- Issue #20791: copy.copy() now doesn't make a copy when the input is
  a bytes object.  Initial patch by Peter Otten.

- Issue #19748: On AIX, time.mktime() now raises an OverflowError for year
  outsize range [1902; 2037].

- Issue #20816: Fix inspect.getcallargs() to raise correct TypeError for
  missing keyword-only arguments. Patch by Jeremiah Lowin.

- Issue #20817: Fix inspect.getcallargs() to fail correctly if more
  than 3 arguments are missing. Patch by Jeremiah Lowin.

- Issue #6676: Ensure a meaningful exception is raised when attempting
  to parse more than one XML document per pyexpat xmlparser instance.
  (Original patches by Hirokazu Yamamoto and Amaury Forgeot d'Arc, with
  suggested wording by David Gutteridge)

- Issue #21117: Fix inspect.signature to better support functools.partial.
  Due to the specifics of functools.partial implementation,
  positional-or-keyword arguments passed as keyword arguments become
  keyword-only.

- Issue #21209: Fix asyncio.tasks.CoroWrapper to workaround a bug
  in yield-from implementation in CPythons prior to 3.4.1.

- asyncio: Add gi_{frame,running,code} properties to CoroWrapper
  (upstream issue #163).

- Issue #21311: Avoid exception in _osx_support with non-standard compiler
  configurations.  Patch by John Szakmeister.

- Issue #11571: Ensure that the turtle window becomes the topmost window
  when launched on OS X.

Extension Modules
-----------------

- Issue #21276: posixmodule: Don't define USE_XATTRS on KFreeBSD and the Hurd.

- Issue #21226: Set up modules properly in PyImport_ExecCodeModuleObject
  (and friends).

IDLE
----

- Issue #21139: Change default paragraph width to 72, the PEP 8 recommendation.

- Issue #21284: Paragraph reformat test passes after user changes reformat width.

- Issue #17654: Ensure IDLE menus are customized properly on OS X for
  non-framework builds and for all variants of Tk.

Build
-----

- The Windows build now includes OpenSSL 1.0.1g

- Issue #21285: Refactor and fix curses configure check to always search
  in a ncursesw directory.

- Issue #15234: For BerkeleyDB and Sqlite, only add the found library and
  include directories if they aren't already being searched. This avoids
  an explicit runtime library dependency.

- Issue #20644: OS X installer build support for documentation build changes
  in 3.4.1: assume externally supplied sphinx-build is available in /usr/bin.

C API
-----

- Issue #20942: PyImport_ImportFrozenModuleObject() no longer sets __file__ to
  match what importlib does; this affects _frozen_importlib as well as any
  module loaded using imp.init_frozen().

Documentation
-------------

- Issue #17386: Expanded functionality of the ``Doc/make.bat`` script to make
  it much more comparable to ``Doc/Makefile``.

- Issue #21043: Remove the recommendation for specific CA organizations and to
  mention the ability to load the OS certificates.

- Issue #20765: Add missing documentation for PurePath.with_name() and
  PurePath.with_suffix().

- Issue #19407: New package installation and distribution guides based on
  the Python Packaging Authority tools. Existing guides have been retained
  as legacy links from the distutils docs, as they still contain some
  required reference material for tool developers that isn't recorded
  anywhere else.

- Issue #19697: Document cases where __main__.__spec__ is None.

Tests
-----

- Issue #18604: Consolidated checks for GUI availability.  All platforms now
  at least check whether Tk can be instantiated when the GUI resource is
  requested.

- Issue #21275: Fix a socket test on KFreeBSD.

- Issue #21223: Pass test_site/test_startup_imports when some of the extensions
  are built as builtins.

- Issue #20635: Added tests for Tk geometry managers.

- Add test case for freeze.

- Issue #20743: Fix a reference leak in test_tcl.

- Issue #21097: Move test_namespace_pkgs into test_importlib.

- Issue #20939: Avoid various network test failures due to new
  redirect of http://www.python.org/ to https://www.python.org:
  use http://www.example.com instead.

- Issue #20668: asyncio tests no longer rely on tests.txt file.
  (Patch by Vajrasky Kok)

- Issue #21093: Prevent failures of ctypes test_macholib on OS X if a
  copy of libz exists in $HOME/lib or /usr/local/lib.

Tools/Demos
-----------

- Add support for ``yield from`` to 2to3.

- Add support for the PEP 465 matrix multiplication operator to 2to3.

- Issue #16047: Fix module exception list and __file__ handling in freeze.
  Patch by Meador Inge.

- Issue #11824: Consider ABI tags in freeze. Patch by Meador Inge.

- Issue #20535: PYTHONWARNING no longer affects the run_tests.py script.
  Patch by Arfrever Frehtes Taifersar Arahesis.


What's New in Python 3.4.0?
===========================

Release date: 2014-03-16

Library
-------

- Issue #20939: Fix test_geturl failure in test_urllibnet due to
  new redirect of http://www.python.org/ to https://www.python.org.

Documentation
-------------

- Merge in all documentation changes since branching 3.4.0rc1.


What's New in Python 3.4.0 release candidate 3?
===============================================

Release date: 2014-03-09

Core and Builtins
-----------------

- Issue #20786: Fix signatures for dict.__delitem__ and
  property.__delete__ builtins.

Library
-------

- Issue #20839: Don't trigger a DeprecationWarning in the still supported
  pkgutil.get_loader() API when __loader__ isn't set on a module (nor
  when pkgutil.find_loader() is called directly).

Build
-----

- Issue #14512: Launch pydoc -b instead of pydocgui.pyw on Windows.

- Issue #20748: Uninstalling pip does not leave behind the pyc of
  the uninstaller anymore.

- Issue #20568: The Windows installer now installs the unversioned ``pip``
  command in addition to the versioned ``pip3`` and ``pip3.4`` commands.

- Issue #20757: The ensurepip helper for the Windows uninstaller now skips
  uninstalling pip (rather than failing) if the user has updated pip to a
  different version from the one bundled with ensurepip.

- Issue #20465: Update OS X and Windows installer builds to use
  SQLite 3.8.3.1.


What's New in Python 3.4.0 release candidate 2?
===============================================

Release date: 2014-02-23

Core and Builtins
-----------------

- Issue #20625: Parameter names in __annotations__ were not mangled properly.
  Discovered by Jonas Wielicki, patch by Yury Selivanov.

- Issue #20261: In pickle, lookup __getnewargs__ and __getnewargs_ex__ on the
  type of the object.

- Issue #20619: Give the AST nodes of keyword-only arguments a column and line
  number.

- Issue #20526: Revert changes of issue #19466 which introduces a regression:
  don't clear anymore the state of Python threads early during the Python
  shutdown.

Library
-------

- Issue #20710: The pydoc summary line no longer displays the "self" parameter
  for bound methods.

- Issue #20566: Change asyncio.as_completed() to use a Queue, to
  avoid O(N**2) behavior.

- Issue #20704: Implement new debug API in asyncio. Add new methods
  BaseEventLoop.set_debug() and BaseEventLoop.get_debug().
  Add support for setting 'asyncio.tasks._DEBUG' variable with
  'PYTHONASYNCIODEBUG' environment variable.

- asyncio: Refactoring and fixes: BaseEventLoop.sock_connect() raises an
  error if the address is not resolved; use __slots__ in Handle and
  TimerHandle; as_completed() and wait() raise TypeError if the passed
  list of Futures is a single Future; call_soon() and other 'call_*()'
  functions raise TypeError if the passed callback is a coroutine
  function; _ProactorBasePipeTransport uses _FlowControlMixin;
  WriteTransport.set_write_buffer_size() calls _maybe_pause_protocol()
  to consider pausing receiving if the watermark limits have changed;
  fix _check_resolved_address() for IPv6 address; and other minor
  improvements, along with multiple documentation updates.

- Issue #20684: Fix inspect.getfullargspec() to not to follow __wrapped__
  chains. Make its behaviour consistent with bound methods first argument.
  Patch by Nick Coghlan and Yury Selivanov.

- Issue #20681: Add new error handling API in asyncio. New APIs:
  loop.set_exception_handler(), loop.default_exception_handler(), and
  loop.call_exception_handler().

- Issue #20673: Implement support for UNIX Domain Sockets in asyncio.
  New APIs: loop.create_unix_connection(), loop.create_unix_server(),
  streams.open_unix_connection(), and streams.start_unix_server().

- Issue #20616: Add a format() method to tracemalloc.Traceback.

- Issue #19744: the ensurepip installation step now just prints a warning to
  stderr rather than failing outright if SSL/TLS is unavailable. This allows
  local installation of POSIX builds without SSL/TLS support.

- Issue #20594: Avoid name clash with the libc function posix_close.

Build
-----

- Issue #20641: Run MSI custom actions (pip installation, pyc compilation)
  with the NoImpersonate flag, to support elevated execution (UAC).

- Issue #20221: Removed conflicting (or circular) hypot definition when
  compiled with VS 2010 or above.  Initial patch by Tabrez Mohammed.

- Issue #20609: Restored the ability to build 64-bit Windows binaries on
  32-bit Windows, which was broken by the change in issue #19788.


What's New in Python 3.4.0 release candidate 1?
===============================================

Release date: 2014-02-10

Core and Builtins
-----------------

- Issue #19255: The builtins module is restored to initial value before
  cleaning other modules.  The sys and builtins modules are cleaned last.

- Issue #20588: Make Python-ast.c C89 compliant.

- Issue #20437: Fixed 22 potential bugs when deleting objects references.

- Issue #20500: Displaying an exception at interpreter shutdown no longer
  risks triggering an assertion failure in PyObject_Str.

- Issue #20538: UTF-7 incremental decoder produced inconsistent string when
  input was truncated in BASE64 section.

- Issue #20404: io.TextIOWrapper (and hence the open() builtin) now uses the
  internal codec marking system added for issue #19619 to throw LookupError
  for known non-text encodings at stream construction time. The existing
  output type checks remain in place to deal with unmarked third party
  codecs.

- Issue #17162: Add PyType_GetSlot.

- Issue #20162: Fix an alignment issue in the siphash24() hash function which
  caused a crash on PowerPC 64-bit (ppc64).

Library
-------

- Issue #20530: The signatures for slot builtins have been updated
  to reflect the fact that they only accept positional-only arguments.

- Issue #20517: Functions in the os module that accept two filenames
  now register both filenames in the exception on failure.

- Issue #20563: The ipaddress module API is now considered stable.

- Issue #14983: email.generator now always adds a line end after each MIME
  boundary marker, instead of doing so only when there is an epilogue.  This
  fixes an RFC compliance bug and solves an issue with signed MIME parts.

- Issue #20540: Fix a performance regression (vs. Python 3.2) when layering
  a multiprocessing Connection over a TCP socket.  For small payloads, Nagle's
  algorithm would introduce idle delays before the entire transmission of a
  message.

- Issue #16983: the new email header parsing code will now decode encoded words
  that are (incorrectly) surrounded by quotes, and register a defect.

- Issue #19772: email.generator no longer mutates the message object when
  doing a down-transform from 8bit to 7bit CTEs.

- Issue #20536: the statistics module now correctly handle Decimal instances
  with positive exponents

- Issue #18805: the netmask/hostmask parsing in ipaddress now more reliably
  filters out illegal values and correctly allows any valid prefix length.

- Issue #20481: For at least Python 3.4, the statistics module will require
  that all inputs for a single operation be of a single consistent type, or
  else a mixed of ints and a single other consistent type. This avoids
  some interoperability issues that arose with the previous approach of
  coercing to a suitable common type.

- Issue #20478: the statistics module now treats collections.Counter inputs
  like any other iterable.

- Issue #17369: get_filename was raising an exception if the filename
  parameter's RFC2231 encoding was broken in certain ways.  This was
  a regression relative to python2.

- Issue #20013: Some imap servers disconnect if the current mailbox is
  deleted, and imaplib did not handle that case gracefully.  Now it
  handles the 'bye' correctly.

- Issue #20531: Revert 3.4 version of fix for #19063, and apply the 3.3
  version.  That is, do *not* raise an error if unicode is passed to
  email.message.Message.set_payload.

- Issue #20476: If a non-compat32 policy is used with any of the email parsers,
  EmailMessage is now used as the factory class.  The factory class should
  really come from the policy; that will get fixed in 3.5.

- Issue #19920: TarFile.list() no longer fails when outputs a listing
  containing non-encodable characters.  Based on patch by Vajrasky Kok.

- Issue #20515: Fix NULL pointer dereference introduced by issue #20368.

- Issue #19186: Restore namespacing of expat symbols inside the pyexpat module.

- Issue #20053: ensurepip (and hence venv) are no longer affected by the
  settings in the default pip configuration file.

- Issue #20426: When passing the re.DEBUG flag, re.compile() displays the
  debug output every time it is called, regardless of the compilation cache.

- Issue #20368: The null character now correctly passed from Tcl to Python.
  Improved error handling in variables-related commands.

- Issue #20435: Fix _pyio.StringIO.getvalue() to take into account newline
  translation settings.

- tracemalloc: Fix slicing traces and fix slicing a traceback.

- Issue #20354: Fix an alignment issue in the tracemalloc module on 64-bit
  platforms. Bug seen on 64-bit Linux when using "make profile-opt".

- Issue #17159: inspect.signature now accepts duck types of functions,
  which adds support for Cython functions. Initial patch by Stefan Behnel.

- Issue #18801: Fix inspect.classify_class_attrs to correctly classify
  object.__new__ and object.__init__.

- Fixed cmath.isinf's name in its argument parsing code.

- Issue #20311, #20452: poll and epoll now round the timeout away from zero,
  instead of rounding towards zero, in select and selectors modules:
  select.epoll.poll(), selectors.PollSelector.poll() and
  selectors.EpollSelector.poll(). For example, a timeout of one microsecond
  (1e-6) is now rounded to one millisecondi (1e-3), instead of being rounded to
  zero.  However, the granularity property and asyncio's resolution feature
  were removed again.

- asyncio: Some refactoring; various fixes; add write flow control to
  unix pipes; Future.set_exception() instantiates the exception
  argument if it is a class; improved proactor pipe transport; support
  wait_for(f, None); don't log broken/disconnected pipes; use
  ValueError instead of assert for forbidden subprocess_{shell,exec}
  arguments; added a convenience API for subprocess management; added
  StreamReader.at_eof(); properly handle duplicate coroutines/futures
  in gather(), wait(), as_completed(); use a bytearray for buffering
  in StreamReader; and more.

- Issue #20288: fix handling of invalid numeric charrefs in HTMLParser.

- Issue #20424: Python implementation of io.StringIO now supports lone surrogates.

- Issue #20308: inspect.signature now works on classes without user-defined
  __init__ or __new__ methods.

- Issue #20372: inspect.getfile (and a bunch of other inspect functions that
  use it) doesn't crash with unexpected AttributeError on classes defined in C
  without __module__.

- Issue #20356: inspect.signature formatting uses '/' to separate
  positional-only parameters from others.

- Issue #20223: inspect.signature now supports methods defined with
  functools.partialmethods.

- Issue #19456: ntpath.join() now joins relative paths correctly when a drive
  is present.

- Issue #19077: tempfile.TemporaryDirectory cleanup no longer fails when
  called during shutdown.  Emitting resource warning in __del__ no longer fails.
  Original patch by Antoine Pitrou.

- Issue #20394: Silence Coverity warning in audioop module.

- Issue #20367: Fix behavior of concurrent.futures.as_completed() for
  duplicate arguments.  Patch by Glenn Langford.

- Issue #8260: The read(), readline() and readlines() methods of
  codecs.StreamReader returned incomplete data when were called after
  readline() or read(size).  Based on patch by Amaury Forgeot d'Arc.

- Issue #20105: the codec exception chaining now correctly sets the
  traceback of the original exception as its __traceback__ attribute.

- Issue #17481: inspect.getfullargspec() now uses inspect.signature() API.

- Issue #15304: concurrent.futures.wait() can block forever even if
  Futures have completed. Patch by Glenn Langford.

- Issue #14455: plistlib: fix serializing integers in the range
  of an unsigned long long but outside of the range of signed long long for
  binary plist files.

IDLE
----

- Issue #20406: Use Python application icons for Idle window title bars.
  Patch mostly by Serhiy Storchaka.

- Update the python.gif icon for the Idle classbrowser and pathbowser
  from the old green snake to the new blue and yellow snakes.

- Issue #17721: Remove non-functional configuration dialog help button until we
  make it actually gives some help when clicked. Patch by Guilherme Simões.

Tests
-----

- Issue #20532: Tests which use _testcapi now are marked as CPython only.

- Issue #19920: Added tests for TarFile.list().  Based on patch by Vajrasky Kok.

- Issue #19990: Added tests for the imghdr module.  Based on patch by
  Claudiu Popa.

- Issue #20474: Fix test_socket "unexpected success" failures on OS X 10.7+.

Tools/Demos
-----------

- Issue #20530: Argument Clinic's signature format has been revised again.
  The new syntax is highly human readable while still preventing false
  positives.  The syntax also extends Python syntax to denote "self" and
  positional-only parameters, allowing inspect.Signature objects to be
  totally accurate for all supported builtins in Python 3.4.

- Issue #20456: Argument Clinic now observes the C preprocessor conditional
  compilation statements of the C files it parses.  When a Clinic block is
  inside a conditional code, it adjusts its output to match, including
  automatically generating an empty methoddef macro.

- Issue #20456: Cloned functions in Argument Clinic now use the correct
  name, not the name of the function they were cloned from, for text
  strings inside generated code.

- Issue #20456: Fixed Argument Clinic's test suite and "--converters" feature.

- Issue #20456: Argument Clinic now allows specifying different names
  for a parameter in Python and C, using "as" on the parameter line.

- Issue #20326: Argument Clinic now uses a simple, unique signature to
  annotate text signatures in docstrings, resulting in fewer false
  positives.  "self" parameters are also explicitly marked, allowing
  inspect.Signature() to authoritatively detect (and skip) said parameters.

- Issue #20326: Argument Clinic now generates separate checksums for the
  input and output sections of the block, allowing external tools to verify
  that the input has not changed (and thus the output is not out-of-date).

Build
-----

- Issue #20465: Update SQLite shipped with OS X installer to 3.8.3.

C-API
-----

- Issue #20517: Added new functions allowing OSError exceptions to reference
  two filenames instead of one: PyErr_SetFromErrnoWithFilenameObjects() and
  PyErr_SetExcFromWindowsErrWithFilenameObjects().

Documentation
-------------

- Issue #20488: Change wording to say importlib is *the* implementation of
  import instead of just *an* implementation.

- Issue #6386: Clarify in the tutorial that specifying a symlink to execute
  means the directory containing the executed script and not the symlink is
  added to sys.path.


What's New in Python 3.4.0 Beta 3?
==================================

Release date: 2014-01-26

Core and Builtins
-----------------

- Issue #20189: Four additional builtin types (PyTypeObject,
  PyMethodDescr_Type, _PyMethodWrapper_Type, and PyWrapperDescr_Type)
  have been modified to provide introspection information for builtins.

- Issue #17825: Cursor "^" is correctly positioned for SyntaxError and
  IndentationError.

- Issue #2382: SyntaxError cursor "^" is now written at correct position in most
  cases when multibyte characters are in line (before "^").  This still not
  works correctly with wide East Asian characters.

- Issue #18960: The first line of Python script could be executed twice when
  the source encoding was specified on the second line.  Now the source encoding
  declaration on the second line isn't effective if the first line contains
  anything except a comment.  'python -x' works now again with files with the
  source encoding declarations, and can be used to make Python batch files
  on Windows.

Library
-------

- asyncio: Various improvements and small changes not all covered by
  issues listed below.  E.g. wait_for() now cancels the inner task if
  the timeout occurs; tweaked the set of exported symbols; renamed
  Empty/Full to QueueEmpty/QueueFull; "with (yield from lock)" now
  uses a separate context manager; readexactly() raises if not enough
  data was read; PTY support tweaks.

- Issue #20311: asyncio: Add a granularity attribute to BaseEventLoop: maximum
  between the resolution of the BaseEventLoop.time() method and the resolution
  of the selector. The granuarility is used in the scheduler to round time and
  deadline.

- Issue #20311: selectors: Add a resolution attribute to BaseSelector.

- Issue #20189: unittest.mock now no longer assumes that any object for
  which it could get an inspect.Signature is a callable written in Python.
  Fix courtesy of Michael Foord.

- Issue #20317: ExitStack.__exit__ could create a self-referential loop if an
  exception raised by a cleanup operation already had its context set
  correctly (for example, by the @contextmanager decorator). The infinite
  loop this caused is now avoided by checking if the expected context is
  already set before trying to fix it.

- Issue #20374: Fix build with GNU readline >= 6.3.

- Issue #20262: Warnings are raised now when duplicate names are added in the
  ZIP file or too long ZIP file comment is truncated.

- Issue #20165: The unittest module no longer considers tests marked with
  @expectedFailure successful if they pass.

- Issue #18574: Added missing newline in 100-Continue reply from
  http.server.BaseHTTPRequestHandler. Patch by Nikolaus Rath.

- Issue #20270: urllib.urlparse now supports empty ports.

- Issue #20243: TarFile no longer raise ReadError when opened in write mode.

- Issue #20238: TarFile opened with external fileobj and "w:gz" mode didn't
  write complete output on close.

- Issue #20245: The open functions in the tarfile module now correctly handle
  empty mode.

- Issue #20242: Fixed basicConfig() format strings for the alternative
  formatting styles. Thanks to kespindler for the bug report and patch.

- Issue #20246: Fix buffer overflow in socket.recvfrom_into.

- Issues #20206 and #5803: Fix edge case in email.quoprimime.encode where it
  truncated lines ending in a character needing encoding but no newline by
  using a more efficient algorithm that doesn't have the bug.

- Issue #19082: Working xmlrpc.server and xmlrpc.client examples. Both in
  modules and in documentation. Initial patch contributed by Vajrasky Kok.

- Issue #20138: The wsgiref.application_uri() and wsgiref.request_uri()
  functions now conform to PEP 3333 when handle non-ASCII URLs.

- Issue #19097: Raise the correct Exception when cgi.FieldStorage is given an
  invalid fileobj.

- Issue #20152: Ported Python/import.c over to Argument Clinic.

- Issue #13107: argparse and optparse no longer raises an exception when output
  a help on environment with too small COLUMNS.  Based on patch by
  Elazar Gershuni.

- Issue #20207: Always disable SSLv2 except when PROTOCOL_SSLv2 is explicitly
  asked for.

- Issue #18960: The tokenize module now ignore the source encoding declaration
  on the second line if the first line contains anything except a comment.

- Issue #20078: Reading malformed zipfiles no longer hangs with 100% CPU
  consumption.

- Issue #20113: os.readv() and os.writev() now raise an OSError exception on
  error instead of returning -1.

- Issue #19719: Make importlib.abc.MetaPathFinder.find_module(),
  PathEntryFinder.find_loader(), and Loader.load_module() use PEP 451 APIs to
  help with backwards-compatibility.

- Issue #20144: inspect.Signature now supports parsing simple symbolic
  constants as parameter default values in __text_signature__.

- Issue #20072: Fixed multiple errors in tkinter with wantobjects is False.

- Issue #20229: Avoid plistlib deprecation warning in platform.mac_ver().

- Issue #14455: Fix some problems with the new binary plist support in plistlib.

IDLE
----

- Issue #17390: Add Python version to Idle editor window title bar.
  Original patches by Edmond Burnett and Kent Johnson.

- Issue #18960: IDLE now ignores the source encoding declaration on the second
  line if the first line contains anything except a comment.

Tests
-----

- Issue #20358: Tests for curses.window.overlay and curses.window.overwrite
  no longer specify min{row,col} > max{row,col}.

- Issue #19804: The test_find_mac test in test_uuid is now skipped if the
  ifconfig executable is not available.

- Issue #19886: Use better estimated memory requirements for bigmem tests.

Tools/Demos
-----------

- Issue #20390: Argument Clinic's "file" output preset now defaults to
  "{dirname}/clinic/{basename}.h".

- Issue #20390: Argument Clinic's "class" directive syntax has been extended
  with two new required arguments: "typedef" and "type_object".

- Issue #20390: Argument Clinic: If __new__ or __init__ functions didn't use
  kwargs (or args), the PyArg_NoKeywords (or PyArg_NoPositional) calls
  generated are only run when the type object is an exact match.

- Issue #20390: Argument Clinic now fails if you have required parameters after
  optional parameters.

- Issue #20390: Argument Clinic converters now have a new template they can
  inject code into: "modifiers".  Code put there is run in the parsing
  function after argument parsing but before the call to the impl.

- Issue #20376: Argument Clinic now escapes backslashes in docstrings.

- Issue #20381: Argument Clinic now sanity checks the default argument when
  c_default is also specified, providing a nice failure message for
  disallowed values.

- Issue #20189: Argument Clinic now ensures that parser functions for
  __new__ are always of type newfunc, the type of the tp_new slot.
  Similarly, parser functions for __init__ are now always of type initproc,
  the type of tp_init.

- Issue #20189: Argument Clinic now suppresses the docstring for __new__
  and __init__ functions if no docstring is provided in the input.

- Issue #20189: Argument Clinic now suppresses the "self" parameter in the
  impl for @staticmethod functions.

- Issue #20294: Argument Clinic now supports argument parsing for __new__ and
  __init__ functions.

- Issue #20299: Argument Clinic custom converters may now change the default
  value of c_default and py_default with a class member.

- Issue #20287: Argument Clinic's output is now configurable, allowing
  delaying its output or even redirecting it to a separate file.

- Issue #20226: Argument Clinic now permits simple expressions
  (e.g. "sys.maxsize - 1") as default values for parameters.

- Issue #19936: Added executable bits or shebang lines to Python scripts which
  requires them.  Disable executable bits and shebang lines in test and
  benchmark files in order to prevent using a random system python, and in
  source files of modules which don't provide command line interface.  Fixed
  shebang lines in the unittestgui and checkpip scripts.

- Issue #20268: Argument Clinic now supports cloning the parameters and
  return converter of existing functions.

- Issue #20228: Argument Clinic now has special support for class special
  methods.

- Issue #20214: Fixed a number of small issues and documentation errors in
  Argument Clinic (see issue for details).

- Issue #20196: Fixed a bug where Argument Clinic did not generate correct
  parsing code for functions with positional-only parameters where all arguments
  are optional.

- Issue #18960: 2to3 and the findnocoding.py script now ignore the source
  encoding declaration on the second line if the first line contains anything
  except a comment.

- Issue #19723: The marker comments Argument Clinic uses have been changed
  to improve readability.

- Issue #20157: When Argument Clinic renames a parameter because its name
  collides with a C keyword, it no longer exposes that rename to PyArg_Parse.

- Issue #20141: Improved Argument Clinic's support for the PyArg_Parse "O!"
  format unit.

- Issue #20144: Argument Clinic now supports simple symbolic constants
  as parameter default values.

- Issue #20143: The line numbers reported in Argument Clinic errors are
  now more accurate.

- Issue #20142: Py_buffer variables generated by Argument Clinic are now
  initialized with a default value.

Build
-----

- Issue #12837: Silence a tautological comparison warning on OS X under Clang in
  socketmodule.c.


What's New in Python 3.4.0 Beta 2?
==================================

Release date: 2014-01-05

Core and Builtins
-----------------

- Issue #17432: Drop UCS2 from names of Unicode functions in python3.def.

- Issue #19526: Exclude all new API from the stable ABI. Exceptions can be
  made if a need is demonstrated.

- Issue #19969: PyBytes_FromFormatV() now raises an OverflowError if "%c"
  argument is not in range [0; 255].

- Issue #19995: %c, %o, %x, and %X now issue a DeprecationWarning on non-integer
  input; reworded docs to clarify that an integer type should define both __int__
  and __index__.

- Issue #19787: PyThread_set_key_value() now always set the value. In Python
  3.3, the function did nothing if the key already exists (if the current value
  is a non-NULL pointer).

- Issue #14432: Remove the thread state field from the frame structure. Fix a
  crash when a generator is created in a C thread that is destroyed while the
  generator is still used. The issue was that a generator contains a frame, and
  the frame kept a reference to the Python state of the destroyed C thread. The
  crash occurs when a trace function is setup.

- Issue #19576: PyGILState_Ensure() now initializes threads. At startup, Python
  has no concrete GIL. If PyGILState_Ensure() is called from a new thread for
  the first time and PyEval_InitThreads() was not called yet, a GIL needs to be
  created.

- Issue #17576: Deprecation warning emitted now when __int__() or __index__()
  return not int instance.

- Issue #19932: Fix typo in import.h, missing whitespaces in function prototypes.

- Issue #19736: Add module-level statvfs constants defined for GNU/glibc
  based systems.

- Issue #20097: Fix bad use of "self" in importlib's WindowsRegistryFinder.

- Issue #19729: In str.format(), fix recursive expansion in format spec.

- Issue #19638: Fix possible crash / undefined behaviour from huge (more than 2
  billion characters) input strings in _Py_dg_strtod.

Library
-------

- Issue #20154: Deadlock in asyncio.StreamReader.readexactly().

- Issue #16113: Remove sha3 module again.

- Issue #20111: pathlib.Path.with_suffix() now sanity checks the given suffix.

- Fix breakage in TestSuite.countTestCases() introduced by issue #11798.

- Issue #20108: Avoid parameter name clash in inspect.getcallargs().

- Issue #19918: Fix PurePath.relative_to() under Windows.

- Issue #19422: Explicitly disallow non-SOCK_STREAM sockets in the ssl
  module, rather than silently let them emit clear text data.

- Issue #20046: Locale alias table no longer contains entities which can be
  calculated.  Generalized support of the euro modifier.

- Issue #20027: Fixed locale aliases for devanagari locales.

- Issue #20067: Tkinter variables now work when wantobjects is false.

- Issue #19020: Tkinter now uses splitlist() instead of split() in configure
  methods.

- Issue #19744: ensurepip now provides a better error message when Python is
  built without SSL/TLS support (pip currently requires that support to run,
  even if only operating with local wheel files)

- Issue #19734: ensurepip now ignores all pip environment variables to avoid
  odd behaviour based on user configuration settings

- Fix TypeError on "setup.py upload --show-response".

- Issue #20045: Fix "setup.py register --list-classifiers".

- Issue #18879: When a method is looked up on a temporary file, avoid closing
  the file before the method is possibly called.

- Issue #20037: Avoid crashes when opening a text file late at interpreter
  shutdown.

- Issue #19967: Thanks to the PEP 442, asyncio.Future now uses a
  destructor to log uncaught exceptions, instead of the dedicated
  _TracebackLogger class.

- Added a Task.current_task() class method to asyncio.

- Issue #19850: Set SA_RESTART in asyncio when registering a signal
  handler to limit EINTR occurrences.

- Implemented write flow control in asyncio for proactor event loop (Windows).

- Change write buffer in asyncio use to avoid O(N**2) behavior.  Make
  write()/sendto() accept bytearray/memoryview.

- Issue #20034: Updated alias mapping to most recent locale.alias file
  from X.org distribution using makelocalealias.py.

- Issue #5815: Fixed support for locales with modifiers.  Fixed support for
  locale encodings with hyphens.

- Issue #20026: Fix the sqlite module to handle correctly invalid isolation
  level (wrong type).

- Issue #18829: csv.Dialect() now checks type for delimiter, escapechar and
  quotechar fields.  Original patch by Vajrasky Kok.

- Issue #19855: uuid.getnode() on Unix now looks on the PATH for the
  executables used to find the mac address, with /sbin and /usr/sbin as
  fallbacks.

- Issue #20007: HTTPResponse.read(0) no more prematurely closes connection.
  Original patch by Simon Sapin.

- Issue #19946: multiprocessing now uses runpy to initialize __main__ in
  child processes when necessary, allowing it to correctly handle scripts
  without suffixes and submodules that use explicit relative imports or
  otherwise rely on parent modules being correctly imported prior to
  execution.

- Issue #19921: When Path.mkdir() is called with parents=True, any missing
  parent is created with the default permissions, ignoring the mode argument
  (mimicking the POSIX "mkdir -p" command).

- Issue #19887: Improve the Path.resolve() algorithm to support certain
  symlink chains.

- Issue #19912: Fixed numerous bugs in ntpath.splitunc().

- Issue #19911: ntpath.splitdrive() now correctly processes the 'İ' character
  (U+0130, LATIN CAPITAL LETTER I WITH DOT ABOVE).

- Issue #19532: python -m compileall with no filename/directory arguments now
  respects the -f and -q flags instead of ignoring them.

- Issue #19623: Fixed writing to unseekable files in the aifc module.

- Issue #19946: multiprocessing.spawn now raises ImportError when the module to
  be used as the main module cannot be imported.

- Issue #17919: select.poll.register() again works with poll.POLLNVAL on AIX.
  Fixed integer overflow in the eventmask parameter.

- Issue #19063: if a Charset's body_encoding was set to None, the email
  package would generate a message claiming the Content-Transfer-Encoding
  was 7bit, and produce garbage output for the content.  This now works.
  A couple of other set_payload mishandlings of non-ASCII are also fixed.
  In addition, calling set_payload with a string argument without
  specifying a charset now raises an error (this is a new error in 3.4).

- Issue #15475: Add __sizeof__ implementations for itertools objects.

- Issue #19944: Fix importlib.find_spec() so it imports parents as needed
  and move the function to importlib.util.

- Issue #19880: Fix a reference leak in unittest.TestCase. Explicitly break
  reference cycles between frames and the _Outcome instance.

- Issue #17429: platform.linux_distribution() now decodes files from the UTF-8
  encoding with the surrogateescape error handler, instead of decoding from the
  locale encoding in strict mode. It fixes the function on Fedora 19 which is
  probably the first major distribution release with a non-ASCII name. Patch
  written by Toshio Kuratomi.

- Issue #19343: Expose FreeBSD-specific APIs in resource module.  Original
  patch by Koobs.

- Issue #19929: Call os.read with 32768 within subprocess.Popen.communicate
  rather than 4096 for efficiency.  A microbenchmark shows Linux and OS X
  both using ~50% less cpu time this way.

- Issue #19506: Use a memoryview to avoid a data copy when piping data
  to stdin within subprocess.Popen.communicate.  5-10% less cpu usage.

- Issue #19876: selectors unregister() no longer raises ValueError or OSError
  if the FD is closed (as long as it was registered).

- Issue #19908: pathlib now joins relative Windows paths correctly when a drive
  is present.  Original patch by Antoine Pitrou.

- Issue #19296: Silence compiler warning in dbm_open

- Issue #6784: Strings from Python 2 can now be unpickled as bytes
  objects by setting the encoding argument of Unpickler to be 'bytes'.
  Initial patch by Merlijn van Deen.

- Issue #19839: Fix regression in bz2 module's handling of non-bzip2 data at
  EOF, and analogous bug in lzma module.

- Issue #19881: Fix pickling bug where cpickle would emit bad pickle data for
  large bytes string (i.e., with size greater than 2**32-1).

- Issue #19138: doctest's IGNORE_EXCEPTION_DETAIL now allows a match when
  no exception detail exists (no colon following the exception's name, or
  a colon does follow but no text follows the colon).

- Issue #19927: Add __eq__ to path-based loaders in importlib.

- Issue #19827: On UNIX, setblocking() and settimeout() methods of
  socket.socket can now avoid a second syscall if the ioctl() function can be
  used, or if the non-blocking flag of the socket is unchanged.

- Issue #19785: smtplib now supports SSLContext.check_hostname and server name
  indication for TLS/SSL connections.

- Issue #19784: poplib now supports SSLContext.check_hostname and server name
  indication for TLS/SSL connections.

- Issue #19783: nntplib now supports SSLContext.check_hostname and server name
  indication for TLS/SSL connections.

- Issue #19782: imaplib now supports SSLContext.check_hostname and server name
  indication for TLS/SSL connections.

- Issue #20123: Fix pydoc.synopsis() for "binary" modules.

- Issue #19834: Support unpickling of exceptions pickled by Python 2.

- Issue #19781: ftplib now supports SSLContext.check_hostname and server name
  indication for TLS/SSL connections.

- Issue #19509: Add SSLContext.check_hostname to match the peer's certificate
  with server_hostname on handshake.

- Issue #15798: Fixed subprocess.Popen() to no longer fail if file
  descriptor 0, 1 or 2 is closed.

- Issue #17897: Optimized unpickle prefetching.

- Issue #3693: Make the error message more helpful when the array.array()
  constructor is given a str. Move the array module typecode documentation to
  the docstring of the constructor.

- Issue #19088: Fixed incorrect caching of the copyreg module in
  object.__reduce__() and object.__reduce_ex__().

- Issue #19698: Removed exec_module() methods from
  importlib.machinery.BuiltinImporter and ExtensionFileLoader.

- Issue #18864: Added a setter for ModuleSpec.has_location.

- Fixed _pickle.Unpickler to not fail when loading empty strings as
  persistent IDs.

- Issue #11480: Fixed copy.copy to work with classes with custom metaclasses.
  Patch by Daniel Urban.

- Issue #6477: Added support for pickling the types of built-in singletons
  (i.e., Ellipsis, NotImplemented, None).

- Issue #19713: Add remaining PEP 451-related deprecations and move away
  from using find_module/find_loaer/load_module.

- Issue #19708: Update pkgutil to use the new importer APIs.

- Issue #19703: Update pydoc to use the new importer APIs.

- Issue #19851: Fixed a regression in reloading sub-modules.

- ssl.create_default_context() sets OP_NO_COMPRESSION to prevent CRIME.

- Issue #19802: Add socket.SO_PRIORITY.

- Issue #11508: Fixed uuid.getnode() and uuid.uuid1() on environment with
  virtual interface.  Original patch by Kent Frazier.

- Issue #11489: JSON decoder now accepts lone surrogates.

- Issue #19545: Avoid chained exceptions while passing stray % to
  time.strptime().  Initial patch by Claudiu Popa.

IDLE
----

- Issue #20058: sys.stdin.readline() in IDLE now always returns only one line.

- Issue #19481: print() of string subclass instance in IDLE no longer hangs.

- Issue #18270: Prevent possible IDLE AttributeError on OS X when no initial
  shell window is present.

Tests
-----

- Issue #20055: Fix test_shutil under Windows with symlink privileges held.
  Patch by Vajrasky Kok.

- Issue #20070: Don't run test_urllib2net when network resources are not
  enabled.

- Issue #19938: Re-enabled test_bug_1333982 in test_dis, which had been
  disabled since 3.0 due to the changes in listcomp handling.

- Issue #19320: test_tcl no longer fails when wantobjects is false.

- Issue #19919: Fix flaky SSL test. connect_ex() sometimes returns
  EWOULDBLOCK on Windows or VMs hosted on Windows.

- Issue #19912: Added tests for ntpath.splitunc().

- Issue #19828: Fixed test_site when the whole suite is run with -S.

- Issue #19928: Implemented a test for repr() of cell objects.

- Issue #19535: Fixed test_docxmlrpc, test_functools, test_inspect, and
  test_statistics when python is run with -OO.

- Issue #19926: Removed unneeded test_main from test_abstract_numbers.
  Patch by Vajrasky Kok.

- Issue #19572: More skipped tests explicitly marked as skipped.

- Issue #19595, #19987: Re-enabled a long-disabled test in test_winsound.

- Issue #19588: Fixed tests in test_random that were silently skipped most
  of the time.  Patch by Julian Gindi.

Build
-----

- Issue #19728: Enable pip installation by default on Windows.

- Issue #16136: Remove VMS support

- Issue #18215: Add script Tools/ssl/test_multiple_versions.py to compile and
  run Python's unit tests with multiple versions of OpenSSL.

- Issue #19922: define _INCLUDE__STDC_A1_SOURCE in HP-UX to include mbstate_t
  for mbrtowc().

- Issue #19788: kill_python(_d).exe is now run as a PreBuildEvent on the
  pythoncore sub-project.  This should prevent build errors due a previous
  build's python(_d).exe still running.

Documentation
-------------

- Issue #20265: Updated some parts of the Using Windows document.

- Issue #20266: Updated some parts of the Windows FAQ.

- Issue #20255: Updated the about and bugs pages.

- Issue #20253: Fixed a typo in the ipaddress docs that advertised an
  illegal attribute name.  Found by INADA Naoki.

- Issue #18840: Introduce the json module in the tutorial, and de-emphasize
  the pickle module.

- Issue #19845: Updated the Compiling Python on Windows section.

- Issue #19795: Improved markup of True/False constants.

Tools/Demos
-----------

- Issue #19659: Added documentation for Argument Clinic.

- Issue #19976: Argument Clinic METH_NOARGS functions now always
  take two parameters.


What's New in Python 3.4.0 Beta 1?
==================================

Release date: 2013-11-24

Core and Builtins
-----------------

- Use the repr of a module name in more places in import, especially
  exceptions.

- Issue #19619: str.encode, bytes.decode and bytearray.decode now use an
  internal API to throw LookupError for known non-text encodings, rather
  than attempting the encoding or decoding operation and then throwing a
  TypeError for an unexpected output type. (The latter mechanism remains
  in place for third party non-text encodings)

- Issue #19183: Implement PEP 456 'secure and interchangeable hash algorithm'.
  Python now uses SipHash24 on all major platforms.

- Issue #12892: The utf-16* and utf-32* encoders no longer allow surrogate code
  points (U+D800-U+DFFF) to be encoded.  The utf-32* decoders no longer decode
  byte sequences that correspond to surrogate code points.  The surrogatepass
  error handler now works with the utf-16* and utf-32* codecs.  Based on
  patches by Victor Stinner and Kang-Hao (Kenny) Lu.

- Issue #17806: Added keyword-argument support for "tabsize" to
  str/bytes.expandtabs().

- Issue #17828: Output type errors in str.encode(), bytes.decode() and
  bytearray.decode() now direct users to codecs.encode() or codecs.decode()
  as appropriate.

- Issue #17828: The interpreter now attempts to chain errors that occur in
  codec processing with a replacement exception of the same type that
  includes the codec name in the error message. It ensures it only does this
  when the creation of the replacement exception won't lose any information.

- Issue #19466: Clear the frames of daemon threads earlier during the
  Python shutdown to call objects destructors. So "unclosed file" resource
  warnings are now correctly emitted for daemon threads.

- Issue #19514: Deduplicate some _Py_IDENTIFIER declarations.
  Patch by Andrei Dorian Duma.

- Issue #17936: Fix O(n**2) behaviour when adding or removing many subclasses
  of a given type.

- Issue #19428: zipimport now handles errors when reading truncated or invalid
  ZIP archive.

- Issue #18408: Add a new PyFrame_FastToLocalsWithError() function to handle
  exceptions when merging fast locals into f_locals of a frame.
  PyEval_GetLocals() now raises an exception and return NULL on failure.

- Issue #19369: Optimized the usage of __length_hint__().

- Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
  Python executable and not removed by the linker's optimizer.

- Issue #19306: Add extra hints to the faulthandler module's stack
  dumps that these are "upside down".

Library
-------

- Issue #3158: doctest can now find doctests in functions and methods
  written in C.

- Issue #13477: Added command line interface to the tarfile module.
  Original patch by Berker Peksag.

- Issue #19674: inspect.signature() now produces a correct signature
  for some builtins.

- Issue #19722: Added opcode.stack_effect(), which
  computes the stack effect of bytecode instructions.

- Issue #19735: Implement private function ssl._create_stdlib_context() to
  create SSLContext objects in Python's stdlib module. It provides a single
  configuration point and makes use of SSLContext.load_default_certs().

- Issue #16203: Add re.fullmatch() function and regex.fullmatch() method,
  which anchor the pattern at both ends of the string to match.
  Original patch by Matthew Barnett.

- Issue #13592: Improved the repr for regular expression pattern objects.
  Based on patch by Hugo Lopes Tavares.

- Issue #19641: Added the audioop.byteswap() function to convert big-endian
  samples to little-endian and vice versa.

- Issue #15204: Deprecated the 'U' mode in file-like objects.

- Issue #17810: Implement PEP 3154, pickle protocol 4.

- Issue #19668: Added support for the cp1125 encoding.

- Issue #19689: Add ssl.create_default_context() factory function. It creates
  a new SSLContext object with secure default settings.

- Issue #19727: os.utime(..., None) is now potentially more precise
  under Windows.

- Issue #17201: ZIP64 extensions now are enabled by default.  Patch by
  William Mallard.

- Issue #19292: Add SSLContext.load_default_certs() to load default root CA
  certificates from default stores or system stores. By default the method
  loads CA certs for authentication of server certs.

- Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).

- Issue #16596: pdb in a generator now properly skips over yield and
  yield from rather than stepping out of the generator into its
  caller.  (This is essential for stepping through asyncio coroutines.)

- Issue #17916: Added dis.Bytecode.from_traceback() and
  dis.Bytecode.current_offset to easily display "current instruction"
  markers in the new disassembly API (Patch by Claudiu Popa).

- Issue #19552: venv now supports bootstrapping pip into virtual environments

- Issue #17134: Finalize interface to Windows' certificate store. Cert and
  CRL enumeration are now two functions. enum_certificates() also returns
  purpose flags as set of OIDs.

- Issue #19555: Restore sysconfig.get_config_var('SO'), (and the distutils
  equivalent) with a DeprecationWarning pointing people at $EXT_SUFFIX.

- Issue #8813: Add SSLContext.verify_flags to change the verification flags
  of the context in order to enable certification revocation list (CRL)
  checks or strict X509 rules.

- Issue #18294: Fix the zlib module to make it 64-bit safe.

- Issue #19682: Fix compatibility issue with old version of OpenSSL that
  was introduced by Issue #18379.

- Issue #14455: plistlib now supports binary plists and has an updated API.

- Issue #19633: Fixed writing not compressed 16- and 32-bit wave files on
  big-endian platforms.

- Issue #18379: SSLSocket.getpeercert() returns CA issuer AIA fields, OCSP
  and CRL distribution points.

- Issue #18138: Implement cadata argument of SSLContext.load_verify_location()
  to load CA certificates and CRL from memory. It supports PEM and DER
  encoded strings.

- Issue #18775: Add name and block_size attribute to HMAC object. They now
  provide the same API elements as non-keyed cryptographic hash functions.

- Issue #17276: MD5 as default digestmod for HMAC is deprecated. The HMAC
  module supports digestmod names, e.g. hmac.HMAC('sha1').

- Issue #19449: in csv's writerow, handle non-string keys when generating the
  error message that certain keys are not in the 'fieldnames' list.

- Issue #13633: Added a new convert_charrefs keyword arg to HTMLParser that,
  when True, automatically converts all character references.

- Issue #2927: Added the unescape() function to the html module.

- Issue #8402: Added the escape() function to the glob module.

- Issue #17618: Add Base85 and Ascii85 encoding/decoding to the base64 module.

- Issue #19634: time.strftime("%y") now raises a ValueError on AIX when given a
  year before 1900.

- Fix test.support.bind_port() to not cause an error when Python was compiled
  on a system with SO_REUSEPORT defined in the headers but run on a system
  with an OS kernel that does not support that reasonably new socket option.

- Fix compilation error under gcc of the ctypes module bundled libffi for arm.

- Issue #19448: Add private API to SSL module to lookup ASN.1 objects by OID,
  NID, short name and long name.

- Issue #19282: dbm.open now supports the context management protocol. (Initial
  patch by Claudiu Popa)

- Issue #8311: Added support for writing any bytes-like objects in the aifc,
  sunau, and wave modules.

- Issue #5202: Added support for unseekable files in the wave module.

- Issue #19544 and Issue #1180: Restore global option to ignore
  ~/.pydistutils.cfg in Distutils, accidentally removed in backout of
  distutils2 changes.

- Issue #19523: Closed FileHandler leak which occurred when delay was set.

- Issue #19544 and Issue #6516: Restore support for --user and --group
  parameters to sdist command accidentally rolled back as part of the
  distutils2 rollback.

- Issue #13674: Prevented time.strftime from crashing on Windows when given
  a year before 1900 and a format of %y.

- Issue #19406: implementation of the ensurepip module (part of PEP 453).
  Patch by Donald Stufft and Nick Coghlan.

- Issue #19544 and Issue #6286: Restore use of urllib over http allowing use
  of http_proxy for Distutils upload command, a feature accidentally lost
  in the rollback of distutils2.

- Issue #19544 and Issue #7457: Restore the read_pkg_file method to
  distutils.dist.DistributionMetadata accidentally removed in the undo of
  distutils2.

- Issue #16685: Added support for any bytes-like objects in the audioop module.
  Removed support for strings.

- Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton``
  to socket module. Patch by Atsuo Ishimoto.

- Issue #19261: Added support for writing 24-bit samples in the sunau module.

- Issue #1097797: Added CP273 encoding, used on IBM mainframes in
  Germany and Austria.  Mapping provided by Michael Bierenfeld.

- Issue #1575020: Fixed support of 24-bit wave files on big-endian platforms.

- Issue #19378: Fixed a number of cases in the dis module where the new
  "file" parameter was not being honoured correctly

- Issue #19378: Removed the "dis.Bytecode.show_info" method

- Issue #19378: Renamed the "dis.Bytecode.display_code" method to
  "dis.Bytecode.dis" and converted it to returning a string rather than
  printing output.

- Issue #19378: the "line_offset" parameter in the new "dis.get_instructions"
  API has been renamed to "first_line" (and the default value and usage
  changed accordingly). This should reduce confusion with the more common use
  of "offset" in the dis docs to refer to bytecode offsets.

- Issue #18678: Corrected spwd struct member names in spwd module:
  sp_nam->sp_namp, and sp_pwd->sp_pwdp.  The old names are kept as extra
  structseq members, for backward compatibility.

- Issue #6157: Fixed tkinter.Text.debug().  tkinter.Text.bbox() now raises
  TypeError instead of TclError on wrong number of arguments.  Original patch
  by Guilherme Polo.

- Issue #10197: Rework subprocess.get[status]output to use subprocess
  functionality and thus to work on Windows. Patch by Nick Coghlan

- Issue #6160: The bbox() method of tkinter.Spinbox now returns a tuple of
  integers instead of a string.  Based on patch by Guilherme Polo.

- Issue #19403: contextlib.redirect_stdout is now reentrant

- Issue #19286: Directories in ``package_data`` are no longer added to
  the filelist, preventing failure outlined in the ticket.

- Issue #19480: HTMLParser now accepts all valid start-tag names as defined
  by the HTML5 standard.

- Issue #15114: The html.parser module now raises a DeprecationWarning when the
  strict argument of HTMLParser or the HTMLParser.error method are used.

- Issue #19410: Undo the special-casing removal of '' for
  importlib.machinery.FileFinder.

- Issue #19424: Fix the warnings module to accept filename containing surrogate
  characters.

- Issue #19435: Fix directory traversal attack on CGIHttpRequestHandler.

- Issue #19227: Remove pthread_atfork() handler. The handler was added to
  solve #18747 but has caused issues.

- Issue #19420: Fix reference leak in module initialization code of
  _hashopenssl.c

- Issue #19329: Optimized compiling charsets in regular expressions.

- Issue #19227: Try to fix deadlocks caused by re-seeding then OpenSSL
  pseudo-random number generator on fork().

- Issue #16037: HTTPMessage.readheaders() raises an HTTPException when more than
  100 headers are read.  Adapted from patch by Jyrki Pulliainen.

- Issue #16040: CVE-2013-1752: nntplib: Limit maximum line lengths to 2048 to
  prevent readline() calls from consuming too much memory.  Patch by Jyrki
  Pulliainen.

- Issue #16041: CVE-2013-1752: poplib: Limit maximum line lengths to 2048 to
  prevent readline() calls from consuming too much memory.  Patch by Jyrki
  Pulliainen.

- Issue #17997: Change behavior of ``ssl.match_hostname()`` to follow RFC 6125,
  for security reasons.  It now doesn't match multiple wildcards nor wildcards
  inside IDN fragments.

- Issue #16039: CVE-2013-1752: Change use of readline in imaplib module to limit
  line length.  Patch by Emil Lind.

- Issue #19330: the unnecessary wrapper functions have been removed from the
  implementations of the new contextlib.redirect_stdout and
  contextlib.suppress context managers, which also ensures they provide
  reasonable help() output on instances

- Issue #19393: Fix symtable.symtable function to not be confused when there are
  functions or classes named "top".

- Issue #18685: Restore re performance to pre-PEP 393 levels.

- Issue #19339: telnetlib module is now using time.monotonic() when available
  to compute timeout.

- Issue #19399: fix sporadic test_subprocess failure.

- Issue #13234: Fix os.listdir to work with extended paths on Windows.
  Patch by Santoso Wijaya.

- Issue #19375: The site module adding a "site-python" directory to sys.path,
  if it exists, is now deprecated.

- Issue #19379: Lazily import linecache in the warnings module, to make
  startup with warnings faster until a warning gets printed.

- Issue #19288: Fixed the "in" operator of dbm.gnu databases for string
  argument.  Original patch by Arfrever Frehtes Taifersar Arahesis.

- Issue #19287: Fixed the "in" operator of dbm.ndbm databases for string
  argument.  Original patch by Arfrever Frehtes Taifersar Arahesis.

- Issue #19327: Fixed the working of regular expressions with too big charset.

- Issue #17400: New 'is_global' attribute for ipaddress to tell if an address
  is allocated by IANA for global or private networks.

- Issue #19350: Increasing the test coverage of macurl2path. Patch by Colin
  Williams.

- Issue #19365: Optimized the parsing of long replacement string in re.sub*()
  functions.

- Issue #19352: Fix unittest discovery when a module can be reached
  through several paths (e.g. under Debian/Ubuntu with virtualenv).

- Issue #15207: Fix mimetypes to read from correct part of Windows registry
  Original patch by Dave Chambers

- Issue #16595: Add prlimit() to resource module.

- Issue #19324: Expose Linux-specific constants in resource module.

- Load SSL's error strings in hashlib.

- Issue #18527: Upgrade internal copy of zlib to 1.2.8.

- Issue #19274: Add a filterfunc parameter to PyZipFile.writepy.

- Issue #8964: fix platform._sys_version to handle IronPython 2.6+.
  Patch by Martin Matusiak.

- Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.

- Issue #18958: Improve error message for json.load(s) while passing a string
  that starts with a UTF-8 BOM.

- Issue #19307: Improve error message for json.load(s) while passing objects
  of the wrong type.

- Issue #16038: CVE-2013-1752: ftplib: Limit amount of data read by
  limiting the call to readline().  Original patch by Michał
  Jastrzębski and Giampaolo Rodola.

- Issue #17087: Improved the repr for regular expression match objects.

Tests
-----

- Issue #19664: test_userdict's repr test no longer depends on the order
  of dict elements.

- Issue #19440: Clean up test_capi by removing an unnecessary __future__
  import, converting from test_main to unittest.main, and running the
  _testcapi module tests as subTests of a unittest TestCase method.

- Issue #19378: the main dis module tests are now run with both stdout
  redirection *and* passing an explicit file parameter

- Issue #19378: removed the not-actually-helpful assertInstructionMatches
  and assertBytecodeExactlyMatches helpers from bytecode_helper

- Issue #18702: All skipped tests now reported as skipped.

- Issue #19439: interpreter embedding tests are now executed on Windows
  (Patch by Zachary Ware)

- Issue #19085: Added basic tests for all tkinter widget options.

- Issue #19384: Fix test_py_compile for root user, patch by Claudiu Popa.

Documentation
-------------

- Issue #18326: Clarify that list.sort's arguments are keyword-only.  Also,
  attempt to reduce confusion in the glossary by not saying there are
  different "types" of arguments and parameters.

Build
-----

- Issue #19358: "make clinic" now runs the Argument Clinic preprocessor
  over all CPython source files.

- Update SQLite to 3.8.1, xz to 5.0.5, and Tcl/Tk to 8.6.1 on Windows.

- Issue #16632: Enable DEP and ASLR on Windows.

- Issue #17791: Drop PREFIX and EXEC_PREFIX definitions from PC/pyconfig.h

- Add workaround for VS 2010 nmake clean issue. VS 2010 doesn't set up PATH
  for nmake.exe correctly.

- Issue #19550: Implement Windows installer changes of PEP 453 (ensurepip).

- Issue #19520: Fix compiler warning in the _sha3 module on 32bit Windows.

- Issue #19356: Avoid using a C variabled named "_self", it's a reserved
  word in some C compilers.

- Issue #15792: Correct build options on Win64. Patch by Jeremy Kloth.

- Issue #19373: Apply upstream change to Tk 8.5.15 fixing OS X 10.9
  screen refresh problem for OS X installer build.

- Issue #19649: On OS X, the same set of file names are now installed
  in bin directories for all configurations: non-framework vs framework,
  and single arch vs universal builds.  pythonx.y-32 is now always
  installed for 64-bit/32-bit universal builds.  The obsolete and
  undocumented pythonw* symlinks are no longer installed anywhere.

- Issue #19553: PEP 453 - "make install" and "make altinstall" now install or
  upgrade pip by default, using the bundled pip provided by the new ensurepip
  module.  A new configure option, --with-ensurepip[=upgrade|install|no], is
  available to override the default ensurepip "--upgrade" option.  The option
  can also be set with "make [alt]install ENSUREPIP=[upgrade|install|no]".

- Issue #19551: PEP 453 - the OS X installer now installs pip by default.

- Update third-party libraries for OS X installers: xz 5.0.3 -> 5.0.5,
  SQLite 3.7.13 -> 3.8.1

- Issue #15663: Revert OS X installer built-in Tcl/Tk support for 3.4.0b1.
  Some third-party projects, such as Matplotlib and PIL/Pillow,
  depended on being able to build with Tcl and Tk frameworks in
  /Library/Frameworks.

Tools/Demos
-----------

- Issue #19730: Argument Clinic now supports all the existing PyArg
  "format units" as legacy converters, as well as two new features:
  "self converters" and the "version" directive.

- Issue #19552: pyvenv now bootstraps pip into virtual environments by
  default (pass --without-pip to request the old behaviour)

- Issue #19390: Argument Clinic no longer accepts malformed Python
  and C ids.


What's New in Python 3.4.0 Alpha 4?
===================================

Release date: 2013-10-20

Core and Builtins
-----------------

- Issue #19301: Give classes and functions that are explicitly marked global a
  global qualname.

- Issue #19279: UTF-7 decoder no longer produces illegal strings.

- Issue #16612: Add "Argument Clinic", a compile-time preprocessor for
  C files to generate argument parsing code.  (See PEP 436.)

- Issue #18810: Shift stat calls in importlib.machinery.FileFinder such that
  the code is optimistic that if something exists in a directory named exactly
  like the possible package being searched for that it's in actuality a
  directory.

- Issue #18416: importlib.machinery.PathFinder now treats '' as the cwd and
  importlib.machinery.FileFinder no longer special-cases '' to '.'. This leads
  to modules imported from cwd to now possess an absolute file path for
  __file__ (this does not affect modules specified by path on the CLI but it
  does affect -m/runpy). It also allows FileFinder to be more consistent by not
  having an edge case.

- Issue #4555: All exported C symbols are now prefixed with either
  "Py" or "_Py".

- Issue #19219: Speed up marshal.loads(), and make pyc files slightly
  (5% to 10%) smaller.

- Issue #19221: Upgrade Unicode database to version 6.3.0.

- Issue #16742: The result of the C callback PyOS_ReadlineFunctionPointer must
  now be a string allocated by PyMem_RawMalloc() or PyMem_RawRealloc() (or NULL
  if an error occurred), instead of a string allocated by PyMem_Malloc() or
  PyMem_Realloc().

- Issue #19199: Remove ``PyThreadState.tick_counter`` field

- Fix macro expansion of _PyErr_OCCURRED(), and make sure to use it in at
  least one place so as to avoid regressions.

- Issue #19087: Improve bytearray allocation in order to allow cheap popping
  of data at the front (slice deletion).

- Issue #19014: memoryview.cast() is now allowed on zero-length views.

- Issue #18690: memoryview is now automatically registered with
  collections.abc.Sequence

- Issue #19078: memoryview now correctly supports the reversed builtin
  (Patch by Claudiu Popa)

Library
-------

- Issue #17457: unittest test discovery now works with namespace packages.
  Patch by Claudiu Popa.

- Issue #18235: Fix the sysconfig variables LDSHARED and BLDSHARED under AIX.
  Patch by David Edelsohn.

- Issue #18606: Add the new "statistics" module (PEP 450).  Contributed
  by Steven D'Aprano.

- Issue #12866: The audioop module now supports 24-bit samples.

- Issue #19254: Provide an optimized Python implementation of pbkdf2_hmac.

- Issues #19201, Issue #19222, Issue #19223: Add "x" mode (exclusive creation)
  in opening file to bz2, gzip and lzma modules. Patches by Tim Heaney and
  Vajrasky Kok.

- Fix a reference count leak in _sre.

- Issue #19262: Initial check in of the 'asyncio' package (a.k.a. Tulip,
  a.k.a. PEP 3156).  There are no docs yet, and the PEP is slightly
  out of date with the code.  This module will have *provisional* status
  in Python 3.4.

- Issue #19276: Fixed the wave module on 64-bit big-endian platforms.

- Issue #19266: Rename the new-in-3.4 ``contextlib.ignore`` context manager
  to ``contextlib.suppress`` in order to be more consistent with existing
  descriptions of that operation elsewhere in the language and standard
  library documentation (Patch by Zero Piraeus).

- Issue #18891: Completed the new email package (provisional) API additions
  by adding new classes EmailMessage, MIMEPart, and ContentManager.

- Issue #18281: Unused stat constants removed from `tarfile`.

- Issue #18999: Multiprocessing now supports 'contexts' with the same API
  as the module, but bound to specified start methods.

- Issue #18468: The re.split, re.findall, and re.sub functions and the group()
  and groups() methods of match object now always return a string or a bytes
  object.

- Issue #18725: The textwrap module now supports truncating multiline text.

- Issue #18776: atexit callbacks now display their full traceback when they
  raise an exception.

- Issue #17827: Add the missing documentation for ``codecs.encode`` and
  ``codecs.decode``.

- Issue #19218: Rename collections.abc to _collections_abc in order to
  speed up interpreter start.

- Issue #18582: Add 'pbkdf2_hmac' to the hashlib module. It implements PKCS#5
  password-based key derivation functions with HMAC as pseudorandom function.

- Issue #19131: The aifc module now correctly reads and writes sampwidth of
  compressed streams.

- Issue #19209: Remove import of copyreg from the os module to speed up
  interpreter startup. stat_result and statvfs_result are now hard-coded to
  reside in the os module.

- Issue #19205: Don't import the 're' module in site and sysconfig module to
  speed up interpreter start.

- Issue #9548: Add a minimal "_bootlocale" module that is imported by the
  _io module instead of the full locale module.

- Issue #18764: Remove the 'print' alias for the PDB 'p' command so that it no
  longer shadows the print function.

- Issue #19158: A rare race in BoundedSemaphore could allow .release() too
  often.

- Issue #15805: Add contextlib.redirect_stdout().

- Issue #18716: Deprecate the formatter module.

- Issue #10712: 2to3 has a new "asserts" fixer that replaces deprecated names
  of unittest methods (e.g. failUnlessEqual -> assertEqual).

- Issue #18037: 2to3 now escapes ``'\u'`` and ``'\U'`` in native strings.

- Issue #17839: base64.decodebytes and base64.encodebytes now accept any
  object that exports a 1 dimensional array of bytes (this means the same
  is now also true for base64_codec)

- Issue #19132: The pprint module now supports compact mode.

- Issue #19137: The pprint module now correctly formats instances of set and
  frozenset subclasses.

- Issue #10042: functools.total_ordering now correctly handles
  NotImplemented being returned by the underlying comparison function (Patch
  by Katie Miller)

- Issue #19092: contextlib.ExitStack now correctly reraises exceptions
  from the __exit__ callbacks of inner context managers (Patch by Hrvoje
  Nikšić)

- Issue #12641: Avoid passing "-mno-cygwin" to the mingw32 compiler, except
  when necessary.  Patch by Oscar Benjamin.

- Issue #5845: In site.py, only load readline history from ~/.python_history
  if no history has been read already.  This avoids double writes to the
  history file at shutdown.

- Properly initialize all fields of a SSL object after allocation.

- Issue #19095: SSLSocket.getpeercert() now raises ValueError when the
  SSL handshake hasn't been done.

- Issue #4366: Fix building extensions on all platforms when --enable-shared
  is used.

- Issue #19030: Fixed `inspect.getmembers` and `inspect.classify_class_attrs`
  to attempt activating descriptors before falling back to a __dict__ search
  for faulty descriptors.  `inspect.classify_class_attrs` no longer returns
  Attributes whose home class is None.

C API
-----

- Issue #1772673: The type of `char*` arguments now changed to `const char*`.

- Issue #16129: Added a `Py_SetStandardStreamEncoding` pre-initialization API
  to allow embedding applications like Blender to force a particular
  encoding and error handler for the standard IO streams (initial patch by
  Bastien Montagne)

Tests
-----

- Issue #19275: Fix test_site on AMD64 Snow Leopard

- Issue #14407: Fix unittest test discovery in test_concurrent_futures.

- Issue #18919: Unified and extended tests for audio modules: aifc, sunau and
  wave.

- Issue #18714: Added tests for ``pdb.find_function()``.

Documentation
-------------

- Issue #18758: Fixed and improved cross-references.

- Issue #18972: Modernize email examples and use the argparse module in them.

Build
-----

- Issue #19130: Correct PCbuild/readme.txt, Python 3.3 and 3.4 require VS 2010.

- Issue #15663: Update OS X 10.6+ installer to use Tcl/Tk 8.5.15.

- Issue #14499: Fix several problems with OS X universal build support:
    1. ppc arch detection for extension module builds broke with Xcode 5
    2. ppc arch detection in configure did not work on OS X 10.4
    3. -sysroot and -arch flags were unnecessarily duplicated
    4. there was no obvious way to configure an intel-32 only build.

- Issue #19019: Change the OS X installer build script to use CFLAGS instead
  of OPT for special build options.  By setting OPT, some compiler-specific
  options like -fwrapv were overridden and thus not used, which could result
  in broken interpreters when building with clang.


What's New in Python 3.4.0 Alpha 3?
===================================

Release date: 2013-09-29

Core and Builtins
-----------------

- Issue #18818: The "encodingname" part of PYTHONIOENCODING is now optional.

- Issue #19098: Prevent overflow in the compiler when the recursion limit is set
  absurdly high.

Library
-------

- Issue #18929: `inspect.classify_class_attrs()` now correctly finds class
  attributes returned by `dir()` that are located in the metaclass.

- Issue #18950: Fix miscellaneous bugs in the sunau module.
  Au_read.readframes() now updates current file position and reads correct
  number of frames from multichannel stream.  Au_write.writeframesraw() now
  correctly updates current file position.  Au_read.getnframes() now returns an
  integer (as in Python 2).  Au_read and Au_write now correctly works with file
  object if start file position is not a zero.

- Issue #18594: The fast path for collections.Counter() was never taken
  due to an over-restrictive type check.

- Issue #19053: ZipExtFile.read1() with non-zero argument no more returns empty
  bytes until end of data.

- logging: added support for Unix domain sockets to SocketHandler and
  DatagramHandler.

- Issue #18996: TestCase.assertEqual() now more cleverly shorten differing
  strings in error report.

- Issue #19034: repr() for tkinter.Tcl_Obj now exposes string representation.

- Issue #18978: ``urllib.request.Request`` now allows the method to be
  indicated on the class and no longer sets it to None in ``__init__``.

- Issue #18626: the inspect module now offers a basic command line
  introspection interface (Initial patch by Claudiu Popa)

- Issue #3015: Fixed tkinter with ``wantobjects=False``.  Any Tcl command call
  returned empty string.

- Issue #19037: The mailbox module now makes all changes to maildir files
  before moving them into place, to avoid race conditions with other programs
  that may be accessing the maildir directory.

- Issue #14984: On POSIX systems, when netrc is called without a filename
  argument (and therefore is reading the user's $HOME/.netrc file), it now
  enforces the same security rules as typical ftp clients: the .netrc file must
  be owned by the user that owns the process and must not be readable by any
  other user.

- Issue #18873: The tokenize module now detects Python source code encoding
  only in comment lines.

- Issue #17764: Enable http.server to bind to a user specified network
  interface.  Patch contributed by Malte Swart.

- Issue #18937: Add an assertLogs() context manager to unittest.TestCase
  to ensure that a block of code emits a message using the logging module.

- Issue #17324: Fix http.server's request handling case on trailing '/'. Patch
  contributed by Vajrasky Kok.

- Issue #19018: The heapq.merge() function no longer suppresses IndexError
  in the underlying iterables.

- Issue #18784: The uuid module no longer attempts to load libc via ctypes.CDLL
  if all the necessary functions have already been found in libuuid.  Patch by
  Evgeny Sologubov.

- The :envvar:`PYTHONFAULTHANDLER` environment variable now only enables the
  faulthandler module if the variable is non-empty. Same behaviour than other
  variables like :envvar:`PYTHONDONTWRITEBYTECODE`.

- Issue #1565525: New function ``traceback.clear_frames`` will clear
  the local variables of all the stack frames referenced by a traceback
  object.

Tests
-----

- Issue #18952: Fix regression in support data downloads introduced when
  test.support was converted to a package. Regression noticed by Zachary
  Ware.

IDLE
----

- Issue #18873: IDLE now detects Python source code encoding only in comment
  lines.

- Issue #18988: The "Tab" key now works when a word is already autocompleted.

Documentation
-------------

- Issue #17003: Unified the size argument names in the io module with common
  practice.

Build
-----

- Issue #18596: Support the use of address sanity checking in recent versions
  of clang and GCC by appropriately marking known false alarms in the small
  object allocator. Patch contributed by Dhiru Kholia.

Tools/Demos
-----------

- Issue #18873: 2to3 and the findnocoding.py script now detect Python source
  code encoding only in comment lines.


What's New in Python 3.4.0 Alpha 2?
===================================

Release date: 2013-09-09

Core and Builtins
-----------------

- Issue #18942: sys._debugmallocstats() output was damaged on Windows.

- Issue #18571: Implementation of the PEP 446: file descriptors and file
  handles are now created non-inheritable; add functions
  os.get/set_inheritable(), os.get/set_handle_inheritable() and
  socket.socket.get/set_inheritable().

- Issue #11619: The parser and the import machinery do not encode Unicode
  filenames anymore on Windows.

- Issue #18808: Non-daemon threads are now automatically joined when
  a sub-interpreter is shutdown (it would previously dump a fatal error).

- Remove support for compiling on systems without getcwd().

- Issue #18774: Remove last bits of GNU PTH thread code and thread_pth.h.

- Issue #18771: Add optimization to set object lookups to reduce the cost
  of hash collisions.  The core idea is to inspect a second key/hash pair
  for each cache line retrieved.

- Issue #16105: When a signal handler fails to write to the file descriptor
  registered with ``signal.set_wakeup_fd()``, report an exception instead
  of ignoring the error.

- Issue #18722: Remove uses of the "register" keyword in C code.

- Issue #18667: Add missing "HAVE_FCHOWNAT" symbol to posix._have_functions.

- Issue #16499: Add command line option for isolated mode.

- Issue #15301: Parsing fd, uid, and gid parameters for builtins
  in Modules/posixmodule.c is now far more robust.

- Issue #18368: PyOS_StdioReadline() no longer leaks memory when realloc()
  fail.

- Issue #17934: Add a clear() method to frame objects, to help clean up
  expensive details (local variables) and break reference cycles.

- Issue #18780: %-formatting codes %d, %i, and %u now treat int-subclasses
  as int (displays value of int-subclass instead of str(int-subclass) ).

Library
-------

- Issue #18808: Thread.join() now waits for the underlying thread state to
  be destroyed before returning.  This prevents unpredictable aborts in
  Py_EndInterpreter() when some non-daemon threads are still running.

- Issue #18458: Prevent crashes with newer versions of libedit.  Its readline
  emulation has changed from 0-based indexing to 1-based like gnu readline.

- Issue #18852: Handle case of ``readline.__doc__`` being ``None`` in the new
  readline activation code in ``site.py``.

- Issue #18672: Fixed format specifiers for Py_ssize_t in debugging output in
  the _sre module.

- Issue #18830: inspect.getclasstree() no longer produces duplicate entries even
  when input list contains duplicates.

- Issue #18878: sunau.open now supports the context management protocol.  Based on
  patches by Claudiu Popa and R. David Murray.

- Issue #18909: Fix _tkinter.tkapp.interpaddr() on Windows 64-bit, don't cast
  64-bit pointer to long (32 bits).

- Issue #18876: The FileIO.mode attribute now better reflects the actual mode
  under which the file was opened.  Patch by Erik Bray.

- Issue #16853: Add new selectors module.

- Issue #18882: Add threading.main_thread() function.

- Issue #18901: The sunau getparams method now returns a namedtuple rather than
  a plain tuple.  Patch by Claudiu Popa.

- Issue #17487: The result of the wave getparams method now is pickleable again.
  Patch by Claudiu Popa.

- Issue #18756: os.urandom() now uses a lazily-opened persistent file
  descriptor, so as to avoid using many file descriptors when run in
  parallel from multiple threads.

- Issue #18418: After fork(), reinit all threads states, not only active ones.
  Patch by A. Jesse Jiryu Davis.

- Issue #17974: Switch unittest from using getopt to using argparse.

- Issue #11798: TestSuite now drops references to own tests after execution.

- Issue #16611: http.cookie now correctly parses the 'secure' and 'httponly'
  cookie flags.

- Issue #11973: Fix a problem in kevent. The flags and fflags fields are now
  properly handled as unsigned.

- Issue #18807: ``pyvenv`` now takes a --copies argument allowing copies
  instead of symlinks even where symlinks are available and the default.

- Issue #18538: ``python -m dis`` now uses argparse for argument processing.
  Patch by Michele Orrù.

- Issue #18394: Close cgi.FieldStorage's optional file.

- Issue #17702: On error, os.environb now suppresses the exception context
  when raising a new KeyError with the original key.

- Issue #16809: Fixed some tkinter incompabilities with Tcl/Tk 8.6.

- Issue #16809: Tkinter's splitlist() and split() methods now accept Tcl_Obj
  argument.

- Issue #18324: set_payload now correctly handles binary input.  This also
  supersedes the previous fixes for #14360, #1717, and #16564.

- Issue #18794: Add a fileno() method and a closed attribute to select.devpoll
  objects.

- Issue #17119: Fixed integer overflows when processing large strings and tuples
  in the tkinter module.

- Issue #18747: Re-seed OpenSSL's pseudo-random number generator after fork.
  A pthread_atfork() parent handler is used to seed the PRNG with pid, time
  and some stack data.

- Issue #8865: Concurrent invocation of select.poll.poll() now raises a
  RuntimeError exception.  Patch by Christian Schubert.

- Issue #18777: The ssl module now uses the new CRYPTO_THREADID API of
  OpenSSL 1.0.0+ instead of the deprecated CRYPTO id callback function.

- Issue #18768: Correct doc string of RAND_edg(). Patch by Vajrasky Kok.

- Issue #18178: Fix ctypes on BSD. dlmalloc.c was compiled twice which broke
  malloc weak symbols.

- Issue #18709: Fix CVE-2013-4238. The SSL module now handles NULL bytes
  inside subjectAltName correctly. Formerly the module has used OpenSSL's
  GENERAL_NAME_print() function to get the string representation of ASN.1
  strings for ``rfc822Name`` (email), ``dNSName`` (DNS) and
  ``uniformResourceIdentifier`` (URI).

- Issue #18701: Remove support of old CPython versions (<3.0) from C code.

- Issue #18756: Improve error reporting in os.urandom() when the failure
  is due to something else than /dev/urandom not existing (for example,
  exhausting the file descriptor limit).

- Issue #18673: Add O_TMPFILE to os module. O_TMPFILE requires Linux kernel
  3.11 or newer. It's only defined on system with 3.11 uapi headers, too.

- Issue #18532: Change the builtin hash algorithms' names to lower case names
  as promised by hashlib's documentation.

- Issue #8713: add new spawn and forkserver start methods, and new functions
  get_all_start_methods, get_start_method, and set_start_method, to
  multiprocessing.

- Issue #18405: Improve the entropy of crypt.mksalt().

- Issue #12015: The tempfile module now uses a suffix of 8 random characters
  instead of 6, to reduce the risk of filename collision. The entropy was
  reduced when uppercase letters were removed from the charset used to generate
  random characters.

- Issue #18585: Add :func:`textwrap.shorten` to collapse and truncate a
  piece of text to a given length.

- Issue #18598: Tweak exception message for importlib.import_module() to
  include the module name when a key argument is missing.

- Issue #19151: Fix docstring and use of _get_supported_file_loaders() to
  reflect 2-tuples.

- Issue #19152: Add ExtensionFileLoader.get_filename().

- Issue #18676: Change 'positive' to 'non-negative' in queue.py put and get
  docstrings and ValueError messages. Patch by Zhongyue Luo

- Fix refcounting issue with extension types in tkinter.

- Issue #8112: xlmrpc.server's DocXMLRPCServer server no longer raises an error
  if methods have annotations; it now correctly displays the annotations.

- Issue #18600: Added policy argument to email.message.Message.as_string,
  and as_bytes and __bytes__ methods to Message.

- Issue #18671: Output more information when logging exceptions occur.

- Issue #18621: Prevent the site module's patched builtins from keeping
  too many references alive for too long.

- Issue #4885: Add weakref support to mmap objects.  Patch by Valerie Lambert.

- Issue #8860: Fixed rounding in timedelta constructor.

- Issue #18849: Fixed a Windows-specific tempfile bug where collision with an
  existing directory caused mkstemp and related APIs to fail instead of
  retrying. Report and fix by Vlad Shcherbina.

- Issue #18920: argparse's default destination for the version action (-v,
  --version) has also been changed to stdout, to match the Python executable.

Tests
-----

- Issue #18623: Factor out the _SuppressCoreFiles context manager into
  test.support.  Patch by Valerie Lambert.

- Issue #12037: Fix test_email for desktop Windows.

- Issue #15507: test_subprocess's test_send_signal could fail if the test
  runner were run in an environment where the process inherited an ignore
  setting for SIGINT.  Restore the SIGINT handler to the desired
  KeyboardInterrupt raising one during that test.

- Issue #16799: Switched from getopt to argparse style in regrtest's argument
  parsing.  Added more tests for regrtest's argument parsing.

- Issue #18792: Use "127.0.0.1" or "::1" instead of "localhost" as much as
  possible, since "localhost" goes through a DNS lookup under recent Windows
  versions.

IDLE
----

- Issue #18489: Add tests for SearchEngine. Original patch by Phil Webster.

Documentation
-------------

- Issue #18743: Fix references to non-existent "StringIO" module.

- Issue #18783: Removed existing mentions of Python long type in docstrings,
  error messages and comments.

Build
-----

- Issue #1584: Provide configure options to override default search paths for
  Tcl and Tk when building _tkinter.

- Issue #15663: Tcl/Tk 8.5.14 is now included with the OS X 10.6+ 64-/32-bit
  installer.  It is no longer necessary to install a third-party version of
  Tcl/Tk 8.5 to work around the problems in the Apple-supplied Tcl/Tk 8.5
  shipped in OS X 10.6 and later releases.

Tools/Demos
-----------

- Issue #18922: Now The Lib/smtpd.py and Tools/i18n/msgfmt.py scripts write
  their version strings to stdout, and not to sderr.


What's New in Python 3.4.0 Alpha 1?
===================================

Release date: 2013-08-03

Core and Builtins
-----------------

- Issue #16741: Fix an error reporting in int().

- Issue #17899: Fix rare file descriptor leak in os.listdir().

- Issue #10241: Clear extension module dict copies at interpreter shutdown.
  Patch by Neil Schemenauer, minimally modified.

- Issue #9035: ismount now recognises volumes mounted below a drive root
  on Windows. Original patch by Atsuo Ishimoto.

- Issue #18214: Improve finalization of Python modules to avoid setting
  their globals to None, in most cases.

- Issue #18112: PEP 442 implementation (safe object finalization).

- Issue #18552: Check return value of PyArena_AddPyObject() in
  obj2ast_object().

- Issue #18560: Fix potential NULL pointer dereference in sum().

- Issue #18520: Add a new PyStructSequence_InitType2() function, same than
  PyStructSequence_InitType() except that it has a return value (0 on success,
  -1 on error).

- Issue #15905: Fix theoretical buffer overflow in handling of sys.argv[0],
  prefix and exec_prefix if the operation system does not obey MAXPATHLEN.

- Issue #18408: Fix many various bugs in code handling errors, especially
  on memory allocation failure (MemoryError).

- Issue #18344: Fix potential ref-leaks in _bufferedreader_read_all().

- Issue #18342: Use the repr of a module name when an import fails when using
  ``from ... import ...``.

- Issue #17872: Fix a segfault in marshal.load() when input stream returns
  more bytes than requested.

- Issue #18338: `python --version` now prints version string to stdout, and
  not to stderr.  Patch by Berker Peksag and Michael Dickens.

- Issue #18426: Fix NULL pointer dereference in C extension import when
  PyModule_GetDef() returns an error.

- Issue #17206: On Windows, increase the stack size from 2 MB to 4.2 MB to fix
  a stack overflow in the marshal module (fix a crash in test_marshal).
  Patch written by Jeremy Kloth.

- Issue #3329: Implement the PEP 445: Add new APIs to customize Python memory
  allocators.

- Issue #18328: Reorder ops in PyThreadState_Delete*() functions. Now the
  tstate is first removed from TLS and then deallocated.

- Issue #13483: Use VirtualAlloc in obmalloc on Windows.

- Issue #18184: PyUnicode_FromFormat() and PyUnicode_FromFormatV() now raise
  OverflowError when an argument of %c format is out of range.

- Issue #18111: The min() and max() functions now support a default argument
  to be returned instead of raising a ValueError on an empty sequence.
  (Contributed by Julian Berman.)

- Issue #18137: Detect integer overflow on precision in float.__format__()
  and complex.__format__().

- Issue #18183: Fix various unicode operations on strings with large unicode
  codepoints.

- Issue #18180: Fix ref leak in _PyImport_GetDynLoadWindows().

- Issue #18038: SyntaxError raised during compilation sources with illegal
  encoding now always contains an encoding name.

- Issue #17931: Resolve confusion on Windows between pids and process
  handles.

- Tweak the exception message when the magic number or size value in a bytecode
  file is truncated.

- Issue #17932: Fix an integer overflow issue on Windows 64-bit in iterators:
  change the C type of seqiterobject.it_index from long to Py_ssize_t.

- Issue #18065: Don't set __path__ to the package name for frozen packages.

- Issue #18088: When reloading a module, unconditionally reset all relevant
  attributes on the module (e.g. __name__, __loader__, __package__, __file__,
  __cached__).

- Issue #17937: Try harder to collect cyclic garbage at shutdown.

- Issue #12370: Prevent class bodies from interfering with the __class__
  closure.

- Issue #17644: Fix a crash in str.format when curly braces are used in square
  brackets.

- Issue #17237: Fix crash in the ASCII decoder on m68k.

- Issue #17927: Frame objects kept arguments alive if they had been
  copied into a cell, even if the cell was cleared.

- Issue #1545463: At shutdown, defer finalization of codec modules so
  that stderr remains usable.

- Issue #7330: Implement width and precision (ex: "%5.3s") for the format
  string of PyUnicode_FromFormat() function, original patch written by Ysj Ray.

- Issue #1545463: Global variables caught in reference cycles are now
  garbage-collected at shutdown.

- Issue #17094: Clear stale thread states after fork().  Note that this
  is a potentially disruptive change since it may release some system
  resources which would otherwise remain perpetually alive (e.g. database
  connections kept in thread-local storage).

- Issue #17408: Avoid using an obsolete instance of the copyreg module when
  the interpreter is shutdown and then started again.

- Issue #5845: Enable tab-completion in the interactive interpreter by
  default, thanks to a new sys.__interactivehook__.

- Issue #17115,17116: Module initialization now includes setting __package__ and
  __loader__ attributes to None.

- Issue #17853: Ensure locals of a class that shadow free variables always win
  over the closures.

- Issue #17863: In the interactive console, don't loop forever if the encoding
  can't be fetched from stdin.

- Issue #17867: Raise an ImportError if __import__ is not found in __builtins__.

- Issue #18698: Ensure importlib.reload() returns the module out of sys.modules.

- Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3,
  such as was shipped with Centos 5 and Mac OS X 10.4.

- Issue #17413: sys.settrace callbacks were being passed a string instead of an
  exception instance for the 'value' element of the arg tuple if the exception
  originated from C code; now an exception instance is always provided.

- Issue #17782: Fix undefined behaviour on platforms where
  ``struct timespec``'s "tv_nsec" member is not a C long.

- Issue #17722: When looking up __round__, resolve descriptors.

- Issue #16061: Speed up str.replace() for replacing 1-character strings.

- Issue #17715: Fix segmentation fault from raising an exception in a __trunc__
  method.

- Issue #17643: Add __callback__ attribute to weakref.ref.

- Issue #16447: Fixed potential segmentation fault when setting __name__ on a
  class.

- Issue #17669: Fix crash involving finalization of generators using yield from.

- Issue #14439: Python now prints the traceback on runpy failure at startup.

- Issue #17469: Fix _Py_GetAllocatedBlocks() and sys.getallocatedblocks()
  when running on valgrind.

- Issue #17619: Make input() check for Ctrl-C correctly on Windows.

- Issue #17357: Add missing verbosity messages for -v/-vv that were lost during
  the importlib transition.

- Issue #17610: Don't rely on non-standard behavior of the C qsort() function.

- Issue #17323: The "[X refs, Y blocks]" printed by debug builds has been
  disabled by default.  It can be re-enabled with the `-X showrefcount` option.

- Issue #17328: Fix possible refleak in dict.setdefault.

- Issue #17275: Corrected class name in init error messages of the C version of
  BufferedWriter and BufferedRandom.

- Issue #7963: Fixed misleading error message that issued when object is
  called without arguments.

- Issue #8745: Small speed up zipimport on Windows. Patch by Catalin Iacob.

- Issue #5308: Raise ValueError when marshalling too large object (a sequence
  with size >= 2**31), instead of producing illegal marshal data.

- Issue #12983: Bytes literals with invalid ``\x`` escape now raise a SyntaxError
  and a full traceback including line number.

- Issue #16967: In function definition, evaluate positional defaults before
  keyword-only defaults.

- Issue #17173: Remove uses of locale-dependent C functions (isalpha() etc.)
  in the interpreter.

- Issue #17137: When an Unicode string is resized, the internal wide character
  string (wstr) format is now cleared.

- Issue #17043: The unicode-internal decoder no longer read past the end of
  input buffer.

- Issue #17098: All modules now have __loader__ set even if they pre-exist the
  bootstrapping of importlib.

- Issue #16979: Fix error handling bugs in the unicode-escape-decode decoder.

- Issue #16772: The base argument to the int constructor no longer accepts
  floats, or other non-integer objects with an __int__ method.  Objects
  with an __index__ method are now accepted.

- Issue #10156: In the interpreter's initialization phase, unicode globals
  are now initialized dynamically as needed.

- Issue #16980: Fix processing of escaped non-ascii bytes in the
  unicode-escape-decode decoder.

- Issue #16975: Fix error handling bug in the escape-decode bytes decoder.

- Issue #14850: Now a charmap decoder treats U+FFFE as "undefined mapping"
  in any mapping, not only in a string.

- Issue #16613: Add *m* argument to ``collections.Chainmap.new_child`` to
  allow the new child map to be specified explicitly.

- Issue #16730: importlib.machinery.FileFinder now no longer raises an
  exception when trying to populate its cache and it finds out the directory is
  unreadable or has turned into a file. Reported and diagnosed by
  David Pritchard.

- Issue #16906: Fix a logic error that prevented most static strings from being
  cleared.

- Issue #11461: Fix the incremental UTF-16 decoder. Original patch by
  Amaury Forgeot d'Arc.

- Issue #16856: Fix a segmentation fault from calling repr() on a dict with
  a key whose repr raise an exception.

- Issue #16367: Fix FileIO.readall() on Windows for files larger than 2 GB.

- Issue #16761: Calling int() with base argument only now raises TypeError.

- Issue #16759: Support the full DWORD (unsigned long) range in Reg2Py
  when retrieving a REG_DWORD value. This corrects functions like
  winreg.QueryValueEx that may have been returning truncated values.

- Issue #14420: Support the full DWORD (unsigned long) range in Py2Reg
  when passed a REG_DWORD value. Fixes OverflowError in winreg.SetValueEx.

- Issue #11939: Set the st_dev attribute of stat_result to allow Windows to
  take advantage of the os.path.samefile/sameopenfile/samestat implementations
  used by other platforms.

- Issue #16772: The int() constructor's second argument (base) no longer
  accepts non integer values.  Consistent with the behavior in Python 2.

- Issue #14470: Remove w9xpopen support per PEP 11.

- Issue #9856: Replace deprecation warning with raising TypeError
  in object.__format__. Patch by Florent Xicluna.

- Issue #16597: In buffered and text IO, call close() on the underlying stream
  if invoking flush() fails.

- Issue #16722: In the bytes() constructor, try to call __bytes__ on the
  argument before __index__.

- Issue #16421: loading multiple modules from one shared object is now
  handled correctly (previously, the first module loaded from that file
  was silently returned). Patch by Václav Šmilauer.

- Issue #16602: When a weakref's target was part of a long deallocation
  chain, the object could remain reachable through its weakref even though
  its refcount had dropped to zero.

- Issue #16495: Remove extraneous NULL encoding check from bytes_decode().

- Issue #16619: Create NameConstant AST class to represent None, True, and False
  literals. As a result, these constants are never loaded at runtime from
  builtins.

- Issue #16455: On FreeBSD and Solaris, if the locale is C, the
  ASCII/surrogateescape codec is now used (instead of the locale encoding) to
  decode the command line arguments. This change fixes inconsistencies with
  os.fsencode() and os.fsdecode(), because these operating systems announce an
  ASCII locale encoding, but actually use the ISO-8859-1 encoding in practice.

- Issue #16562: Optimize dict equality testing.  Patch by Serhiy Storchaka.

- Issue #16588: Silence unused-but-set warnings in Python/thread_pthread

- Issue #16592: stringlib_bytes_join doesn't raise MemoryError on allocation
  failure.

- Issue #16546: Fix: ast.YieldFrom argument is now mandatory.

- Issue #16514: Fix regression causing a traceback when sys.path[0] is None
  (actually, any non-string or non-bytes type).

- Issue #16306: Fix multiple error messages when unknown command line
  parameters where passed to the interpreter.  Patch by Hieu Nguyen.

- Issue #16215: Fix potential double memory free in str.replace().  Patch
  by Serhiy Storchaka.

- Issue #16290: A float return value from the __complex__ special method is no
  longer accepted in the complex() constructor.

- Issue #16416: On Mac OS X, operating system data are now always
  encoded/decoded to/from UTF-8/surrogateescape, instead of the locale encoding
  (which may be ASCII if no locale environment variable is set), to avoid
  inconsistencies with os.fsencode() and os.fsdecode() functions which are
  already using UTF-8/surrogateescape.

- Issue #16453: Fix equality testing of dead weakref objects.

- Issue #9535: Fix pending signals that have been received but not yet
  handled by Python to not persist after os.fork() in the child process.

- Issue #14794: Fix slice.indices to return correct results for huge values,
  rather than raising OverflowError.

- Issue #15001: fix segfault on "del sys.modules['__main__']". Patch by Victor
  Stinner.

- Issue #8271: the utf-8 decoder now outputs the correct number of U+FFFD
  characters when used with the 'replace' error handler on invalid utf-8
  sequences.  Patch by Serhiy Storchaka, tests by Ezio Melotti.

- Issue #5765: Apply a hard recursion limit in the compiler instead of
  blowing the stack and segfaulting. Initial patch by Andrea Griffini.

- Issue #16402: When slicing a range, fix shadowing of exceptions from
  __index__.

- Issue #16336: fix input checking in the surrogatepass error handler.
  Patch by Serhiy Storchaka.

- Issue #8401: assigning an int to a bytearray slice (e.g. b[3:4] = 5) now
  raises an error.

- Issue #7317: Display full tracebacks when an error occurs asynchronously.
  Patch by Alon Horev with update by Alexey Kachayev.

- Issue #16309: Make PYTHONPATH="" behavior the same as if PYTHONPATH
  not set at all.

- Issue #10189: Improve the error reporting of SyntaxErrors related to global
  and nonlocal statements.

- Fix segfaults on setting __qualname__ on builtin types and attempting to
  delete it on any type.

- Issue #14625: Rewrite the UTF-32 decoder. It is now 3x to 4x faster. Patch
  written by Serhiy Storchaka.

- Issue #16345: Fix an infinite loop when ``fromkeys`` on a dict subclass
  received a nonempty dict from the constructor.

- Issue #16271: Fix strange bugs that resulted from __qualname__ appearing in a
  class's __dict__ and on type.

- Issue #12805: Make bytes.join and bytearray.join faster when the separator
  is empty.  Patch by Serhiy Storchaka.

- Issue #6074: Ensure cached bytecode files can always be updated by the
  user that created them, even when the source file is read-only.

- Issue #15958: bytes.join and bytearray.join now accept arbitrary buffer
  objects.

- Issue #14783: Improve int() docstring and switch docstrings for str(),
  range(), and slice() to use multi-line signatures.

- Issue #16160: Subclass support now works for types.SimpleNamespace.

- Issue #16148: Implement PEP 424, adding operator.length_hint and
  PyObject_LengthHint.

- Upgrade Unicode data (UCD) to version 6.2.

- Issue #15379: Fix passing of non-BMP characters as integers for the charmap
  decoder (already working as unicode strings).  Patch by Serhiy Storchaka.

- Issue #15144: Fix possible integer overflow when handling pointers as integer
  values, by using `Py_uintptr_t` instead of `size_t`.  Patch by Serhiy
  Storchaka.

- Issue #15965: Explicitly cast `AT_FDCWD` as (int).  Required on Solaris 10
  (which defines `AT_FDCWD` as ``0xffd19553``), harmless on other platforms.

- Issue #15839: Convert SystemErrors in `super()` to RuntimeErrors.

- Issue #15448: Buffered IO now frees the buffer when closed, instead
  of when deallocating.

- Issue #15846: Fix SystemError which happened when using `ast.parse()` in an
  exception handler on code with syntax errors.

- Issue #15897: zipimport.c doesn't check return value of fseek().
  Patch by Felipe Cruz.

- Issue #15801: Make sure mappings passed to '%' formatting are actually
  subscriptable.

- Issue #15111: __import__ should propagate ImportError when raised as a
  side-effect of a module triggered from using fromlist.

- Issue #15022: Add pickle and comparison support to types.SimpleNamespace.

Library
-------

- Issue #4331: Added functools.partialmethod (Initial patch by Alon Horev)

- Issue #13461: Fix a crash in the TextIOWrapper.tell method on 64-bit
  platforms.  Patch by Yogesh Chaudhari.

- Issue #18681: Fix a NameError in importlib.reload() (noticed by Weizhao Li).

- Issue #14323: Expanded the number of digits in the coefficients for the
  RGB -- YIQ conversions so that they match the FCC NTSC versions.

- Issue #17998: Fix an internal error in regular expression engine.

- Issue #17557: Fix os.getgroups() to work with the modified behavior of
  getgroups(2) on OS X 10.8.  Original patch by Mateusz Lenik.

- Issue #18608: Avoid keeping a strong reference to the locale module
  inside the _io module.

- Issue #18619: Fix atexit leaking callbacks registered from sub-interpreters,
  and make it GC-aware.

- Issue #15699: The readline module now uses PEP 3121-style module
  initialization, so as to reclaim allocated resources (Python callbacks)
  at shutdown.  Original patch by Robin Schreiber.

- Issue #17616: wave.open now supports the context management protocol.

- Issue #18599: Fix name attribute of _sha1.sha1() object. It now returns
  'SHA1' instead of 'SHA'.

- Issue #13266: Added inspect.unwrap to easily unravel __wrapped__ chains
  (initial patch by Daniel Urban and Aaron Iles)

- Issue #18561: Skip name in ctypes' _build_callargs() if name is NULL.

- Issue #18559: Fix NULL pointer dereference error in _pickle module

- Issue #18556: Check the return type of PyUnicode_AsWideChar() in ctype's
  U_set().

- Issue #17818: aifc.getparams now returns a namedtuple.

- Issue #18549: Eliminate dead code in socket_ntohl()

- Issue #18530: Remove additional stat call from posixpath.ismount.
  Patch by Alex Gaynor.

- Issue #18514: Fix unreachable Py_DECREF() call in PyCData_FromBaseObj()

- Issue #9177: Calling read() or write() now raises ValueError, not
  AttributeError, on a closed SSL socket.  Patch by Senko Rasic.

- Issue #18513: Fix behaviour of cmath.rect w.r.t. signed zeros on OS X 10.8 +
  gcc.

- Issue #18479: Changed venv Activate.ps1 to make deactivate a function, and
  removed Deactivate.ps1.

- Issue #18480: Add missing call to PyType_Ready to the _elementtree extension.

- Issue #17778: Fix test discovery for test_multiprocessing. (Patch by
  Zachary Ware.)

- Issue #18393: The private module _gestalt and private functions
  platform._mac_ver_gestalt, platform._mac_ver_lookup and
  platform._bcd2str have been removed. This does not affect the public
  interface of the platform module.

- Issue #17482: functools.update_wrapper (and functools.wraps) now set the
  __wrapped__ attribute correctly even if the underlying function has a
  __wrapped__ attribute set.

- Issue #18431: The new email header parser now decodes RFC2047 encoded words
  in structured headers.

- Issue #18432: The sched module's queue method was incorrectly returning
  an iterator instead of a list.

- Issue #18044: The new email header parser was mis-parsing encoded words where
  an encoded character immediately followed the '?' that follows the CTE
  character, resulting in a decoding failure.  They are now decoded correctly.

- Issue #18101: Tcl.split() now process strings nested in a tuple as it
  do with byte strings.

- Issue #18116: getpass was always getting an error when testing /dev/tty,
  and thus was always falling back to stdin, and would then raise an exception
  if stdin could not be used (such as /dev/null).  It also leaked an open file.
  All of these issues are now fixed.

- Issue #17198: Fix a NameError in the dbm module.  Patch by Valentina
  Mukhamedzhanova.

- Issue #18013: Fix cgi.FieldStorage to parse the W3C sample form.

- Issue #18020: improve html.escape speed by an order of magnitude.
  Patch by Matt Bryant.

- Issue #18347: ElementTree's html serializer now preserves the case of
  closing tags.

- Issue #17261: Ensure multiprocessing's proxies use proper address.

- Issue #18343: faulthandler.register() now keeps the previous signal handler
  when the function is called twice, so faulthandler.unregister() restores
  correctly the original signal handler.

- Issue #17097: Make multiprocessing ignore EINTR.

- Issue #18339: Negative ints keys in unpickler.memo dict no longer cause a
  segfault inside the _pickle C extension.

- Issue #18240: The HMAC module is no longer restricted to bytes and accepts
  any bytes-like object, e.g. memoryview. Original patch by Jonas Borgström.

- Issue #18224: Removed pydoc script from created venv, as it causes problems
  on Windows and adds no value over and above python -m pydoc ...

- Issue #18155: The csv module now correctly handles csv files that use
  a delimiter character that has a special meaning in regexes, instead of
  throwing an exception.

- Issue #14360: encode_quopri can now be successfully used as an encoder
  when constructing a MIMEApplication object.

- Issue #11390: Add -o and -f command line options to the doctest CLI to
  specify doctest options (and convert it to using argparse).

- Issue #18135: ssl.SSLSocket.write() now raises an OverflowError if the input
  string in longer than 2 gigabytes, and ssl.SSLContext.load_cert_chain()
  raises a ValueError if the password is longer than 2 gigabytes. The ssl
  module does not support partial write.

- Issue #11016: Add C implementation of the stat module as _stat.

- Issue #18248: Fix libffi build on AIX.

- Issue #18259: Declare sethostname in socketmodule.c for AIX

- Issue #18147: Add diagnostic functions to ssl.SSLContext(). get_ca_list()
  lists all loaded CA certificates and cert_store_stats() returns amount of
  loaded X.509 certs, X.509 CA certs and CRLs.

- Issue #18167: cgi.FieldStorage no longer fails to handle multipart/form-data
  when ``\r\n`` appears at end of 65535 bytes without other newlines.

- Issue #18076: Introduce importlib.util.decode_source().

- Issue #18357: add tests for dictview set difference.
  Patch by Fraser Tweedale.

- importlib.abc.SourceLoader.get_source() no longer changes SyntaxError or
  UnicodeDecodeError into ImportError.

- Issue #18058, 18057: Make the namespace package loader meet the
  importlib.abc.InspectLoader ABC, allowing for namespace packages to work with
  runpy.

- Issue #17177: The imp module is pending deprecation.

- subprocess: Prevent a possible double close of parent pipe fds when the
  subprocess exec runs into an error.  Prevent a regular multi-close of the
  /dev/null fd when any of stdin, stdout and stderr was set to DEVNULL.

- Issue #18194: Introduce importlib.util.cache_from_source() and
  source_from_cache() while documenting the equivalent functions in imp as
  deprecated.

- Issue #17907: Document imp.new_module() as deprecated in favour of
  types.ModuleType.

- Issue #18192: Introduce importlib.util.MAGIC_NUMBER and document as deprecated
  imp.get_magic().

- Issue #18149: Add filecmp.clear_cache() to manually clear the filecmp cache.
  Patch by Mark Levitt

- Issue #18193: Add importlib.reload().

- Issue #18157: Stop using imp.load_module() in pydoc.

- Issue #16102: Make uuid._netbios_getnode() work again on Python 3.

- Issue #17134: Add ssl.enum_cert_store() as interface to Windows' cert store.

- Issue #18143: Implement ssl.get_default_verify_paths() in order to debug
  the default locations for cafile and capath.

- Issue #17314: Move multiprocessing.forking over to importlib.

- Issue #11959: SMTPServer and SMTPChannel now take an optional map, use of
  which avoids affecting global state.

- Issue #18109: os.uname() now decodes fields from the locale encoding, and
  socket.gethostname() now decodes the hostname from the locale encoding,
  instead of using the UTF-8 encoding in strict mode.

- Issue #18089: Implement importlib.abc.InspectLoader.load_module.

- Issue #18088: Introduce importlib.abc.Loader.init_module_attrs for setting
  module attributes. Leads to the pending deprecation of
  importlib.util.module_for_loader.

- Issue #17403: urllib.parse.robotparser normalizes the urls before adding to
  ruleline. This helps in handling certain types invalid urls in a conservative
  manner. Patch contributed by Mher Movsisyan.

- Issue #18070: Have importlib.util.module_for_loader() set attributes
  unconditionally in order to properly support reloading.

- Added importlib.util.module_to_load to return a context manager to provide the
  proper module object to load.

- Issue #18025: Fixed a segfault in io.BufferedIOBase.readinto() when raw
  stream's read() returns more bytes than requested.

- Issue #18011: As was originally intended, base64.b32decode() now raises a
  binascii.Error if there are non-b32-alphabet characters present in the input
  string, instead of a TypeError.

- Issue #18072: Implement importlib.abc.InspectLoader.get_code() and
  importlib.abc.ExecutionLoader.get_code().

- Issue #8240: Set the SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER flag on SSL
  sockets.

- Issue #17269: Workaround for socket.getaddrinfo crash on MacOS X
  with port None or "0" and flags AI_NUMERICSERV.

- Issue #16986: ElementTree now correctly works with string input when the
  internal XML encoding is not UTF-8 or US-ASCII.

- Issue #17996: socket module now exposes AF_LINK constant on BSD and OSX.

- Issue #17900: Allowed pickling of recursive OrderedDicts.  Decreased pickled
  size and pickling time.

- Issue #17914: Add os.cpu_count(). Patch by Yogesh Chaudhari, based on an
  initial patch by Trent Nelson.

- Issue #17812: Fixed quadratic complexity of base64.b32encode().
  Optimize base64.b32encode() and base64.b32decode() (speed up to 3x).

- Issue #17980: Fix possible abuse of ssl.match_hostname() for denial of
  service using certificates with many wildcards (CVE-2013-2099).

- Issue #15758: Fix FileIO.readall() so it no longer has O(n**2) complexity.

- Issue #14596: The struct.Struct() objects now use a more compact
  implementation.

- Issue #17981: logging's SysLogHandler now closes the socket when it catches
  socket OSErrors.

- Issue #17964: Fix os.sysconf(): the return type of the C sysconf() function
  is long, not int.

- Fix typos in the multiprocessing module.

- Issue #17754: Make ctypes.util.find_library() independent of the locale.

- Issue #17968: Fix memory leak in os.listxattr().

- Issue #17606: Fixed support of encoded byte strings in the XMLGenerator
  characters() and ignorableWhitespace() methods.  Original patch by Sebastian
  Ortiz Vasquez.

- Issue #17732: Ignore distutils.cfg options pertaining to install paths if a
  virtual environment is active.

- Issue #17915: Fix interoperability of xml.sax with file objects returned by
  codecs.open().

- Issue #16601: Restarting iteration over tarfile really restarts rather
  than continuing from where it left off.  Patch by Michael Birtwell.

- Issue #17289: The readline module now plays nicer with external modules
  or applications changing the rl_completer_word_break_characters global
  variable.  Initial patch by Bradley Froehle.

- Issue #12181: select module: Fix struct kevent definition on OpenBSD 64-bit
  platforms. Patch by Federico Schwindt.

- Issue #11816: multiple improvements to the dis module: get_instructions
  generator, ability to redirect output to a file, Bytecode and Instruction
  abstractions. Patch by Nick Coghlan, Ryan Kelly and Thomas Kluyver.

- Issue #13831: Embed stringification of remote traceback in local
  traceback raised when pool task raises an exception.

- Issue #15528: Add weakref.finalize to support finalization using
  weakref callbacks.

- Issue #14173: Avoid crashing when reading a signal handler during
  interpreter shutdown.

- Issue #15902: Fix imp.load_module() accepting None as a file when loading an
  extension module.

- Issue #13721: SSLSocket.getpeercert() and SSLSocket.do_handshake() now
  raise an OSError with ENOTCONN, instead of an AttributeError, when the
  SSLSocket is not connected.

- Issue #14679: add an __all__ (that contains only HTMLParser) to html.parser.

- Issue #17802: Fix an UnboundLocalError in html.parser.  Initial tests by
  Thomas Barlow.

- Issue #17358: Modules loaded by imp.load_source() and load_compiled() (and by
  extension load_module()) now have a better chance of working when reloaded.

- Issue #17804: New function ``struct.iter_unpack`` allows for streaming
  struct unpacking.

- Issue #17830: When keyword.py is used to update a keyword file, it now
  preserves the line endings of the original file.

- Issue #17272: Making the urllib.request's Request.full_url a descriptor.
  Fixes bugs with assignment to full_url. Patch by Demian Brecht.

- Issue #17353: Plistlib emitted empty data tags with deeply nested datastructures

- Issue #11714: Use 'with' statements to assure a Semaphore releases a
  condition variable.  Original patch by Thomas Rachel.

- Issue #16624: `subprocess.check_output` now accepts an `input` argument,
  allowing the subprocess's stdin to be provided as a (byte) string.
  Patch by Zack Weinberg.

- Issue #17795: Reverted backwards-incompatible change in SysLogHandler with
  Unix domain sockets.

- Issue #16694: Add a pure Python implementation of the operator module.
  Patch by Zachary Ware.

- Issue #11182: remove the unused and undocumented pydoc.Scanner class.
  Patch by Martin Morrison.

- Issue #17741: Add ElementTree.XMLPullParser, an event-driven parser for
  non-blocking applications.

- Issue #17555: Fix ForkAwareThreadLock so that size of after fork
  registry does not grow exponentially with generation of process.

- Issue #17707: fix regression in multiprocessing.Queue's get() method where
  it did not block for short timeouts.

- Issue #17720: Fix the Python implementation of pickle.Unpickler to correctly
  process the APPENDS opcode when it is used on non-list objects.

- Issue #17012: shutil.which() no longer falls back to the PATH environment
  variable if an empty path argument is specified.  Patch by Serhiy Storchaka.

- Issue #17710: Fix pickle raising a SystemError on bogus input.

- Issue #17341: Include the invalid name in the error messages from re about
  invalid group names.

- Issue #17702: os.environ now raises KeyError with the original environment
  variable name (str on UNIX), instead of using the encoded name (bytes on
  UNIX).

- Issue #16163: Make the importlib based version of pkgutil.iter_importers
  work for submodules. Initial patch by Berker Peksag.

- Issue #16804: Fix a bug in the 'site' module that caused running
  'python -S -m site' to incorrectly throw an exception.

- Issue #15480: Remove the deprecated and unused TYPE_INT64 code from marshal.
  Initial patch by Daniel Riti.

- Issue #2118: SMTPException is now a subclass of OSError.

- Issue #17016: Get rid of possible pointer wraparounds and integer overflows
  in the re module.  Patch by Nickolai Zeldovich.

- Issue #16658: add missing return to HTTPConnection.send().
  Patch by Jeff Knupp.

- Issue #9556: the logging package now allows specifying a time-of-day for a
  TimedRotatingFileHandler to rotate.

- Issue #14971: unittest test discovery no longer gets confused when a function
  has a different __name__ than its name in the TestCase class dictionary.

- Issue #17487: The wave getparams method now returns a namedtuple rather than
  a plain tuple.

- Issue #17675: socket repr() provides local and remote addresses (if any).
  Patch by Giampaolo Rodola'

- Issue #17093: Make the ABCs in importlib.abc provide default values or raise
  reasonable exceptions for their methods to make them more amenable to super()
  calls.

- Issue #17566: Make importlib.abc.Loader.module_repr() optional instead of an
  abstractmethod; now it raises NotImplementedError so as to be ignored by default.

- Issue #17678: Remove the use of deprecated method in http/cookiejar.py by
  changing the call to get_origin_req_host() to origin_req_host.

- Issue #17666: Fix reading gzip files with an extra field.

- Issue #16475: Support object instancing, recursion and interned strings
  in marshal

- Issue #17502: Process DEFAULT values in mock side_effect that returns iterator.

- Issue #16795: On the ast.arguments object, unify vararg with varargannotation
  and kwarg and kwargannotation. Change the column offset of ast.Attribute to be
  at the attribute name.

- Issue #17434: Properly raise a SyntaxError when a string occurs between future
  imports.

- Issue #17117: Import and @importlib.util.set_loader now set __loader__ when
  it has a value of None or the attribute doesn't exist.

- Issue #17032: The "global" in the "NameError: global name 'x' is not defined"
  error message has been removed.  Patch by Ram Rachum.

- Issue #18080: When building a C extension module on OS X, if the compiler
  is overridden with the CC environment variable, use the new compiler as
  the default for linking if LDSHARED is not also overridden.  This restores
  Distutils behavior introduced in 3.2.3 and inadvertently dropped in 3.3.0.

- Issue #18113: Fixed a refcount leak in the curses.panel module's
  set_userptr() method.  Reported by Atsuo Ishimoto.

- Implement PEP 443 "Single-dispatch generic functions".

- Implement PEP 435 "Adding an Enum type to the Python standard library".

- Issue #15596: Faster pickling of unicode strings.

- Issue #17572: Avoid chained exceptions when passing bad directives to
  time.strptime().  Initial patch by Claudiu Popa.

- Issue #17435: threading.Timer's __init__ method no longer uses mutable
  default values for the args and kwargs parameters.

- Issue #17526: fix an IndexError raised while passing code without filename to
  inspect.findsource().  Initial patch by Tyler Doyle.

- Issue #17540: Added style parameter to logging formatter configuration by dict.

- Issue #16692: The ssl module now supports TLS 1.1 and TLS 1.2.  Initial
  patch by Michele Orrù.

- Issue #17025: multiprocessing: Reduce Queue and SimpleQueue contention.

- Issue #17536: Add to webbrowser's browser list: www-browser, x-www-browser,
  iceweasel, iceape.

- Issue #17150: pprint now uses line continuations to wrap long string
  literals.

- Issue #17488: Change the subprocess.Popen bufsize parameter default value
  from unbuffered (0) to buffering (-1) to match the behavior existing code
  expects and match the behavior of the subprocess module in Python 2 to avoid
  introducing hard to track down bugs.

- Issue #17521: Corrected non-enabling of logger following two calls to
  fileConfig().

- Issue #17508: Corrected logging MemoryHandler configuration in dictConfig()
  where the target handler wasn't configured first.

- Issue #17209: curses.window.get_wch() now correctly handles KeyboardInterrupt
  (CTRL+c).

- Issue #5713: smtplib now handles 421 (closing connection) error codes when
  sending mail by closing the socket and reporting the 421 error code via the
  exception appropriate to the command that received the error response.

- Issue #16997: unittest.TestCase now provides a subTest() context manager
  to procedurally generate, in an easy way, small test instances.

- Issue #17485: Also delete the Request Content-Length header if the data
  attribute is deleted.  (Follow on to issue Issue #16464).

- Issue #15927: CVS now correctly parses escaped newlines and carriage
  when parsing with quoting turned off.

- Issue #17467: add readline and readlines support to mock_open in
  unittest.mock.

- Issue #13248: removed deprecated and undocumented difflib.isbjunk,
  isbpopular.

- Issue #17192: Update the ctypes module's libffi to v3.0.13.  This
  specifically addresses a stack misalignment issue on x86 and issues on
  some more recent platforms.

- Issue #8862: Fixed curses cleanup when getkey is interrupted by a signal.

- Issue #17443: imaplib.IMAP4_stream was using the default unbuffered IO
  in subprocess, but the imap code assumes buffered IO.  In Python2 this
  worked by accident.  IMAP4_stream now explicitly uses buffered IO.

- Issue #17476: Fixed regression relative to Python2 in undocumented pydoc
  'allmethods'; it was missing unbound methods on the class.

- Issue #17474: Remove the deprecated methods of Request class.

- Issue #16709: unittest discover order is no-longer filesystem specific. Patch
  by Jeff Ramnani.

- Use the HTTPS PyPI url for upload, overriding any plain HTTP URL in pypirc.

- Issue #5024: sndhdr.whichhdr now returns the frame count for WAV files
  rather than -1.

- Issue #17460: Remove the strict argument of HTTPConnection and removing the
  DeprecationWarning being issued from 3.2 onwards.

- Issue #16880: Do not assume _imp.load_dynamic() is defined in the imp module.

- Issue #16389: Fixed a performance regression relative to Python 3.1 in the
  caching of compiled regular expressions.

- Added missing FeedParser and BytesFeedParser to email.parser.__all__.

- Issue #17431: Fix missing import of BytesFeedParser in email.parser.

- Issue #12921: http.server's send_error takes an explain argument to send more
  information in response. Patch contributed by Karl.

- Issue #17414: Add timeit, repeat, and default_timer to timeit.__all__.

- Issue #1285086: Get rid of the refcounting hack and speed up
  urllib.parse.unquote() and urllib.parse.unquote_to_bytes().

- Issue #17099: Have importlib.find_loader() raise ValueError when __loader__
  is not set, harmonizing with what happens when the attribute is set to None.

- Expose the O_PATH constant in the os module if it is available.

- Issue #17368: Fix an off-by-one error in the Python JSON decoder that caused
  a failure while decoding empty object literals when object_pairs_hook was
  specified.

- Issue #17385: Fix quadratic behavior in threading.Condition.  The FIFO
  queue now uses a deque instead of a list.

- Issue #15806: Add contextlib.ignore().  This creates a context manager to
  ignore specified exceptions, replacing the "except SomeException: pass" idiom.

- Issue #14645: The email generator classes now produce output using the
  specified linesep throughout.  Previously if the prolog, epilog, or
  body were stored with a different linesep, that linesep was used.  This
  fix corrects an RFC non-compliance issue with smtplib.send_message.

- Issue #17278: Fix a crash in heapq.heappush() and heapq.heappop() when
  the list is being resized concurrently.

- Issue #16962: Use getdents64 instead of the obsolete getdents syscall
  in the subprocess module on Linux.

- Issue #16935: unittest now counts the module as skipped if it raises SkipTest,
  instead of counting it as an error.  Patch by Zachary Ware.

- Issue #17018: Make Process.join() retry if os.waitpid() fails with EINTR.

- Issue #17223: array module: Fix a crasher when converting an array containing
  invalid characters (outside range [U+0000; U+10ffff]) to Unicode:
  repr(array), str(array) and array.tounicode(). Patch written by Manuel Jacob.

- Issue #17197: profile/cProfile modules refactored so that code of run() and
  runctx() utility functions is not duplicated in both modules.

- Issue #14720: sqlite3: Convert datetime microseconds correctly.
  Patch by Lowe Thiderman.

- Issue #15132: Allow a list for the defaultTest argument of
  unittest.TestProgram. Patch by Jyrki Pulliainen.

- Issue #17225: JSON decoder now counts columns in the first line starting
  with 1, as in other lines.

- Issue #6623: Added explicit DeprecationWarning for ftplib.netrc, which has
  been deprecated and undocumented for a long time.

- Issue #13700: Fix byte/string handling in imaplib authentication when an
  authobject is specified.

- Issue #13153: Tkinter functions now raise TclError instead of ValueError when
  a string argument contains non-BMP character.

- Issue #9669: Protect re against infinite loops on zero-width matching in
  non-greedy repeat.  Patch by Matthew Barnett.

- Issue #13169: The maximal repetition number in a regular expression has been
  increased from 65534 to 2147483647 (on 32-bit platform) or 4294967294 (on
  64-bit).

- Issue #17143: Fix a missing import in the trace module.  Initial patch by
  Berker Peksag.

- Issue #15220: email.feedparser's line splitting algorithm is now simpler and
  faster.

- Issue #16743: Fix mmap overflow check on 32 bit Windows.

- Issue #16996: webbrowser module now uses shutil.which() to find a
  web-browser on the executable search path.

- Issue #16800: tempfile.gettempdir() no longer left temporary files when
  the disk is full.  Original patch by Amir Szekely.

- Issue #17192: Import libffi-3.0.12.

- Issue #16564: Fixed regression relative to Python2 in the operation of
  email.encoders.encode_7or8bit when used with binary data.

- Issue #17052: unittest discovery should use self.testLoader.

- Issue #4591: Uid and gid values larger than 2**31 are supported now.

- Issue #17141: random.vonmisesvariate() no longer hangs for large kappas.

- Issue #17149: Fix random.vonmisesvariate to always return results in
  [0, 2*math.pi].

- Issue #1470548: XMLGenerator now works with binary output streams.

- Issue #6975: os.path.realpath() now correctly resolves multiple nested
  symlinks on POSIX platforms.

- Issue #13773: sqlite3.connect() gets a new `uri` parameter to pass the
  filename as a URI, allowing to pass custom options.

- Issue #16564: Fixed regression relative to Python2 in the operation of
  email.encoders.encode_noop when used with binary data.

- Issue #10355: The mode, name, encoding and newlines properties now work on
  SpooledTemporaryFile objects even when they have not yet rolled over.
  Obsolete method xreadline (which has never worked in Python 3) has been
  removed.

- Issue #16686: Fixed a lot of bugs in audioop module.  Fixed crashes in
  avgpp(), maxpp() and ratecv().  Fixed an integer overflow in add(), bias(),
  and ratecv().  reverse(), lin2lin() and ratecv() no more lose precision for
  32-bit samples.  max() and rms() no more returns a negative result and
  various other functions now work correctly with 32-bit sample -0x80000000.

- Issue #17073: Fix some integer overflows in sqlite3 module.

- Issue #16723: httplib.HTTPResponse no longer marked closed when the connection
  is automatically closed.

- Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by
  Brian Thorne.

- Issue #16948: Fix quoted printable body encoding for non-latin1 character
  sets in the email package.

- Issue #16811: Fix folding of headers with no value in the provisional email
  policies.

- Issue #17132: Update symbol for "yield from" grammar changes.

- Issue #17076: Make copying of xattrs more tolerant of missing FS support.
  Patch by Thomas Wouters.

- Issue #17089: Expat parser now correctly works with string input when the
  internal XML encoding is not UTF-8 or US-ASCII.  It also now accepts bytes
  and strings larger than 2 GiB.

- Issue #6083: Fix multiple segmentation faults occurred when PyArg_ParseTuple
  parses nested mutating sequence.

- Issue #5289: Fix ctypes.util.find_library on Solaris.

- Issue #17106: Fix a segmentation fault in io.TextIOWrapper when an underlying
  stream or a decoder produces data of an unexpected type (i.e. when
  io.TextIOWrapper initialized with text stream or use bytes-to-bytes codec).

- Issue #17015: When it has a spec, a Mock object now inspects its signature
  when matching calls, so that arguments can be matched positionally or
  by name.

- Issue #15633: httplib.HTTPResponse is now mark closed when the server
  sends less than the advertised Content-Length.

- Issue #12268: The io module file object write methods no longer abort early
  when one of its write system calls is interrupted (EINTR).

- Issue #6972: The zipfile module no longer overwrites files outside of
  its destination path when extracting malicious zip files.

- Issue #4844: ZipFile now raises BadZipFile when opens a ZIP file with an
  incomplete "End of Central Directory" record.  Original patch by Guilherme
  Polo and Alan McIntyre.

- Issue #17071: Signature.bind() now works when one of the keyword arguments
  is named ``self``.

- Issue #12004: Fix an internal error in PyZipFile when writing an invalid
  Python file.  Patch by Ben Morgan.

- Have py_compile use importlib as much as possible to avoid code duplication.
  Code now raises FileExistsError if the file path to be used for the
  byte-compiled file is a symlink or non-regular file as a warning that import
  will not keep the file path type if it writes to that path.

- Issue #16972: Have site.addpackage() consider already known paths even when
  none are explicitly passed in. Bug report and fix by Kirill.

- Issue #1602133: on Mac OS X a shared library build (``--enable-shared``)
  now fills the ``os.environ`` variable correctly.

- Issue #15505: `unittest.installHandler` no longer assumes SIGINT handler is
  set to a callable object.

- Issue #13454: Fix a crash when deleting an iterator created by itertools.tee()
  if all other iterators were very advanced before.

- Issue #12411: Fix to cgi.parse_multipart to correctly use bytes boundaries
  and bytes data. Patch by Jonas Wagner.

- Issue #16957: shutil.which() no longer searches a bare file name in the
  current directory on Unix and no longer searches a relative file path with
  a directory part in PATH directories.  Patch by Thomas Kluyver.

- Issue #1159051: GzipFile now raises EOFError when reading a corrupted file
  with truncated header or footer.

- Issue #16993: shutil.which() now preserves the case of the path and extension
  on Windows.

- Issue #16992: On Windows in signal.set_wakeup_fd, validate the file
  descriptor argument.

- Issue #16422: For compatibility with the Python version, the C version of
  decimal now uses strings instead of integers for rounding mode constants.

- Issue #15861: tkinter now correctly works with lists and tuples containing
  strings with whitespaces, backslashes or unbalanced braces.

- Issue #9720: zipfile now writes correct local headers for files larger than
  4 GiB.

- Issue #16955: Fix the poll() method for multiprocessing's socket
  connections on Windows.

- SSLContext.load_dh_params() now properly closes the input file.

- Issue #15031: Refactor some .pyc management code to cut down on code
  duplication. Thanks to Ronan Lamy for the report and taking an initial stab
  at the problem.

- Issue #16398: Optimize deque.rotate() so that it only moves pointers
  and doesn't touch the underlying data with increfs and decrefs.

- Issue #16900: Issue a ResourceWarning when an ssl socket is left unclosed.

- Issue #13899: ``\A``, ``\Z``, and ``\B`` now correctly match the A, Z,
  and B literals when used inside character classes (e.g. ``'[\A]'``).
  Patch by Matthew Barnett.

- Issue #15545: Fix regression in sqlite3's iterdump method where it was
  failing if the connection used a row factory (such as sqlite3.Row) that
  produced unsortable objects. (Regression was introduced by fix for 9750).

- fcntl: add F_DUPFD_CLOEXEC constant, available on Linux 2.6.24+.

- Issue #15972: Fix error messages when os functions expecting a file name or
  file descriptor receive the incorrect type.

- Issue #8109: The ssl module now has support for server-side SNI, thanks
  to a :meth:`SSLContext.set_servername_callback` method.  Patch by Daniel
  Black.

- Issue #16860: In tempfile, use O_CLOEXEC when available to set the
  close-on-exec flag atomically.

- Issue #16674: random.getrandbits() is now 20-40% faster for small integers.

- Issue #16009: JSON error messages now provide more information.

- Issue #16828: Fix error incorrectly raised by bz2.compress(b'') and
  bz2.BZ2Compressor.compress(b''). Initial patch by Martin Packman.

- Issue #16833: In http.client.HTTPConnection, do not concatenate the request
  headers and body when the payload exceeds 16 KB, since it can consume more
  memory for no benefit.  Patch by Benno Leslie.

- Issue #16541: tk_setPalette() now works with keyword arguments.

- Issue #16820: In configparser, `parser.popitem()` no longer raises ValueError.
  This makes `parser.clean()` work correctly.

- Issue #16820: In configparser, ``parser['section'] = {}`` now preserves
  section order within the parser. This makes `parser.update()` preserve section
  order as well.

- Issue #16820: In configparser, ``parser['DEFAULT'] = {}`` now correctly
  clears previous values stored in the default section. Same goes for
  ``parser.update({'DEFAULT': {}})``.

- Issue #9586: Redefine SEM_FAILED on MacOSX to keep compiler happy.

- Issue #16787: Increase asyncore and asynchat default output buffers size, to
  decrease CPU usage and increase throughput.

- Issue #10527: make multiprocessing use poll() instead of select() if available.

- Issue #16688: Now regexes contained backreferences correctly work with
  non-ASCII strings.  Patch by Matthew Barnett.

- Issue #16486: Make aifc files act as context managers.

- Issue #16485: Now file descriptors are closed if file header patching failed
  on closing an aifc file.

- Issue #16640: Run less code under a lock in sched module.

- Issue #16165: sched.scheduler.run() no longer blocks a scheduler for other
  threads.

- Issue #16641: Default values of sched.scheduler.enter() are no longer
  modifiable.

- Issue #16618: Make glob.glob match consistently across strings and bytes
  regarding leading dots.  Patch by Serhiy Storchaka.

- Issue #16788: Add samestat to Lib/ntpath.py

- Issue #16713: Parsing of 'tel' urls using urlparse separates params from
  path.

- Issue #16443: Add docstrings to regular expression match objects.
  Patch by Anton Kasyanov.

- Issue #15701: Fix HTTPError info method call to return the headers information.

- Issue #16752: Add a missing import to modulefinder. Patch by Berker Peksag.

- Issue #16646: ftplib.FTP.makeport() might lose socket error details.
  (patch by Serhiy Storchaka)

- Issue #16626: Fix infinite recursion in glob.glob() on Windows when the
  pattern contains a wildcard in the drive or UNC path.  Patch by Serhiy
  Storchaka.

- Issue #15783: Except for the number methods, the C version of decimal now
  supports all None default values present in decimal.py. These values were
  largely undocumented.

- Issue #11175: argparse.FileType now accepts encoding and errors
  arguments. Patch by Lucas Maystre.

- Issue #16488: epoll() objects now support the `with` statement.  Patch
  by Serhiy Storchaka.

- Issue #16298: In HTTPResponse.read(), close the socket when there is no
  Content-Length and the incoming stream is finished.  Patch by Eran
  Rundstein.

- Issue #16049: Add abc.ABC class to enable the use of inheritance to create
  ABCs, rather than the more cumbersome metaclass=ABCMeta. Patch by Bruno
  Dupuis.

- Expose the TCP_FASTOPEN and MSG_FASTOPEN flags in socket when they're
  available.

- Issue #15701: Add a .headers attribute to urllib.error.HTTPError. Patch
  contributed by Berker Peksag.

- Issue #15872: Fix 3.3 regression introduced by the new fd-based shutil.rmtree
  that caused it to not ignore certain errors when ignore_errors was set.
  Patch by Alessandro Moura and Serhiy Storchaka.

- Issue #16248: Disable code execution from the user's home directory by
  tkinter when the -E flag is passed to Python.  Patch by Zachary Ware.

- Issue #13390: New function :func:`sys.getallocatedblocks` returns the
  number of memory blocks currently allocated.

- Issue #16628: Fix a memory leak in ctypes.resize().

- Issue #13614: Fix setup.py register failure with invalid rst in description.
  Patch by Julien Courteau and Pierre Paul Lefebvre.

- Issue #13512: Create ~/.pypirc securely (CVE-2011-4944).  Initial patch by
  Philip Jenvey, tested by Mageia and Debian.

- Issue #7719: Make distutils ignore ``.nfs*`` files instead of choking later
  on.  Initial patch by SilentGhost and Jeff Ramnani.

- Issue #13120: Allow to call pdb.set_trace() from thread.
  Patch by Ilya Sandler.

- Issue #16585: Make CJK encoders support error handlers that return bytes per
  PEP 383.

- Issue #10182: The re module doesn't truncate indices to 32 bits anymore.
  Patch by Serhiy Storchaka.

- Issue #16333: use (",", ": ") as default separator in json when indent is
  specified, to avoid trailing whitespace.  Patch by Serhiy Storchaka.

- Issue #16573: In 2to3, treat enumerate() like a consuming call, so superfluous
  list() calls aren't added to filter(), map(), and zip() which are directly
  passed enumerate().

- Issue #16464: Reset the Content-Length header when a urllib Request is reused
  with new data.

- Issue #12848: The pure Python pickle implementation now treats object
  lengths as unsigned 32-bit integers, like the C implementation does.
  Patch by Serhiy Storchaka.

- Issue #16423: urllib.request now has support for ``data:`` URLs.  Patch by
  Mathias Panzenböck.

- Issue #4473: Add a POP3.stls() to switch a clear-text POP3 session into
  an encrypted POP3 session, on supported servers.  Patch by Lorenzo Catucci.

- Issue #4473: Add a POP3.capa() method to query the capabilities advertised
  by the POP3 server.  Patch by Lorenzo Catucci.

- Issue #4473: Ensure the socket is shutdown cleanly in POP3.close().
  Patch by Lorenzo Catucci.

- Issue #16522: added FAIL_FAST flag to doctest.

- Issue #15627: Add the importlib.abc.InspectLoader.source_to_code() method.

- Issue #16408: Fix file descriptors not being closed in error conditions
  in the zipfile module.  Patch by Serhiy Storchaka.

- Issue #14631: Add a new :class:`weakref.WeakMethod` to simulate weak
  references to bound methods.

- Issue #16469: Fix exceptions from float -> Fraction and Decimal -> Fraction
  conversions for special values to be consistent with those for float -> int
  and Decimal -> int.  Patch by Alexey Kachayev.

- Issue #16481: multiprocessing no longer leaks process handles on Windows.

- Issue #12428: Add a pure Python implementation of functools.partial().
  Patch by Brian Thorne.

- Issue #16140: The subprocess module no longer double closes its child
  subprocess.PIPE parent file descriptors on child error prior to exec().

- Remove a bare print to stdout from the subprocess module that could have
  happened if the child process wrote garbage to its pre-exec error pipe.

- The subprocess module now raises its own SubprocessError instead of a
  RuntimeError in various error situations which should not normally happen.

- Issue #16327: The subprocess module no longer leaks file descriptors
  used for stdin/stdout/stderr pipes to the child when fork() fails.

- Issue #14396: Handle the odd rare case of waitpid returning 0 when not
  expected in subprocess.Popen.wait().

- Issue #16411: Fix a bug where zlib.decompressobj().flush() might try to access
  previously-freed memory. Patch by Serhiy Storchaka.

- Issue #16357: fix calling accept() on a SSLSocket created through
  SSLContext.wrap_socket().  Original patch by Jeff McNeil.

- Issue #16409: The reporthook callback made by the legacy
  urllib.request.urlretrieve API now properly supplies a constant non-zero
  block_size as it did in Python 3.2 and 2.7.  This matches the behavior of
  urllib.request.URLopener.retrieve.

- Issue #16431: Use the type information when constructing a Decimal subtype
  from a Decimal argument.

- Issue #15641: Clean up deprecated classes from importlib.
  Patch by Taras Lyapun.

- Issue #16350: zlib.decompressobj().decompress() now accumulates data from
  successive calls after EOF in unused_data, instead of only saving the argument
  to the last call. decompressobj().flush() now correctly sets unused_data and
  unconsumed_tail. A bug in the handling of MemoryError when setting the
  unconsumed_tail attribute has also been fixed. Patch by Serhiy Storchaka.

- Issue #12759: sre_parse now raises a proper error when the name of the group
  is missing.  Initial patch by Serhiy Storchaka.

- Issue #16152: fix tokenize to ignore whitespace at the end of the code when
  no newline is found.  Patch by Ned Batchelder.

- Issue #16284: Prevent keeping unnecessary references to worker functions
  in concurrent.futures ThreadPoolExecutor.

- Issue #16230: Fix a crash in select.select() when one the lists changes
  size while iterated on.  Patch by Serhiy Storchaka.

- Issue #16228: Fix a crash in the json module where a list changes size
  while it is being encoded.  Patch by Serhiy Storchaka.

- Issue #16351: New function gc.get_stats() returns per-generation collection
  statistics.

- Issue #14897: Enhance error messages of struct.pack and
  struct.pack_into. Patch by Matti Mäki.

- Issue #16316: mimetypes now recognizes the .xz and .txz (.tar.xz) extensions.
  Patch by Serhiy Storchaka.

- Issue #12890: cgitb no longer prints spurious <p> tags in text
  mode when the logdir option is specified.

- Issue #16307: Fix multiprocessing.Pool.map_async not calling its callbacks.
  Patch by Janne Karila.

- Issue #16305: Fix a segmentation fault occurring when interrupting
  math.factorial.

- Issue #16116: Fix include and library paths to be correct when building C
  extensions in venvs.

- Issue #16245: Fix the value of a few entities in html.entities.html5.

- Issue #16301: Fix the localhost verification in urllib/request.py for file://
  urls.

- Issue #16250: Fix the invocations of URLError which had misplaced filename
  attribute for exception.

- Issue #10836: Fix exception raised when file not found in urlretrieve
  Initial patch by Ezio Melotti.

- Issue #14398: Fix size truncation and overflow bugs in the bz2 module.

- Issue #12692: Fix resource leak in urllib.request when talking to an HTTP
  server that does not include a ``Connection: close`` header in its responses.

- Issue #12034: Fix bogus caching of result in check_GetFinalPathNameByHandle.
  Patch by Atsuo Ishimoto.

- Improve performance of `lzma.LZMAFile` (see also issue #16034).

- Issue #16220: wsgiref now always calls close() on an iterable response.
  Patch by Brent Tubbs.

- Issue #16270: urllib may hang when used for retrieving files via FTP by using
  a context manager.  Patch by Giampaolo Rodola'.

- Issue #16461: Wave library should be able to deal with 4GB wav files,
  and sample rate of 44100 Hz.

- Issue #16176: Properly identify Windows 8 via platform.platform()

- Issue #16088: BaseHTTPRequestHandler's send_error method includes a
  Content-Length header in it's response now. Patch by Antoine Pitrou.

- Issue #16114: The subprocess module no longer provides a misleading error
  message stating that args[0] did not exist when either the cwd or executable
  keyword arguments specified a path that did not exist.

- Issue #16169: Fix ctypes.WinError()'s confusion between errno and winerror.

- Issue #16110: logging.fileConfig now accepts a pre-initialised ConfigParser
  instance.

- Issue #1492704: shutil.copyfile() raises a distinct SameFileError now if
  source and destination are the same file. Patch by Atsuo Ishimoto.

- Issue #13896: Make shelf instances work with 'with' as context managers.
  Original patch by Filip Gruszczyński.

- Issue #15417: Add support for csh and fish in venv activation scripts.

- Issue #14377: ElementTree.write and some of the module-level functions have
  a new parameter - *short_empty_elements*. It controls how elements with no
  contents are emitted.

- Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element
  element_factory (fixes a regression in SimpleTAL).

- Issue #9650: List commonly used format codes in time.strftime and
  time.strptime docsttings.  Original patch by Mike Hoy.

- Issue #15452: logging configuration socket listener now has a verify option
  that allows an application to apply a verification function to the
  received configuration data before it is acted upon.

- Issue #16034: Fix performance regressions in the new `bz2.BZ2File`
  implementation.  Initial patch by Serhiy Storchaka.

- `pty.spawn()` now returns the child process status returned by `os.waitpid()`.

- Issue #15756: `subprocess.poll()` now properly handles `errno.ECHILD` to
  return a returncode of 0 when the child has already exited or cannot be waited
  on.

- Issue #15323: Improve failure message of `Mock.assert_called_once_with()`.

- Issue #16064: ``unittest -m`` claims executable is "python", not "python3".

- Issue #12376: Pass on parameters in `TextTestResult.__init__()` super call.

- Issue #15222: Insert blank line after each message in mbox mailboxes.

- Issue #16013: Fix `csv.Reader` parsing issue with ending quote characters.
  Patch by Serhiy Storchaka.

- Issue #15421: Fix an OverflowError in `Calendar.itermonthdates()` after
  `datetime.MAXYEAR`.  Patch by Cédric Krier.

- Issue #16112: platform.architecture does not correctly escape argument to
  /usr/bin/file.  Patch by David Benjamin.

- Issue #15970: `xml.etree.ElementTree` now serializes correctly the empty HTML
  elements 'meta' and 'param'.

- Issue #15842: The `SocketIO.{readable,writable,seekable}` methods now raise
  ValueError when the file-like object is closed.  Patch by Alessandro Moura.

- Issue #15876: Fix a refleak in the `curses` module: window.encoding.

- Issue #15881: Fix `atexit` hook in `multiprocessing`.  Original patch by Chris
  McDonough.

- Issue #15841: The readable(), writable() and seekable() methods of
  `io.BytesIO` and `io.StringIO` objects now raise ValueError when the object
  has been closed.  Patch by Alessandro Moura.

- Issue #15447: Use `subprocess.DEVNULL` in webbrowser, instead of opening
  `os.devnull` explicitly and leaving it open.

- Issue #15509: `webbrowser.UnixBrowser` no longer passes empty arguments to
  Popen when ``%action`` substitutions produce empty strings.

- Issue #12776, issue #11839: Call `argparse` type function (specified by
  add_argument) only once. Before, the type function was called twice in the
  case where the default was specified and the argument was given as well.  This
  was especially problematic for the FileType type, as a default file would
  always be opened, even if a file argument was specified on the command line.

- Issue #15906: Fix a regression in argparse caused by the preceding change,
  when ``action='append'``, ``type='str'`` and ``default=[]``.

- Issue #16113: Added sha3 module based on the Keccak reference implementation
  3.2. The `hashlib` module has four additional hash algorithms: `sha3_224`,
  `sha3_256`, `sha3_384` and `sha3_512`. As part of the patch some common
  code was moved from _hashopenssl.c to hashlib.h.

- ctypes.call_commethod was removed, since its only usage was in the defunct
  samples directory.

- Issue #16692: Added TLSv1.1 and TLSv1.2 support for the ssl modules.

- Issue #16832: add abc.get_cache_token() to expose cache validity checking
  support in ABCMeta.

IDLE
----

- Issue #18429: Format / Format Paragraph, now works when comment blocks
  are selected. As with text blocks, this works best when the selection
  only includes complete lines.

- Issue #18226: Add docstrings and unittests for FormatParagraph.py.
  Original patches by Todd Rovito and Phil Webster.

- Issue #18279: Format - Strip trailing whitespace no longer marks a file as
  changed when it has not been changed. This fix followed the addition of a
  test file originally written by Phil Webster (the issue's main goal).

- Issue #7136: In the Idle File menu, "New Window" is renamed "New File".
  Patch by Tal Einat, Roget Serwy, and Todd Rovito.

- Remove dead imports of imp.

- Issue #18196: Avoid displaying spurious SystemExit tracebacks.

- Issue #5492: Avoid traceback when exiting IDLE caused by a race condition.

- Issue #17511: Keep IDLE find dialog open after clicking "Find Next".
  Original patch by Sarah K.

- Issue #18055: Move IDLE off of imp and on to importlib.

- Issue #15392: Create a unittest framework for IDLE.
  Initial patch by Rajagopalasarma Jayakrishnan.
  See Lib/idlelib/idle_test/README.txt for how to run Idle tests.

- Issue #14146: Highlight source line while debugging on Windows.

- Issue #17838: Allow sys.stdin to be reassigned.

- Issue #13495: Avoid loading the color delegator twice in IDLE.

- Issue #17798: Allow IDLE to edit new files when specified on command line.

- Issue #14735: Update IDLE docs to omit "Control-z on Windows".

- Issue #17532: Always include Options menu for IDLE on OS X.
  Patch by Guilherme Simões.

- Issue #17585: Fixed IDLE regression. Now closes when using exit() or quit().

- Issue #17657: Show full Tk version in IDLE's about dialog.
  Patch by Todd Rovito.

- Issue #17613: Prevent traceback when removing syntax colorizer in IDLE.

- Issue #1207589: Backwards-compatibility patch for right-click menu in IDLE.

- Issue #16887: IDLE now accepts Cancel in tabify/untabify dialog box.

- Issue #17625: In IDLE, close the replace dialog after it is used.

- Issue #14254: IDLE now handles readline correctly across shell restarts.

- Issue #17614: IDLE no longer raises exception when quickly closing a file.

- Issue #6698: IDLE now opens just an editor window when configured to do so.

- Issue #8900: Using keyboard shortcuts in IDLE to open a file no longer
  raises an exception.

- Issue #6649: Fixed missing exit status in IDLE. Patch by Guilherme Polo.

- Issue #17114: IDLE now uses non-strict config parser.

- Issue #9290: In IDLE the sys.std* streams now implement io.TextIOBase
  interface and support all mandatory methods and properties.

- Issue #5066: Update IDLE docs. Patch by Todd Rovito.

- Issue #16829: IDLE printing no longer fails if there are spaces or other
  special characters in the file path.

- Issue #16491: IDLE now prints chained exception tracebacks.

- Issue #16819: IDLE method completion now correctly works for bytes literals.

- Issue #16504: IDLE now catches SyntaxErrors raised by tokenizer. Patch by
  Roger Serwy.

- Issue #16511: Use default IDLE width and height if config param is not valid.
  Patch Serhiy Storchaka.

- Issue #1207589: Add Cut/Copy/Paste items to IDLE right click Context Menu.
  Patch by Todd Rovito.

- Issue #16123: IDLE - deprecate running without a subprocess.
  Patch by Roger Serwy.

Tests
-----

- Issue #1666318: Add a test that shutil.copytree() retains directory
  permissions.  Patch by Catherine Devlin.

- Issue #18273: move the tests in Lib/test/json_tests to Lib/test/test_json
  and make them discoverable by unittest.  Patch by Zachary Ware.

- Fix a fcntl test case on KFreeBSD, Debian #708653 (Petr Salinger).

- Issue #18396: Fix spurious test failure in test_signal on Windows when
  faulthandler is enabled (Patch by Jeremy Kloth)

- Issue #17046: Fix broken test_executable_without_cwd in test_subprocess.

- Issue #15415: Add new temp_dir() and change_cwd() context managers to
  test.support, and refactor temp_cwd() to use them.  Patch by Chris Jerdonek.

- Issue #15494: test.support is now a package rather than a module (Initial
  patch by Indra Talip)

- Issue #17944: test_zipfile now discoverable and uses subclassing to
  generate tests for different compression types.  Fixed a bug with skipping
  some tests due to use of exhausted iterators.

- Issue #18266: test_largefile now works with unittest test discovery and
  supports running only selected tests.  Patch by Zachary Ware.

- Issue #17767: test_locale now works with unittest test discovery.
  Original patch by Zachary Ware.

- Issue #18375: Assume --randomize when --randseed is used for running the
  testsuite.

- Issue #11185: Fix test_wait4 under AIX.  Patch by Sébastien Sablé.

- Issue #18207: Fix test_ssl for some versions of OpenSSL that ignore seconds
  in ASN1_TIME fields.

- Issue #18094: test_uuid no longer reports skipped tests as passed.

- Issue #17992: Add timeouts to asyncore and asynchat tests so that they won't
  accidentally hang.

- Issue #17833: Fix test_gdb failures seen on machines where debug symbols
  for glibc are available (seen on PPC64 Linux).

- Issue #7855: Add tests for ctypes/winreg for issues found in IronPython.
  Initial patch by Dino Viehland.

- Issue #11078: test___all__ now checks for duplicates in __all__.
  Initial patch by R. David Murray.

- Issue #17712: Fix test_gdb failures on Ubuntu 13.04.

- Issue #17835: Fix test_io when the default OS pipe buffer size is larger
  than one million bytes.

- Issue #17065: Use process-unique key for winreg tests to avoid failures if
  test is run multiple times in parallel (eg: on a buildbot host).

- Issue #12820: add tests for the xml.dom.minicompat module.
  Patch by John Chandler and Phil Connell.

- Issue #17691: test_univnewlines now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17790: test_set now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17789: test_random now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17779: test_osx_env now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17766: test_iterlen now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17690: test_time now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17692: test_sqlite now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #11995: test_pydoc doesn't import all sys.path modules anymore.

- Issue #17448: test_sax now skips if there are no xml parsers available
  instead of raising an ImportError.

- Issue #11420: make test suite pass with -B/DONTWRITEBYTECODE set.
  Initial patch by Thomas Wouters.

- Issue #10652: make tcl/tk tests run after __all__ test, patch by
  Zachary Ware.

- Issue #11963: remove human verification from test_parser and test_subprocess.

- Issue #11732: add a new suppress_crash_popup() context manager to test.support
  that disables crash popups on Windows and use it in test_faulthandler and
  test_capi.

- Issue #13898: test_ssl no longer prints a spurious stack trace on Ubuntu.

- Issue #17283: Share code between `__main__.py` and `regrtest.py` in
  `Lib/test`.

- Issue #17249: convert a test in test_capi to use unittest and reap threads.

- Issue #17107: Test client-side SNI support in urllib.request thanks to
  the new server-side SNI support in the ssl module.  Initial patch by
  Daniel Black.

- Issue #17041: Fix testing when Python is configured with the
  --without-doc-strings.

- Issue #16923: Fix ResourceWarnings in test_ssl.

- Issue #15539: Added regression tests for Tools/scripts/pindent.py.

- Issue #17479: test_io now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17066: test_robotparser now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17334: test_index now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17333: test_imaplib now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17082: test_dbm* now work with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17079: test_ctypes now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17304: test_hash now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17303: test_future* now work with unittest test discovery.
  Patch by Zachary Ware.

- Issue #17163: test_file now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #16925: test_configparser now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #16918: test_codecs now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #16919: test_crypt now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #16910: test_bytes, test_unicode, and test_userstring now work with
  unittest test discovery.  Patch by Zachary Ware.

- Issue #16905: test_warnings now works with unittest test discovery.
  Initial patch by Berker Peksag.

- Issue #16898: test_bufio now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #16888: test_array now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #16896: test_asyncore now works with unittest test discovery.
  Patch by Zachary Ware.

- Issue #16897: test_bisect now works with unittest test discovery.
  Initial patch by Zachary Ware.

- Issue #16852: test_genericpath, test_posixpath, test_ntpath, and test_macpath
  now work with unittest test discovery.  Patch by Zachary Ware.

- Issue #16748: test_heapq now works with unittest test discovery.

- Issue #10646: Tests rearranged for os.samefile/samestat to check for not
  just symlinks but also hard links.

- Issue #15302: Switch regrtest from using getopt to using argparse.

- Issue #15324: Fix regrtest parsing of --fromfile, --match, and --randomize
  options.

- Issue #16702: test_urllib2_localnet tests now correctly ignores proxies for
  localhost tests.

- Issue #16664: Add regression tests for glob's behaviour concerning entries
  starting with a ".".  Patch by Sebastian Kreft.

- Issue #13390: The ``-R`` option to regrtest now also checks for memory
  allocation leaks, using :func:`sys.getallocatedblocks`.

- Issue #16559: Add more tests for the json module, including some from the
  official test suite at json.org.  Patch by Serhiy Storchaka.

- Issue #16661: Fix the `os.getgrouplist()` test by not assuming that it gives
  the same output as :command:`id -G`.

- Issue #16115: Add some tests for the executable argument to
  subprocess.Popen().  Initial patch by Kushal Das.

- Issue #16126: PyErr_Format format mismatch in _testcapimodule.c.
  Patch by Serhiy Storchaka.

- Issue #15304: Fix warning message when `os.chdir()` fails inside
  `test.support.temp_cwd()`.  Patch by Chris Jerdonek.

- Issue #15802: Fix test logic in `TestMaildir.test_create_tmp()`. Patch by
  Serhiy Storchaka.

- Issue #15557: Added a test suite for the webbrowser module, thanks to Anton
  Barkovsky.

- Issue #16698: Skip posix test_getgroups when built with OS X
  deployment target prior to 10.6.

Build
-----

- Issue #16067: Add description into MSI file to replace installer's
  temporary name.

- Issue #18257: Fix readlink usage in python-config.  Install the python
  version again on Darwin.

- Issue #18481: Add C coverage reporting with gcov and lcov. A new make target
  "coverage-report" creates an instrumented Python build, runs unit tests
  and creates a HTML. The report can be updated with "make coverage-lcov".

- Issue #17845: Clarified the message printed when some module are not built.

- Issue #18256: Compilation fix for recent AIX releases.  Patch by
  David Edelsohn.

- Issue #17547: In configure, explicitly pass -Wformat for the benefit for GCC
  4.8.

- Issue #15172: Document NASM 2.10+ as requirement for building OpenSSL 1.0.1
  on Windows.

- Issue #17591: Use lowercase filenames when including Windows header files.
  Patch by Roumen Petrov.

- Issue #17550: Fix the --enable-profiling configure switch.

- Issue #17425: Build with openssl 1.0.1d on Windows.

- Issue #16754: Fix the incorrect shared library extension on linux. Introduce
  two makefile macros SHLIB_SUFFIX and EXT_SUFFIX. SO now has the value of
  SHLIB_SUFFIX again (as in 2.x and 3.1). The SO macro is removed in 3.4.

- Issue #5033: Fix building of the sqlite3 extension module when the
  SQLite library version has "beta" in it. Patch by Andreas Pelme.

- Issue #17228: Fix building without pymalloc.

- Issue #3718: Use AC_ARG_VAR to set MACHDEP in configure.ac.

- Issue #16235: Implement python-config as a shell script.

- Issue #16769: Remove outdated Visual Studio projects.

- Issue #17031: Fix running regen in cross builds.

- Issue #3754: fix typo in pthread AC_CACHE_VAL.

- Issue #15484: Fix _PYTHON_PROJECT_BASE for srcdir != builddir builds;
  use _PYTHON_PROJECT_BASE in distutils/sysconfig.py.

- Drop support for Windows 2000 (changeset e52df05b496a).

- Issue #17029: Let h2py search the multiarch system include directory.

- Issue #16953: Fix socket module compilation on platforms with
  HAVE_BROKEN_POLL. Patch by Jeffrey Armstrong.

- Issue #16320: Remove redundant Makefile dependencies for strings and bytes.

- Cross compiling needs host and build settings. configure no longer
  creates a broken PYTHON_FOR_BUILD variable when --build is missing.

- Fix cross compiling issue in setup.py, ensure that lib_dirs and inc_dirs are
  defined in cross compiling mode, too.

- Issue #16836: Enable IPv6 support even if IPv6 is disabled on the build host.

- Issue #16593: Have BSD 'make -s' do the right thing, thanks to Daniel Shahaf

- Issue #16262: fix out-of-src-tree builds, if mercurial is not installed.

- Issue #15298: ensure _sysconfigdata is generated in build directory, not
  source directory.

- Issue #15833: Fix a regression in 3.3 that resulted in exceptions being
  raised if importlib failed to write byte-compiled files.  This affected
  attempts to build Python out-of-tree from a read-only source directory.

- Issue #15923: Fix a mistake in ``asdl_c.py`` that resulted in a TypeError
  after 2801bf875a24 (see #15801).

- Issue #16135: Remove OS/2 support.

- Issue #15819: Make sure we can build Python out-of-tree from a read-only
  source directory.  (Somewhat related to issue #9860.)

- Issue #15587: Enable Tk high-resolution text rendering on Macs with
  Retina displays.  Applies to Tkinter apps, such as IDLE, on OS X
  framework builds linked with Cocoa Tk 8.5.

- Issue #17161: make install now also installs a python3 man page.

C-API
-----

- Issue #18351: Fix various issues in a function in importlib provided to help
  PyImport_ExecCodeModuleWithPathnames() (and thus by extension
  PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx()).

- Issue #9369: The types of `char*` arguments of PyObject_CallFunction() and
  PyObject_CallMethod() now changed to `const char*`.  Based on patches by
  Jörg Müller and Lars Buitinck.

- Issue #17206: Py_CLEAR(), Py_DECREF(), Py_XINCREF() and Py_XDECREF() now
  expand their arguments once instead of multiple times.  Patch written by Illia
  Polosukhin.

- Issue #17522: Add the PyGILState_Check() API.

- Issue #17327: Add PyDict_SetDefault.

- Issue #16881: Fix Py_ARRAY_LENGTH macro for GCC < 3.1.

- Issue #16505: Remove unused Py_TPFLAGS_INT_SUBCLASS.

- Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
  (unsigned long and unsigned int) to avoid an undefined behaviour with
  Py_TPFLAGS_TYPE_SUBCLASS ((1 << 31). PyType_GetFlags() result type is
  now unsigned too (unsigned long, instead of long).

- Issue #16166: Add PY_LITTLE_ENDIAN and PY_BIG_ENDIAN macros and unified
  endianness detection and handling.

Documentation
-------------

- Issue #17701: Improving strftime documentation.

- Issue #18440: Clarify that `hash()` can truncate the value returned from an
  object's custom `__hash__()` method.

- Issue #17844: Add links to encoders and decoders for bytes-to-bytes codecs.

- Issue #14097: improve the "introduction" page of the tutorial.

- Issue #17977: The documentation for the cadefault argument's default value
  in urllib.request.urlopen() is fixed to match the code.

- Issue #6696: add documentation for the Profile objects, and improve
  profile/cProfile docs.  Patch by Tom Pinckney.

- Issue #15940: Specify effect of locale on time functions.

- Issue #17538: Document XML vulnerabilities

- Issue #16642: sched.scheduler timefunc initial default is time.monotonic.
  Patch by Ramchandra Apte

- Issue #17047: remove doubled words in docs and docstrings
  reported by Serhiy Storchaka and Matthew Barnett.

- Issue #15465: Document the versioning macros in the C API docs rather than
  the standard library docs. Patch by Kushal Das.

- Issue #16406: Combine the pages for uploading and registering to PyPI.

- Issue #16403: Document how distutils uses the maintainer field in
  PKG-INFO. Patch by Jyrki Pulliainen.

- Issue #16695: Document how glob handles filenames starting with a
  dot. Initial patch by Jyrki Pulliainen.

- Issue #8890: Stop advertising an insecure practice by replacing uses
  of the /tmp directory with better alternatives in the documentation.
  Patch by Geoff Wilson.

- Issue #17203: add long option names to unittest discovery docs.

- Issue #13094: add "Why do lambdas defined in a loop with different values
  all return the same result?" programming FAQ.

- Issue #14901: Update portions of the Windows FAQ.
  Patch by Ashish Nitin Patil.

- Issue #16267: Better document the 3.3+ approach to combining
  @abstractmethod with @staticmethod, @classmethod and @property

- Issue #15209: Clarify exception chaining description in exceptions module
  documentation

- Issue #15990: Improve argument/parameter documentation.

- Issue #16209: Move the documentation for the str built-in function to a new
  str class entry in the "Text Sequence Type" section.

- Issue #13538: Improve str() and object.__str__() documentation.

- Issue #16489: Make it clearer that importlib.find_loader() needs parent
  packages to be explicitly imported.

- Issue #16400: Update the description of which versions of a given package
  PyPI displays.

- Issue #15677: Document that zlib and gzip accept a compression level of 0 to
  mean 'no compression'. Patch by Brian Brazil.

- Issue #16197: Update winreg docstrings and documentation to match code.
  Patch by Zachary Ware.

- Issue #8040: added a version switcher to the documentation.  Patch by
  Yury Selivanov.

- Issue #16241: Document -X faulthandler command line option.
  Patch by Marek Šuppa.

- Additional comments and some style changes in the concurrent.futures URL
  retrieval example

- Issue #16115: Improve subprocess.Popen() documentation around args, shell,
  and executable arguments.

- Issue #13498: Clarify docs of os.makedirs()'s exist_ok argument.  Done with
  great native-speaker help from R. David Murray.

- Issue #15533: Clarify docs and add tests for `subprocess.Popen()`'s cwd
  argument.

- Issue #15979: Improve timeit documentation.

- Issue #16036: Improve documentation of built-in `int()`'s signature and
  arguments.

- Issue #15935: Clarification of `argparse` docs, re: add_argument() type and
  default arguments.  Patch contributed by Chris Jerdonek.

- Issue #11964: Document a change in v3.2 to the behavior of the indent
  parameter of json encoding operations.

- Issue #15116: Remove references to appscript as it is no longer being
  supported.

Tools/Demos
-----------

- Issue #18817: Fix a resource warning in Lib/aifc.py demo.  Patch by
  Vajrasky Kok.

- Issue #18439: Make patchcheck work on Windows for ACKS, NEWS.

- Issue #18448: Fix a typo in Tools/demo/eiffel.py.

- Issue #18457: Fixed saving of formulas and complex numbers in
  Tools/demo/ss1.py.

- Issue #18449: Make Tools/demo/ss1.py work again on Python 3.  Patch by
  Févry Thibault.

- Issue #12990: The "Python Launcher" on OSX could not launch python scripts
  that have paths that include wide characters.

- Issue #15239: Make mkstringprep.py work again on Python 3.

- Issue #17028: Allowed Python arguments to be supplied to the Windows
  launcher.

- Issue #17156: pygettext.py now detects the encoding of source files and
  correctly writes and escapes non-ascii characters.

- Issue #15539: Fix a number of bugs in Tools/scripts/pindent.py.  Now
  pindent.py works with a "with" statement.  pindent.py no longer produces
  improper indentation.  pindent.py now works with continued lines broken after
  "class" or "def" keywords and with continuations at the start of line.

- Issue #11797: Add a 2to3 fixer that maps reload() to imp.reload().

- Issue #10966: Remove the concept of unexpected skipped tests.

- Issue #9893: Removed the Misc/Vim directory.

- Removed the Misc/TextMate directory.

- Issue #16245: Add the Tools/scripts/parse_html5_entities.py script to parse
  the list of HTML5 entities and update the html.entities.html5 dictionary.

- Issue #15378: Fix Tools/unicode/comparecodecs.py.  Patch by Serhiy Storchaka.

- Issue #16549: Make json.tool work again on Python 3 and add tests.
  Initial patch by Berker Peksag and Serhiy Storchaka.

- Issue #13301: use ast.literal_eval() instead of eval() in Tools/i18n/msgfmt.py.
  Patch by Serhiy Storchaka.

Windows
-------

- Issue #18569: The installer now adds .py to the PATHEXT variable when extensions
  are registered. Patch by Paul Moore.


What's New in Python 3.3.0?
===========================

*Release date: 29-Sep-2012*

Core and Builtins
-----------------

- Issue #16046: Fix loading sourceless legacy .pyo files.

- Issue #16060: Fix refcounting bug when `__trunc__()` returns an object whose
  `__int__()` gives a non-integer.  Patch by Serhiy Storchaka.

Extension Modules
-----------------

- Issue #16012: Fix a regression in pyexpat. The parser's `UseForeignDTD()`
  method doesn't require an argument again.


What's New in Python 3.3.0 Release Candidate 3?
===============================================

*Release date: 23-Sep-2012*

Core and Builtins
-----------------

- Issue #15900: Fix reference leak in `PyUnicode_TranslateCharmap()`.

- Issue #15926: Fix crash after multiple reinitializations of the interpreter.

- Issue #15895: Fix FILE pointer leak in one error branch of
  `PyRun_SimpleFileExFlags()` when filename points to a pyc/pyo file, closeit is
  false an and set_main_loader() fails.

- Fixes for a few crash and memory leak regressions found by Coverity.

Library
-------

- Issue #15882: Change `_decimal` to accept any coefficient tuple when
  constructing infinities. This is done for backwards compatibility with
  decimal.py: Infinity coefficients are undefined in _decimal (in accordance
  with the specification).

- Issue #15925: Fix a regression in `email.util` where the `parsedate()` and
  `parsedate_tz()` functions did not return None anymore when the argument could
  not be parsed.

Extension Modules
-----------------

- Issue #15973: Fix a segmentation fault when comparing datetime timezone
  objects.

- Issue #15977: Fix memory leak in Modules/_ssl.c when the function
  _set_npn_protocols() is called multiple times, thanks to Daniel Sommermann.

- Issue #15969: `faulthandler` module: rename dump_tracebacks_later() to
  dump_traceback_later() and cancel_dump_tracebacks_later() to
  cancel_dump_traceback_later().

- _decimal module: use only C 89 style comments.


What's New in Python 3.3.0 Release Candidate 2?
===============================================

*Release date: 09-Sep-2012*

Core and Builtins
-----------------

- Issue #13992: The trashcan mechanism is now thread-safe.  This eliminates
  sporadic crashes in multi-thread programs when several long deallocator chains
  ran concurrently and involved subclasses of built-in container types.

- Issue #15784: Modify `OSError`.__str__() to better distinguish between errno
  error numbers and Windows error numbers.

- Issue #15781: Fix two small race conditions in import's module locking.

Library
-------

- Issue #17158: Add 'symbols' to help() welcome message; clarify
  'modules spam' messages.

- Issue #15847: Fix a regression in argparse, which did not accept tuples as
  argument lists anymore.

- Issue #15828: Restore support for C extensions in `imp.load_module()`.

- Issue #15340: Fix importing the random module when ``/dev/urandom`` cannot be
  opened.  This was a regression caused by the hash randomization patch.

- Issue #10650: Deprecate the watchexp parameter of the `Decimal.quantize()`
  method.

- Issue #15785: Modify `window.get_wch()` API of the curses module: return a
  character for most keys, and an integer for special keys, instead of always
  returning an integer. So it is now possible to distinguish special keys like
  keypad keys.

- Issue #14223: Fix `window.addch()` of the curses module for special characters
  like curses.ACS_HLINE: the Python function addch(int) and addch(bytes) is now
  calling the C function waddch()/mvwaddch() (as it was done in Python 3.2),
  instead of wadd_wch()/mvwadd_wch(). The Python function addch(str) is still
  calling the C function wadd_wch()/mvwadd_wch() if the Python curses is linked
  to libncursesw.

Build
-----

- Issue #15822: Really ensure 2to3 grammar pickles are properly installed
  (replaces fixes for Issue #15645).

Documentation
-------------

- Issue #15814: The memoryview enhancements in 3.3.0 accidentally permitted the
  hashing of multi-dimensional memorviews and memoryviews with multi-byte item
  formats. The intended restrictions have now been documented - they will be
  correctly enforced in 3.3.1.


What's New in Python 3.3.0 Release Candidate 1?
===============================================

*Release date: 25-Aug-2012*

Core and Builtins
-----------------

- Issue #15573: memoryview comparisons are now performed by value with full
  support for any valid struct module format definition.

- Issue #15316: When an item in the fromlist for `__import__()` doesn't exist,
  don't raise an error, but if an exception is raised as part of an import do
  let that propagate.

- Issue #15778: Ensure that ``str(ImportError(msg))`` returns a str even when
  msg isn't a str.

- Issue #2051: Source file permission bits are once again correctly copied to
  the cached bytecode file. (The migration to importlib reintroduced this
  problem because these was no regression test. A test has been added as part of
  this patch)

- Issue #15761: Fix crash when ``PYTHONEXECUTABLE`` is set on Mac OS X.

- Issue #15726: Fix incorrect bounds checking in PyState_FindModule.  Patch by
  Robin Schreiber.

- Issue #15604: Update uses of `PyObject_IsTrue()` to check for and handle
  errors correctly.  Patch by Serhiy Storchaka.

- Issue #14846: `importlib.FileFinder` now handles the case where the directory
  being searched is removed after a previous import attempt.

Library
-------

- Issue #13370: Ensure that ctypes works on Mac OS X when Python is compiled
  using the clang compiler.

- Issue #13072: The array module's 'u' format code is now deprecated and will be
  removed in Python 4.0.

- Issue #15544: Fix Decimal.__float__ to work with payload-carrying NaNs.

- Issue #15776: Allow pyvenv to work in existing directory with --clean.

- Issue #15249: email's BytesGenerator now correctly mangles From lines (when
  requested) even if the body contains undecodable bytes.

- Issue #15777: Fix a refleak in _posixsubprocess.

- Issue #665194: Update `email.utils.localtime` to use datetime.astimezone and
  correctly handle historic changes in UTC offsets.

- Issue #15199: Fix JavaScript's default MIME type to application/javascript.
  Patch by Bohuslav Kabrda.

- Issue #12643: `code.InteractiveConsole` now respects `sys.excepthook` when
  displaying exceptions.  Patch by Aaron Iles.

- Issue #13579: `string.Formatter` now understands the 'a' conversion specifier.

- Issue #15595: Fix ``subprocess.Popen(universal_newlines=True)`` for certain
  locales (utf-16 and utf-32 family). Patch by Chris Jerdonek.

- Issue #15477: In cmath and math modules, add workaround for platforms whose
  system-supplied log1p function doesn't respect signs of zeros.

- Issue #15715: `importlib.__import__()` will silence an ImportError when the
  use of fromlist leads to a failed import.

- Issue #14669: Fix pickling of connections and sockets on Mac OS X by
  sending/receiving an acknowledgment after file descriptor transfer.
  TestPicklingConnection has been re-enabled for Mac OS X.

- Issue #11062: Fix adding a message from file to Babyl mailbox.

- Issue #15646: Prevent equivalent of a fork bomb when using `multiprocessing`
  on Windows without the ``if __name__ == '__main__'`` idiom.

IDLE
----

- Issue #15678: Fix IDLE menus when started from OS X command line (3.3.0b2
  regression).

Documentation
-------------

- Touched up the Python 2 to 3 porting guide.

- Issue #14674: Add a discussion of the `json` module's standard compliance.
  Patch by Chris Rebert.

- Create a 'Concurrent Execution' section in the docs, and split up the
  'Optional Operating System Services' section to use a more user-centric
  classification scheme (splitting them across the new CE section, IPC and text
  processing). Operating system limitations can be reflected with the Sphinx
  ``:platform:`` tag, it doesn't make sense as part of the Table of Contents.

- Issue #4966: Bring the sequence docs up to date for the Py3k transition and
  the many language enhancements since they were original written.

- The "path importer" misnomer has been replaced with Eric Snow's
  more-awkward-but-at-least-not-wrong suggestion of "path based finder" in the
  import system reference docs.

- Issue #15640: Document `importlib.abc.Finder` as deprecated.

- Issue #15630: Add an example for "continue" stmt in the tutorial.  Patch by
  Daniel Ellis.

Tests
-----

- Issue #15747: ZFS always returns EOPNOTSUPP when attempting to set the
  UF_IMMUTABLE flag (via either chflags or lchflags); refactor affected tests in
  test_posix.py to account for this.

- Issue #15285: Refactor the approach for testing connect timeouts using two
  external hosts that have been configured specifically for this type of test.

- Issue #15743: Remove the deprecated method usage in `urllib` tests. Patch by
  Jeff Knupp.

- Issue #15615: Add some tests for the `json` module's handling of invalid input
  data.  Patch by Kushal Das.

Build
-----

- Output lib files for PGO build into PGO directory.

- Pick up 32-bit launcher from PGO directory on 64-bit PGO build.

- Drop ``PC\python_nt.h`` as it's not used.  Add input dependency on custom
  build step.

- Issue #15511: Drop explicit dependency on pythonxy.lib from _decimal amd64
  configuration.

- Add missing PGI/PGO configurations for pywlauncher.

- Issue #15645: Ensure 2to3 grammar pickles are properly installed.


What's New in Python 3.3.0 Beta 2?
==================================

*Release date: 12-Aug-2012*

Core and Builtins
-----------------

- Issue #15568: Fix the return value of ``yield from`` when StopIteration is
  raised by a custom iterator.

- Issue #13119: `sys.stdout` and `sys.stderr` are now using "\r\n" newline on
  Windows, as Python 2.

- Issue #15534: Fix the fast-search function for non-ASCII Unicode strings.

- Issue #15508: Fix the docstring for `__import__()` to have the proper default
  value of 0 for 'level' and to not mention negative levels since they are not
  supported.

- Issue #15425: Eliminated traceback noise from more situations involving
  importlib.

- Issue #14578: Support modules registered in the Windows registry again.

- Issue #15466: Stop using TYPE_INT64 in marshal, to make importlib.h (and other
  byte code files) equal between 32-bit and 64-bit systems.

- Issue #1692335: Move initial exception args assignment to
  `BaseException.__new__()` to help pickling of naive subclasses.

- Issue #12834: Fix `PyBuffer_ToContiguous()` for non-contiguous arrays.

- Issue #15456: Fix code `__sizeof__()` after #12399 change.  Patch by Serhiy
  Storchaka.

- Issue #15404: Refleak in PyMethodObject repr.

- Issue #15394: An issue in `PyModule_Create()` that caused references to be
  leaked on some error paths has been fixed.  Patch by Julia Lawall.

- Issue #15368: An issue that caused bytecode generation to be non-deterministic
  has been fixed.

- Issue #15202: Consistently use the name "follow_symlinks" for new parameters
  in os and shutil functions.

- Issue #15314: ``__main__.__loader__`` is now set correctly during interpreter
  startup.

- Issue #15111: When a module imported using 'from import' has an ImportError
  inside itself, don't mask that fact behind a generic ImportError for the
  module itself.

- Issue #15293: Add GC support to the AST base node type.

- Issue #15291: Fix a memory leak where AST nodes where not properly
  deallocated.

- Issue #15110: Fix the tracebacks generated by "import xxx" to not show the
  importlib stack frames.

- Issue #16369: Global PyTypeObjects not initialized with PyType_Ready(...).

- Issue #15020: The program name used to search for Python's path is now
  "python3" under Unix, not "python".

- Issue #15897: zipimport.c doesn't check return value of fseek().
  Patch by Felipe Cruz.

- Issue #15033: Fix the exit status bug when modules invoked using -m switch,
  return the proper failure return value (1). Patch contributed by Jeff Knupp.

- Issue #15229: An `OSError` subclass whose __init__ doesn't call back
  OSError.__init__ could produce incomplete instances, leading to crashes when
  calling str() on them.

- Issue #15307: Virtual environments now use symlinks with framework builds on
  Mac OS X, like other POSIX builds.

Library
-------

- Issue #14590: configparser now correctly strips inline comments when delimiter
  occurs earlier without preceding space.

- Issue #15424: Add a `__sizeof__()` implementation for array objects.  Patch by
  Ludwig Hähne.

- Issue #15576: Allow extension modules to act as a package's __init__ module.

- Issue #15502: Have `importlib.invalidate_caches()` work on `sys.meta_path`
  instead of `sys.path_importer_cache`.

- Issue #15163: Pydoc shouldn't list __loader__ as module data.

- Issue #15471: Do not use mutable objects as defaults for
  `importlib.__import__()`.

- Issue #15559: To avoid a problematic failure mode when passed to the bytes
  constructor, objects in the ipaddress module no longer implement `__index__()`
  (they still implement `__int__()` as appropriate).

- Issue #15546: Fix handling of pathological input data in the peek() and
  read1() methods of the BZ2File, GzipFile and LZMAFile classes.

- Issue #12655: Instead of requiring a custom type, `os.sched_getaffinity()` and
  `os.sched_setaffinity()` now use regular sets of integers to represent the
  CPUs a process is restricted to.

- Issue #15538: Fix compilation of the `socket.getnameinfo()` /
  `socket.getaddrinfo()` emulation code.  Patch by Philipp Hagemeister.

- Issue #15519: Properly expose WindowsRegistryFinder in importlib (and use the
  correct term for it).  Original patch by Eric Snow.

- Issue #15502: Bring the importlib ABCs into line with the current state of the
  import protocols given PEP 420.  Original patch by Eric Snow.

- Issue #15499: Launching a webbrowser in Unix used to sleep for a few seconds.
  Original patch by Anton Barkovsky.

- Issue #15463: The faulthandler module truncates strings to 500 characters,
  instead of 100, to be able to display long file paths.

- Issue #6056: Make `multiprocessing` use setblocking(True) on the sockets it
  uses.  Original patch by J Derek Wilson.

- Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.

- Issue #15413: `os.times()` had disappeared under Windows.

- Issue #15402: An issue in the struct module that caused `sys.getsizeof()` to
  return incorrect results for struct.Struct instances has been fixed.  Initial
  patch by Serhiy Storchaka.

- Issue #15232: When mangle_from is True, `email.Generator` now correctly
  mangles lines that start with 'From ' that occur in a MIME preamble or
  epilogue.

- Issue #15094: Incorrectly placed #endif in _tkinter.c.  Patch by Serhiy
  Storchaka.

- Issue #13922: `argparse` no longer incorrectly strips '--'s that appear after
  the first one.

- Issue #12353: `argparse` now correctly handles null argument values.

- Issue #10017, issue #14998: Fix TypeError using pprint on dictionaries with
  user-defined types as keys or other unorderable keys.

- Issue #15397: `inspect.getmodulename()` is now based directly on importlib via
  a new `importlib.machinery.all_suffixes()` API.

- Issue #14635: `telnetlib` will use poll() rather than select() when possible to
  avoid failing due to the select() file descriptor limit.

- Issue #15180: Clarify posixpath.join() error message when mixing str & bytes.

- Issue #15343: pkgutil now includes an iter_importer_modules implementation for
  importlib.machinery.FileFinder (similar to the way it already handled
  zipimport.zipimporter).

- Issue #15314: runpy now sets __main__.__loader__ correctly.

- Issue #15357: The import emulation in pkgutil is now deprecated. pkgutil uses
  importlib internally rather than the emulation.

- Issue #15233: Python now guarantees that callables registered with the atexit
  module will be called in a deterministic order.

- Issue #15238: `shutil.copystat()` now copies Linux "extended attributes".

- Issue #15230: runpy.run_path now correctly sets __package__ as described in
  the documentation.

- Issue #15315: Support VS 2010 in distutils cygwincompiler.

- Issue #15294: Fix a regression in pkgutil.extend_path()'s handling of nested
  namespace packages.

- Issue #15056: `imp.cache_from_source()` and `imp.source_from_cache()` raise
  NotImplementedError when `sys.implementation.cache_tag` is set to None.

- Issue #15256: Grammatical mistake in exception raised by `imp.find_module()`.

- Issue #5931: `wsgiref` environ variable SERVER_SOFTWARE will specify an
  implementation specific term like CPython, Jython instead of generic "Python".

- Issue #13248: Remove obsolete argument "max_buffer_size" of BufferedWriter and
  BufferedRWPair, from the io module.

- Issue #13248: Remove obsolete argument "version" of `argparse.ArgumentParser`.

- Issue #14814: Implement more consistent ordering and sorting behaviour for
  ipaddress objects.

- Issue #14814: `ipaddress` network objects correctly return NotImplemented when
  compared to arbitrary objects instead of raising TypeError.

- Issue #14990: Correctly fail with SyntaxError on invalid encoding declaration.

- Issue #14814: `ipaddress` now provides more informative error messages when
  constructing instances directly (changes permitted during beta due to
  provisional API status).

- Issue #15247: `io.FileIO` now raises an error when given a file descriptor
  pointing to a directory.

- Issue #15261: Stop os.stat(fd) crashing on Windows when fd not open.

- Issue #15166: Implement `imp.get_tag()` using `sys.implementation.cache_tag`.

- Issue #15210: Catch KeyError when `importlib.__init__()` can't find
  _frozen_importlib in sys.modules, not ImportError.

- Issue #15030: `importlib.abc.PyPycLoader` now supports the new source size
  header field in .pyc files.

- Issue #5346: Preserve permissions of mbox, MMDF and Babyl mailbox files on
  flush().

- Issue #10571: Fix the "--sign" option of distutils' upload command.  Patch by
  Jakub Wilk.

- Issue #9559: If messages were only added, a new file is no longer created and
  renamed over the old file when flush() is called on an mbox, MMDF or Babyl
  mailbox.

- Issue #10924: Fixed `crypt.mksalt()` to use a RNG that is suitable for
  cryptographic purpose.

- Issue #15184: Ensure consistent results of OS X configuration tailoring for
  universal builds by factoring out common OS X-specific customizations from
  sysconfig, distutils.sysconfig, distutils.util, and distutils.unixccompiler
  into a new module _osx_support.

C API
-----

- Issue #15610: `PyImport_ImportModuleEx()` now uses a 'level' of 0 instead of -1.

- Issue #15169, issue #14599: Strip out the C implementation of
  `imp.source_from_cache()` used by PyImport_ExecCodeModuleWithPathnames() and
  used the Python code instead. Leads to PyImport_ExecCodeModuleObject() to not
  try to infer the source path from the bytecode path as
  PyImport_ExecCodeModuleWithPathnames() does.

Extension Modules
-----------------

- Issue #6493: An issue in ctypes on Windows that caused structure bitfields of
  type `ctypes.c_uint32` and width 32 to incorrectly be set has been fixed.

- Issue #15194: Update libffi to the 3.0.11 release.

IDLE
----

- Issue #13052: Fix IDLE crashing when replace string in Search/Replace dialog
  ended with ``\``.  Patch by Roger Serwy.

Tools/Demos
-----------

- Issue #15458: python-config gets a new option --configdir to print the $LIBPL
  value.

- Move importlib.test.benchmark to Tools/importbench.

- Issue #12605: The gdb hooks for debugging CPython (within Tools/gdb) have been
  enhanced to show information on more C frames relevant to CPython within the
  "py-bt" and "py-bt-full" commands:

  * C frames that are waiting on the GIL
  * C frames that are garbage-collecting
  * C frames that are due to the invocation of a PyCFunction

Documentation
-------------

- Issue #15041: Update "see also" list in tkinter documentation.

- Issue #15444: Use proper spelling for non-ASCII contributor names.  Patch by
  Serhiy Storchaka.

- Issue #15295: Reorganize and rewrite the documentation on the import system.

- Issue #15230: Clearly document some of the limitations of the runpy module and
  nudge readers towards importlib when appropriate.

- Issue #15053: Copy Python 3.3 import lock change notice to all relevant
  functions in imp instead of just at the top of the relevant section.

- Issue #15288: Link to the term "loader" in notes in pkgutil about how things
  won't work as expected in Python 3.3 and mark the requisite functions as
  "changed" since they will no longer work with modules directly imported by
  import itself.

- Issue #13557: Clarify effect of giving two different namespaces to `exec()` or
  `execfile()`.

- Issue #15250: Document that `filecmp.dircmp()` compares files shallowly. Patch
  contributed by Chris Jerdonek.

- Issue #15442: Expose the default list of directories ignored by
  `filecmp.dircmp()` as a module attribute, and expand the list to more modern
  values.

Tests
-----

- Issue #15467: Move helpers for `__sizeof__()` tests into test_support.  Patch
  by Serhiy Storchaka.

- Issue #15320: Make iterating the list of tests thread-safe when running tests
  in multiprocess mode. Patch by Chris Jerdonek.

- Issue #15168: Move `importlib.test` to `test.test_importlib`.

- Issue #15091: Reactivate a test on UNIX which was failing thanks to a
  forgotten `importlib.invalidate_caches()` call.

- Issue #15230: Adopted a more systematic approach in the runpy tests.

- Issue #15300: Ensure the temporary test working directories are in the same
  parent folder when running tests in multiprocess mode from a Python build.
  Patch by Chris Jerdonek.

- Issue #15284: Skip {send,recv}msg tests in test_socket when IPv6 is not
  enabled. Patch by Brian Brazil.

- Issue #15277: Fix a resource leak in support.py when IPv6 is disabled.  Patch
  by Brian Brazil.

Build
-----

- Issue #11715: Fix multiarch detection without having Debian development tools
  (dpkg-dev) installed.

- Issue #15037: Build OS X installers with local copy of ncurses 5.9 libraries
  to avoid curses.unget_wch bug present in older versions of ncurses such as
  those shipped with OS X.

- Issue #15560: Fix building _sqlite3 extension on OS X with an SDK.  Also, for
  OS X installers, ensure consistent sqlite3 behavior and feature availability
  by building a local copy of libsqlite3 rather than depending on the wide range
  of versions supplied with various OS X releases.

- Issue #8847: Disable COMDAT folding in Windows PGO builds.

- Issue #14018: Fix OS X Tcl/Tk framework checking when using OS X SDKs.

- Issue #16256: OS X installer now sets correct permissions for doc directory.

- Issue #15431: Add _freeze_importlib project to regenerate importlib.h on
  Windows. Patch by Kristján Valur Jónsson.

- Issue #14197: For OS X framework builds, ensure links to the shared library
  are created with the proper ABI suffix.

- Issue #14330: For cross builds, don't use host python, use host search paths
  for host compiler.

- Issue #15235: Allow Berkeley DB versions up to 5.3 to build the dbm module.

- Issue #15268: Search curses.h in /usr/include/ncursesw.


What's New in Python 3.3.0 Beta 1?
==================================

*Release date: 27-Jun-2012*

Core and Builtins
-----------------

- Fix a (most likely) very rare memory leak when calling main() and not being
  able to decode a command-line argument.

- Issue #14815: Use Py_ssize_t instead of long for the object hash, to
  preserve all 64 bits of hash on Win64.

- Issue #12268: File readline, readlines and read() or readall() methods
  no longer lose data when an underlying read system call is interrupted.
  IOError is no longer raised due to a read system call returning EINTR
  from within these methods.

- Issue #11626: Add _SizeT functions to stable ABI.

- Issue #15142: Fix reference leak when deallocating instances of types
  created using PyType_FromSpec().

- Issue #10053: Don't close FDs when FileIO.__init__ fails. Loosely based on
  the work by Hirokazu Yamamoto.

- Issue #15096: Removed support for ur'' as the raw notation isn't
  compatible with Python 2.x's raw unicode strings.

- Issue #13783: Generator objects now use the identifier APIs internally

- Issue #14874: Restore charmap decoding speed to pre-PEP 393 levels.
  Patch by Serhiy Storchaka.

- Issue #15026: utf-16 encoding is now significantly faster (up to 10x).
  Patch by Serhiy Storchaka.

- Issue #11022: open() and io.TextIOWrapper are now calling
  locale.getpreferredencoding(False) instead of locale.getpreferredencoding()
  in text mode if the encoding is not specified. Don't change temporary the
  locale encoding using locale.setlocale(), use the current locale encoding
  instead of the user preferred encoding.

- Issue #14673: Add Eric Snow's sys.implementation implementation.

- Issue #15038: Optimize python Locks on Windows.

Library
-------

- Issue #12288: Consider '0' and '0.0' as valid initialvalue
  for tkinter SimpleDialog.

- Issue #15512: Add a __sizeof__ implementation for parser.
  Patch by Serhiy Storchaka.

- Issue #15469: Add a __sizeof__ implementation for deque objects.
  Patch by Serhiy Storchaka.

- Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
  Patch by Serhiy Storchaka.

- Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
  Patch by Serhiy Storchaka.

- Issue #15514: Correct __sizeof__ support for cpu_set.
  Patch by Serhiy Storchaka.

- Issue #15177: Added dir_fd parameter to os.fwalk().

- Issue #15061: Re-implemented hmac.compare_digest() in C to prevent further
  timing analysis and to support all buffer protocol aware objects as well as
  ASCII only str instances safely.

- Issue #15164: Change return value of platform.uname() from a
  plain tuple to a collections.namedtuple.

- Support Mageia Linux in the platform module.

- Issue #11678: Support Arch linux in the platform module.

- Issue #15118: Change return value of os.uname() and os.times() from
  plain tuples to immutable iterable objects with named attributes
  (structseq objects).

- Speed up _decimal by another 10-15% by caching the thread local context
  that was last accessed. In the pi benchmark (64-bit platform, prec=9),
  _decimal is now only 1.5x slower than float.

- Remove the packaging module, which is not ready for prime time.

- Issue #15154: Add "dir_fd" parameter to os.rmdir, remove "rmdir"
  parameter from os.remove / os.unlink.

- Issue #4489: Add a shutil.rmtree that isn't susceptible to symlink attacks.
  It is used automatically on platforms supporting the necessary os.openat()
  and os.unlinkat() functions. Main code by Martin von Löwis.

- Issue #15156: HTMLParser now uses the new "html.entities.html5" dictionary.

- Issue #11113: add a new "html5" dictionary containing the named character
  references defined by the HTML5 standard and the equivalent Unicode
  character(s) to the html.entities module.

- Issue #15114: the strict mode of HTMLParser and the HTMLParseError exception
  are deprecated now that the parser is able to parse invalid markup.

- Issue #3665: \u and \U escapes are now supported in unicode regular
  expressions.  Patch by Serhiy Storchaka.

- Issue #15153: Added inspect.getgeneratorlocals to simplify white box
  testing of generator state updates

- Issue #13062: Added inspect.getclosurevars to simplify testing stateful
  closures

- Issue #11024: Fixes and additional tests for Time2Internaldate.

- Issue #14626: Large refactoring of functions / parameters in the os module.
  Many functions now support "dir_fd" and "follow_symlinks" parameters;
  some also support accepting an open file descriptor in place of a path
  string.  Added os.support_* collections as LBYL helpers.  Removed many
  functions only previously seen in 3.3 alpha releases (often starting with
  "f" or "l", or ending with "at").  Originally suggested by Serhiy Storchaka;
  implemented by Larry Hastings.

- Issue #15008: Implement PEP 362 "Signature Objects".
  Patch by Yury Selivanov.

- Issue #15138: base64.urlsafe_{en,de}code() are now 3-4x faster.

- Issue #444582: Add shutil.which, for finding programs on the system path.
  Original patch by Erik Demaine, with later iterations by Jan Killian
  and Brian Curtin.

- Issue #14837: SSL errors now have ``library`` and ``reason`` attributes
  describing precisely what happened and in which OpenSSL submodule.  The
  str() of a SSLError is also enhanced accordingly.

- Issue #9527: datetime.astimezone() method will now supply a class
  timezone instance corresponding to the system local timezone when
  called with no arguments.

- Issue #14653: email.utils.mktime_tz() no longer relies on system
  mktime() when timezone offset is supplied.

- Issue #14684: zlib.compressobj() and zlib.decompressobj() now support the use
  of predefined compression dictionaries. Original patch by Sam Rushing.

- Fix GzipFile's handling of filenames given as bytes objects.

- Issue #14772: Return destination values from some shutil functions.

- Issue #15064: Implement context management protocol for multiprocessing types

- Issue #15101: Make pool finalizer avoid joining current thread.

- Issue #14657: The frozen instance of importlib used for bootstrap is now
  also the module imported as importlib._bootstrap.

- Issue #14055: Add __sizeof__ support to _elementtree.

- Issue #15054: A bug in tokenize.tokenize that caused string literals
  with 'b' prefixes to be incorrectly tokenized has been fixed.
  Patch by Serhiy Storchaka.

- Issue #15006: Allow equality comparison between naive and aware
  time or datetime objects.

- Issue #15036: Mailbox no longer throws an error if a flush is done
  between operations when removing or changing multiple items in mbox,
  MMDF, or Babyl mailboxes.

- Issue #14059: Implement multiprocessing.Barrier.

- Issue #15061: The inappropriately named hmac.secure_compare has been
  renamed to hmac.compare_digest, restricted to operating on bytes inputs
  only and had its documentation updated to more accurately reflect both its
  intent and its limitations

- Issue #13841: Make child processes exit using sys.exit() on Windows.

- Issue #14936: curses_panel was converted to PEP 3121 and PEP 384 API.
  Patch by Robin Schreiber.

- Issue #1667546: On platforms supporting tm_zone and tm_gmtoff fields
  in struct tm, time.struct_time objects returned by time.gmtime(),
  time.localtime() and time.strptime() functions now have tm_zone and
  tm_gmtoff attributes.  Original patch by Paul Boddie.

- Rename adjusted attribute to adjustable in time.get_clock_info() result.

- Issue #3518: Remove references to non-existent BaseManager.from_address()
  method.

- Issue #13857: Added textwrap.indent() function (initial patch by Ezra
  Berch)

- Issue #2736: Added datetime.timestamp() method.

- Issue #13854: Make multiprocessing properly handle non-integer
  non-string argument to SystemExit.

- Issue #12157: Make pool.map() empty iterables correctly.  Initial
  patch by mouad.

- Issue #11823: disassembly now shows argument counts on calls with keyword args.

- Issue #14711: os.stat_float_times() has been deprecated.

- LZMAFile now accepts the modes "rb"/"wb"/"ab" as synonyms of "r"/"w"/"a".

- The bz2 and lzma modules now each contain an open() function, allowing
  compressed files to readily be opened in text mode as well as binary mode.

- BZ2File.__init__() and LZMAFile.__init__() now accept a file object as their
  first argument, rather than requiring a separate "fileobj" argument.

- gzip.open() now accepts file objects as well as filenames.

- Issue #14992: os.makedirs(path, exist_ok=True) would raise an OSError
  when the path existed and had the S_ISGID mode bit set when it was
  not explicitly asked for.  This is no longer an exception as mkdir
  cannot control if the OS sets that bit for it or not.

- Issue #14989: Make the CGI enable option to http.server available via command
  line.

- Issue #14987: Add a missing import statement to inspect.

- Issue #1079: email.header.decode_header now correctly parses all the examples
  in RFC2047.  There is a necessary visible behavior change: the leading and/or
  trailing whitespace on ASCII parts is now preserved.

- Issue #14969: Better handling of exception chaining in contextlib.ExitStack

- Issue #14963: Convert contextlib.ExitStack.__exit__ to use an iterative
  algorithm (Patch by Alon Horev)

- Issue #14785: Add sys._debugmallocstats() to help debug low-level memory
  allocation issues

- Issue #14443: Ensure that .py files are byte-compiled with the correct Python
  executable within bdist_rpm even on older versions of RPM

C-API
-----

- Issue #15146: Add PyType_FromSpecWithBases. Patch by Robin Schreiber.

- Issue #15042: Add PyState_AddModule and PyState_RemoveModule. Add version
  guard for Py_LIMITED_API additions. Patch by Robin Schreiber.

- Issue #13783: Inadvertent additions to the public C API in the PEP 380
  implementation have either been removed or marked as private interfaces.

Extension Modules
-----------------

- Issue #15000: Support the "unique" x32 architecture in _posixsubprocess.c.

IDLE
----

- Issue #9803: Don't close IDLE on saving if breakpoint is open.
  Patch by Roger Serwy.

- Issue #14962: Update text coloring in IDLE shell window after changing
  options.  Patch by Roger Serwy.

Documentation
-------------

- Issue #15176: Clarified behavior, documentation, and implementation
  of os.listdir().

- Issue #14982: Document that pkgutil's iteration functions require the
  non-standard iter_modules() method to be defined by an importer (something
  the importlib importers do not define).

- Issue #15081: Document PyState_FindModule.
  Patch by Robin Schreiber.

- Issue #14814: Added first draft of ipaddress module API reference

Tests
-----

- Issue #15187: Bugfix: remove temporary directories test_shutil was leaving
  behind.

- Issue #14769: test_capi now has SkipitemTest, which cleverly checks
  for "parity" between PyArg_ParseTuple() and the Python/getargs.c static
  function skipitem() for all possible "format units".

- test_nntplib now tolerates being run from behind NNTP gateways that add
  "X-Antivirus" headers to articles

- Issue #15043: test_gdb is now skipped entirely if gdb security settings
  block loading of the gdb hooks

- Issue #14963: Add test cases for exception handling behaviour
  in contextlib.ExitStack (Initial patch by Alon Horev)

Build
-----

- Issue #13590: Improve support for OS X Xcode 4:
    * Try to avoid building Python or extension modules with problematic
      llvm-gcc compiler.
    * Since Xcode 4 removes ppc support, extension module builds now
      check for ppc compiler support and automatically remove ppc and
      ppc64 archs when not available.
    * Since Xcode 4 no longer install SDKs in default locations,
      extension module builds now revert to using installed headers
      and libs if the SDK used to build the interpreter is not
      available.
    * Update ./configure to use better defaults for universal builds;
      in particular, --enable-universalsdk=yes uses the Xcode default
      SDK and --with-universal-archs now defaults to "intel" if ppc
      not available.

- Issue #14225: Fix Unicode support for curses (#12567) on OS X

- Issue #14928: Fix importlib bootstrap issues by using a custom executable
  (Modules/_freeze_importlib) to build Python/importlib.h.


What's New in Python 3.3.0 Alpha 4?
===================================

*Release date: 31-May-2012*

Core and Builtins
-----------------

- Issue #14835: Make plistlib output empty arrays & dicts like OS X.
  Patch by Sidney San Martín.

- Issue #14744: Use the new _PyUnicodeWriter internal API to speed up
  str%args and str.format(args).

- Issue #14930: Make memoryview objects weakrefable.

- Issue #14775: Fix a potential quadratic dict build-up due to the garbage
  collector repeatedly trying to untrack dicts.

- Issue #14857: fix regression in references to PEP 3135 implicit __class__
  closure variable (Reopens issue #12370)

- Issue #14712 (PEP 405): Virtual environments. Implemented by Vinay Sajip.

- Issue #14660 (PEP 420): Namespace packages. Implemented by Eric Smith.

- Issue #14494: Fix __future__.py and its documentation to note that
  absolute imports are the default behavior in 3.0 instead of 2.7.
  Patch by Sven Marnach.

- Issue #9260: A finer-grained import lock.  Most of the import sequence
  now uses per-module locks rather than the global import lock, eliminating
  well-known issues with threads and imports.

- Issue #14624: UTF-16 decoding is now 3x to 4x faster on various inputs.
  Patch by Serhiy Storchaka.

- asdl_seq and asdl_int_seq are now Py_ssize_t sized.

- Issue #14133 (PEP 415): Implement suppression of __context__ display with an
  attribute on BaseException. This replaces the original mechanism of PEP 409.

- Issue #14417: Mutating a dict during lookup now restarts the lookup instead
  of raising a RuntimeError (undoes issue #14205).

- Issue #14738: Speed-up UTF-8 decoding on non-ASCII data.  Patch by Serhiy
  Storchaka.

- Issue #14700: Fix two broken and undefined-behaviour-inducing overflow checks
  in old-style string formatting.

Library
-------

- Issue #14690: Use monotonic clock instead of system clock in the sched,
  subprocess and trace modules.

- Issue #14443: Tell rpmbuild to use the correct version of Python in
  bdist_rpm. Initial patch by Ross Lagerwall.

- Issue #12515: email now registers a defect if it gets to EOF while parsing
  a MIME part without seeing the closing MIME boundary.

- Issue #1672568: email now always decodes base64 payloads, adding padding and
  ignoring non-base64-alphabet characters if needed, and registering defects
  for any such problems.

- Issue #14925: email now registers a defect when the parser decides that there
  is a missing header/body separator line.  MalformedHeaderDefect, which the
  existing code would never actually generate, is deprecated.

- Issue #10365: File open dialog now works instead of crashing even when
  the parent window is closed before the dialog. Patch by Roger Serwy.

- Issue #8739: Updated smtpd to support RFC 5321, and added support for the
  RFC 1870 SIZE extension.

- Issue #665194: Added a localtime function to email.utils to provide an
  aware local datetime for use in setting Date headers.

- Issue #12586: Added new provisional policies that implement convenient
  unicode support for email headers.  See What's New for details.

- Issue #14731: Refactored email Policy framework to support full backward
  compatibility with Python 3.2 by default yet allow for the introduction of
  new features through new policies.  Note that Policy.must_be_7bit is renamed
  to cte_type.

- Issue #14876: Use user-selected font for highlight configuration.

- Issue #14920: Fix the help(urllib.parse) failure on locale C on terminals.
  Have ascii characters in help.

- Issue #14548: Make multiprocessing finalizers check pid before
  running to cope with possibility of gc running just after fork.

- Issue #14036: Add an additional check to validate that port in urlparse does
  not go in illegal range and returns None.

- Issue #14862: Add missing names to os.__all__

- Issue #14875: Use float('inf') instead of float('1e66666') in the json module.

- Issue #13585: Added contextlib.ExitStack

- PEP 3144, Issue #14814: Added the ipaddress module

- Issue #14426: Correct the Date format in Expires attribute of Set-Cookie
  Header in Cookie.py.

- Issue #14588: The types module now provide new_class() and prepare_class()
  functions to support PEP 3115 compliant dynamic class creation. Patch by
  Daniel Urban and Nick Coghlan.

- Issue #13152: Allow specifying a custom tabsize for expanding tabs in
  textwrap. Patch by John Feuerstein.

- Issue #14721: Send the correct 'Content-length: 0' header when the body is an
  empty string ''. Initial Patch contributed by Arve Knudsen.

- Issue #14072: Fix parsing of 'tel' URIs in urlparse by making the check for
  ports stricter.

- Issue #9374: Generic parsing of query and fragment portions of url for any
  scheme. Supported both by RFC3986 and RFC2396.

- Issue #14798: Fix the functions in pyclbr to raise an ImportError
  when the first part of a dotted name is not a package. Patch by
  Xavier de Gaye.

- Issue #12098: multiprocessing on Windows now starts child processes
  using the same sys.flags as the current process.  Initial patch by
  Sergey Mezentsev.

- Issue #13031: Small speed-up for tarfile when unzipping tarfiles.
  Patch by Justin Peel.

- Issue #14780: urllib.request.urlopen() now has a ``cadefault`` argument
  to use the default certificate store.  Initial patch by James Oakley.

- Issue #14829: Fix bisect and range() indexing with large indices
  (>= 2 ** 32) under 64-bit Windows.

- Issue #14732: The _csv module now uses PEP 3121 module initialization.
  Patch by Robin Schreiber.

- Issue #14809: Add HTTP status codes introduced by RFC 6585 to http.server
  and http.client. Patch by EungJun Yi.

- Issue #14777: tkinter may return undecoded UTF-8 bytes as a string when
  accessing the Tk clipboard.  Modify clipboard_get() to first request type
  UTF8_STRING when no specific type is requested in an X11 windowing
  environment, falling back to the current default type STRING if that fails.
  Original patch by Thomas Kluyver.

- Issue #14773: Fix os.fwalk() failing on dangling symlinks.

- Issue #12541: Be lenient with quotes around Realm field of HTTP Basic
  Authentication in urllib2.

- Issue #14807: move undocumented tarfile.filemode() to stat.filemode() and add
  doc entry. Add tarfile.filemode alias with deprecation warning.

- Issue #13815: TarFile.extractfile() now returns io.BufferedReader objects.

- Issue #14532: Add a secure_compare() helper to the hmac module, to mitigate
  timing attacks. Patch by Jon Oberheide.

- Add importlib.util.resolve_name().

- Issue #14366: Support lzma compression in zip files.
  Patch by Serhiy Storchaka.

- Issue #13959: Introduce importlib.find_loader() and document
  imp.find_module/load_module as deprecated.

- Issue #14082: shutil.copy2() now copies extended attributes, if possible.
  Patch by Hynek Schlawack.

- Issue #13959: Make importlib.abc.FileLoader.load_module()/get_filename() and
  importlib.machinery.ExtensionFileLoader.load_module() have their single
  argument be optional. Allows for the replacement (and thus deprecation) of
  imp.load_source()/load_package()/load_compiled().

- Issue #13959: imp.get_suffixes() has been deprecated in favour of the new
  attributes on importlib.machinery: SOURCE_SUFFIXES, DEBUG_BYTECODE_SUFFIXES,
  OPTIMIZED_BYTECODE_SUFFIXES, BYTECODE_SUFFIXES, and EXTENSION_SUFFIXES. This
  led to an indirect deprecation of inspect.getmoduleinfo().

- Issue #14662: Prevent shutil failures on OS X when destination does not
  support chflag operations.  Patch by Hynek Schlawack.

- Issue #14157: Fix time.strptime failing without a year on February 29th.
  Patch by Hynek Schlawack.

- Issue #14753: Make multiprocessing's handling of negative timeouts
  the same as it was in Python 3.2.

- Issue #14583: Fix importlib bug when a package's __init__.py would first
  import one of its modules then raise an error.

- Issue #14741: Fix missing support for Ellipsis ('...') in parser module.

- Issue #14697: Fix missing support for set displays and set comprehensions in
  parser module.

- Issue #14701: Fix missing support for 'raise ... from' in parser module.

- Add support for timeouts to the acquire() methods of
  multiprocessing's lock/semaphore/condition proxies.

- Issue #13989: Add support for text mode to gzip.open().

- Issue #14127: The os.stat() result object now provides three additional
  fields: st_ctime_ns, st_mtime_ns, and st_atime_ns, providing those times as an
  integer with nanosecond resolution.  The functions os.utime(), os.lutimes(),
  and os.futimes() now accept a new parameter, ns, which accepts mtime and atime
  as integers with nanosecond resolution.

- Issue #14127 and #10148: shutil.copystat now preserves exact mtime and atime
  on filesystems providing nanosecond resolution.

IDLE
----

- Issue #14958: Change IDLE syntax highlighting to recognize all string and
  byte literals supported in Python 3.3.

- Issue #10997: Prevent a duplicate entry in IDLE's "Recent Files" menu.

- Issue #14929: Stop IDLE 3.x from closing on Unicode decode errors when
  grepping. Patch by Roger Serwy.

- Issue #12510: Attempting to get invalid tooltip no longer closes IDLE.
  Other tooltipss have been corrected or improved and the number of tests
  has been tripled. Original patch by Roger Serwy.

Tools/Demos
-----------

- Issue #14695: Bring Tools/parser/unparse.py support up to date with
  the Python 3.3 Grammar.

Build
-----

- Issue #14472: Update .gitignore. Patch by Matej Cepl.

- Upgrade Windows library versions: bzip 1.0.6, OpenSSL 1.0.1c.

- Issue #14693: Under non-Windows platforms, hashlib's fallback modules are
  always compiled, even if OpenSSL is present at build time.

- Issue #13210: Windows build now uses VS2010, ported from VS2008.

C-API
-----

- Issue #14705: The PyArg_Parse() family of functions now support the 'p' format
  unit, which accepts a "boolean predicate" argument.  It converts any Python
  value into an integer--0 if it is "false", and 1 otherwise.

Documentation
-------------

- Issue #14863: Update the documentation of os.fdopen() to reflect the
  fact that it's only a thin wrapper around open() anymore.

- Issue #14588: The language reference now accurately documents the Python 3
  class definition process. Patch by Nick Coghlan.

- Issue #14943: Correct a default argument value for winreg.OpenKey
  and correctly list the argument names in the function's explanation.


What's New in Python 3.3.0 Alpha 3?
===================================

*Release date: 01-May-2012*

Core and Builtins
-----------------

- Issue #14699: Fix calling the classmethod descriptor directly.

- Issue #14433: Prevent msvcrt crash in interactive prompt when stdin is closed.

- Issue #14521: Make result of float('nan') and float('-nan') more consistent
  across platforms.

- Issue #14646: __import__() sets __loader__ if the loader did not.

- Issue #14605: No longer have implicit entries in sys.meta_path. If
  sys.meta_path is found to be empty, raise ImportWarning.

- Issue #14605: No longer have implicit entries in sys.path_hooks. If
  sys.path_hooks is found to be empty, a warning will be raised. None is now
  inserted into sys.path_importer_cache if no finder was discovered. This also
  means imp.NullImporter is no longer implicitly used.

- Issue #13903: Implement PEP 412. Individual dictionary instances can now share
  their keys with other dictionaries. Classes take advantage of this to share
  their instance dictionary keys for improved memory and performance.

- Issue #11603 (again): Setting __repr__ to __str__ now raises a RuntimeError
  when repr() or str() is called on such an object.

- Issue #14658: Fix binding a special method to a builtin implementation of a
  special method with a different name.

- Issue #14630: Fix a memory access bug for instances of a subclass of int
  with value 0.

- Issue #14339: Speed improvements to bin, oct and hex functions.  Patch by
  Serhiy Storchaka.

- Issue #14385: It is now possible to use a custom type for the __builtins__
  namespace, instead of a dict. It can be used for sandboxing for example.
  Raise also a NameError instead of ImportError if __build_class__ name if not
  found in __builtins__.

- Issue #12599: Be more strict in accepting None compared to a false-like
  object for importlib.util.module_for_loader and
  importlib.machinery.PathFinder.

- Issue #14612: Fix jumping around with blocks by setting f_lineno.

- Issue #14592: Attempting a relative import w/o __package__ or __name__ set in
  globals raises a KeyError.

- Issue #14607: Fix keyword-only arguments which started with ``__``.

- Issue #10854: The ImportError raised when an extension module on Windows
  fails to import now uses the new path and name attributes from
  Issue #1559549.

- Issue #13889: Check and (if necessary) set FPU control word before calling
  any of the dtoa.c string <-> float conversion functions, on MSVC builds of
  Python.  This fixes issues when embedding Python in a Delphi app.

- __import__() now matches PEP 328 and documentation by defaulting 'index' to 0
  instead of -1 and removing support for negative values.

- Issue #2377: Make importlib the implementation of __import__().

- Issue #1559549: ImportError now has 'name' and 'path' attributes that are set
  using keyword arguments to its constructor. They are currently not set by
  import as they are meant for use by importlib.

- Issue #14474: Save and restore exception state in thread.start_new_thread()
  while writing error message if the thread leaves an unhandled exception.

- Issue #13019: Fix potential reference leaks in bytearray.extend().  Patch
  by Suman Saha.

Library
-------

- Issue #14768: os.path.expanduser('~/a') doesn't work correctly when HOME is '/'.

- Issue #14371: Support bzip2 in zipfile module.  Patch by Serhiy Storchaka.

- Issue #13183: Fix pdb skipping frames after hitting a breakpoint and running
  step.  Patch by Xavier de Gaye.

- Issue #14696: Fix parser module to understand 'nonlocal' declarations.

- Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
  the DST transition.  Patch by Joe Peterson.

- Issue #9154: Fix parser module to understand function annotations.

- Issue #6085: In http.server.py SimpleHTTPServer.address_string returns the
  client ip address instead client hostname. Patch by Charles-François Natali.

- Issue #14309: Deprecate time.clock(), use time.perf_counter() or
  time.process_time() instead.

- Issue #14428: Implement the PEP 418. Add time.get_clock_info(),
  time.perf_counter() and time.process_time() functions, and rename
  time.steady() to time.monotonic().

- Issue #14646: importlib.util.module_for_loader() now sets __loader__ and
  __package__ (when possible).

- Issue #14664: It is now possible to use @unittest.skip{If,Unless} on a
  test class that doesn't inherit from TestCase (i.e. a mixin).

- Issue #4892: multiprocessing Connections can now be transferred over
  multiprocessing Connections.  Patch by Richard Oudkerk (sbt).

- Issue #14160: TarFile.extractfile() failed to resolve symbolic links when
  the links were not located in an archive subdirectory.

- Issue #14638: pydoc now treats non-string __name__ values as if they
  were missing, instead of raising an error.

- Issue #13684: Fix httplib tunnel issue of infinite loops for certain sites
  which send EOF without trailing \r\n.

- Issue #14605: Add importlib.abc.FileLoader, importlib.machinery.(FileFinder,
  SourceFileLoader, SourcelessFileLoader, ExtensionFileLoader).

- Issue #13959: imp.cache_from_source()/source_from_cache() now follow
  os.path.join()/split() semantics for path manipulation instead of its prior,
  custom semantics of caring the right-most path separator forward in path
  joining.

- Issue #2193: Allow ":" character in Cookie NAME values.

- Issue #14629: tokenizer.detect_encoding will specify the filename in the
  SyntaxError exception if found at readline.__self__.name.

- Issue #14629: Raise SyntaxError in tokenizer.detect_encoding if the
  first two lines have non-UTF-8 characters without an encoding declaration.

- Issue #14308: Fix an exception when a "dummy" thread is in the threading
  module's active list after a fork().

- Issue #11750: The Windows API functions scattered in the _subprocess and
  _multiprocessing.win32 modules now live in a single module "_winapi".
  Patch by sbt.

- Issue #14087: multiprocessing: add Condition.wait_for(). Patch by sbt.

- Issue #14538: HTMLParser can now parse correctly start tags that contain
  a bare '/'.

- Issue #14452: SysLogHandler no longer inserts a UTF-8 BOM into the message.

- Issue #14386: Expose the dict_proxy internal type as types.MappingProxyType.

- Issue #13959: Make imp.reload() always use a module's __loader__ to perform
  the reload.

- Issue #13959: Add imp.py and rename the built-in module to _imp, allowing for
  re-implementing parts of the module in pure Python.

- Issue #13496: Fix potential overflow in bisect.bisect algorithm when applied
  to a collection of size > sys.maxsize / 2.

- Have importlib take advantage of ImportError's new 'name' and 'path'
  attributes.

- Issue #14399: zipfile now recognizes that the archive has been modified even
  if only the comment is changed.  In addition, the TypeError that results from
  trying to set a non-binary value as a comment is now raised at the time
  the comment is set rather than at the time the zipfile is written.

- trace.CoverageResults.is_ignored_filename() now ignores any name that starts
  with "<" and ends with ">" instead of special-casing "<string>" and
  "<doctest ".

- Issue #12537: The mailbox module no longer depends on knowledge of internal
  implementation details of the email package Message object.

- Issue #7978: socketserver now restarts the select() call when EINTR is
  returned.  This avoids crashing the server loop when a signal is received.
  Patch by Jerzy Kozera.

- Issue #14522: Avoid duplicating socket handles in multiprocessing.connection.
  Patch by sbt.

- Don't Py_DECREF NULL variable in io.IncrementalNewlineDecoder.

- Issue #3033: Add displayof parameter to tkinter font. Patch by Guilherme Polo.

- Issue #14482: Raise a ValueError, not a NameError, when trying to create
  a multiprocessing Client or Listener with an AF_UNIX type address under
  Windows.  Patch by Popa Claudiu.

- Issue #802310: Generate always unique tkinter font names if not directly passed.

- Issue #14151: Raise a ValueError, not a NameError, when trying to create
  a multiprocessing Client or Listener with an AF_PIPE type address under
  non-Windows platforms.  Patch by Popa Claudiu.

- Issue #14493: Use gvfs-open or xdg-open in webbrowser.

Build
-----

- "make touch" will now touch generated files that are checked into Mercurial,
  after a "hg update" which failed to bring the timestamps into the right order.

Tests
-----

- Issue #14026: In test_cmd_line_script, check that sys.argv is populated
  correctly for the various invocation approaches (Patch by Jason Yeo)

- Issue #14032: Fix incorrect variable name in test_cmd_line_script debugging
  message (Patch by Jason Yeo)

- Issue #14589: Update certificate chain for sha256.tbs-internet.com, fixing
  a test failure in test_ssl.

- Issue #14355: Regrtest now supports the standard unittest test loading, and
  will use it if a test file contains no `test_main` method.

IDLE
----

- Issue #8515: Set __file__ when run file in IDLE.
  Initial patch by Bruce Frederiksen.

- Issue #14496: Fix wrong name in idlelib/tabbedpages.py.
  Patch by Popa Claudiu.

Tools / Demos
-------------

- Issue #3561: The Windows installer now has an option, off by default, for
  placing the Python installation into the system "Path" environment variable.

- Issue #13165: stringbench is now available in the Tools/stringbench folder.
  It used to live in its own SVN project.

C-API
-----

- Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
  Patch by Stefan Behnel.


What's New in Python 3.3.0 Alpha 2?
===================================

*Release date: 01-Apr-2012*

Core and Builtins
-----------------

- Issue #1683368: object.__new__ and object.__init__ raise a TypeError if they
  are passed arguments and their complementary method is not overridden.

- Issue #14378: Fix compiling ast.ImportFrom nodes with a "__future__" string as
  the module name that was not interned.

- Issue #14331: Use significantly less stack space when importing modules by
  allocating path buffers on the heap instead of the stack.

- Issue #14334: Prevent in a segfault in type.__getattribute__ when it was not
  passed strings.

- Issue #1469629: Allow cycles through an object's __dict__ slot to be
  collected. (For example if ``x.__dict__ is x``).

- Issue #14205: dict lookup raises a RuntimeError if the dict is modified
  during a lookup.

- Issue #14220: When a generator is delegating to another iterator with the
  yield from syntax, it needs to have its ``gi_running`` flag set to True.

- Issue #14435: Remove dedicated block allocator from floatobject.c and rely
  on the PyObject_Malloc() api like all other objects.

- Issue #14471: Fix a possible buffer overrun in the winreg module.

- Issue #14288: Allow the serialization of builtin iterators

Library
-------

- Issue #14300: Under Windows, sockets created using socket.dup() now allow
  overlapped I/O.  Patch by sbt.

- Issue #13872: socket.detach() now marks the socket closed (as mirrored
  in the socket repr()).  Patch by Matt Joiner.

- Issue #14406: Fix a race condition when using ``concurrent.futures.wait(
  return_when=ALL_COMPLETED)``.  Patch by Matt Joiner.

- Issue #5136: deprecate old, unused functions from tkinter.

- Issue #14416: syslog now defines the LOG_ODELAY and LOG_AUTHPRIV constants
  if they are defined in <syslog.h>.

- Issue #14295: Add unittest.mock

- Issue #7652: Add --with-system-libmpdec option to configure for linking
  the _decimal module against an installed libmpdec.

- Issue #14380: MIMEText now defaults to utf-8 when passed non-ASCII unicode
  with no charset specified.

- Issue #10340: asyncore - properly handle EINVAL in dispatcher constructor on
  OSX; avoid to call handle_connect in case of a disconnected socket which
  was not meant to connect.

- Issue #14204: The ssl module now has support for the Next Protocol
  Negotiation extension, if available in the underlying OpenSSL library.
  Patch by Colin Marc.

- Issue #3035: Unused functions from tkinter are marked as pending deprecated.

- Issue #12757: Fix the skipping of doctests when python is run with -OO so
  that it works in unittest's verbose mode as well as non-verbose mode.

- Issue #7652: Integrate the decimal floating point libmpdec library to speed
  up the decimal module. Performance gains of the new C implementation are
  between 10x and 100x, depending on the application.

- Issue #14269: SMTPD now conforms to the RFC and requires a HELO command
  before MAIL, RCPT, or DATA.

- Issue #13694: asynchronous connect in asyncore.dispatcher does not set addr
  attribute.

- Issue #14344: fixed the repr of email.policy objects.

- Issue #11686: Added missing entries to email package __all__ lists
  (mostly the new Bytes classes).

- Issue #14335: multiprocessing's custom Pickler subclass now inherits from
  the C-accelerated implementation.  Patch by sbt.

- Issue #10484: Fix the CGIHTTPServer's PATH_INFO handling problem.

- Issue #11199: Fix the with urllib which hangs on particular ftp urls.

- Improve the memory utilization and speed of functools.lru_cache.

- Issue #14222: Use the new time.steady() function instead of time.time() for
  timeout in queue and threading modules to not be affected of system time
  update.

- Issue #13248: Remove lib2to3.pytree.Base.get_prefix/set_prefix.

- Issue #14234: CVE-2012-0876: Randomize hashes of xml attributes in the hash
  table internal to the pyexpat module's copy of the expat library to avoid a
  denial of service due to hash collisions.  Patch by David Malcolm with some
  modifications by the expat project.

- Issue #12818: format address no longer needlessly \ escapes ()s in names when
  the name ends up being quoted.

- Issue #14062: BytesGenerator now correctly folds Header objects,
  including using linesep when folding.

- Issue #13839: When invoked on the command-line, the pstats module now
  accepts several filenames of profile stat files and merges them all.
  Patch by Matt Joiner.

- Issue #14291: Email now defaults to utf-8 for non-ASCII unicode headers
  instead of raising an error.  This fixes a regression relative to 2.7.

- Issue #989712: Support using Tk without a mainloop.

- Issue #3835: Refuse to use unthreaded Tcl in threaded Python.

- Issue #2843: Add new Tk API to Tkinter.

- Issue #14184: Increase the default stack size for secondary threads on
  Mac OS X to avoid interpreter crashes when using threads on 10.7.

- Issue #14180: datetime.date.fromtimestamp(),
  datetime.datetime.fromtimestamp() and datetime.datetime.utcfromtimestamp()
  now raise an OSError instead of ValueError if localtime() or gmtime() failed.

- Issue #14180: time.ctime(), gmtime(), time.localtime(),
  datetime.date.fromtimestamp(), datetime.datetime.fromtimestamp() and
  datetime.datetime.utcfromtimestamp() now raises an OverflowError, instead of
  a ValueError, if the timestamp does not fit in time_t.

- Issue #14180: datetime.datetime.fromtimestamp() and
  datetime.datetime.utcfromtimestamp() now round microseconds towards zero
  instead of rounding to nearest with ties going away from zero.

- Issue #10543: Fix unittest test discovery with Jython bytecode files.

- Issue #1178863: Separate initialisation from setting when initializing
  Tkinter.Variables; harmonize exceptions to ValueError; only delete variables
  that have not been deleted; assert that variable names are strings.

- Issue #14104: Implement time.monotonic() on Mac OS X, patch written by
  Nicholas Riley.

- Issue #13394: the aifc module now uses warnings.warn() to signal warnings.

- Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under
  Windows when the child process has already exited.

- Issue #14223: curses.addch() is no more limited to the range 0-255 when the
  Python curses is not linked to libncursesw. It was a regression introduced
  in Python 3.3a1.

- Issue #14168: Check for presence of Element._attrs in minidom before
  accessing it.

- Issue #12328: Fix multiprocessing's use of overlapped I/O on Windows.
  Also, add a multiprocessing.connection.wait(rlist, timeout=None) function
  for polling multiple objects at once.  Patch by sbt.

- Issue #14007: Accept incomplete TreeBuilder objects (missing start, end,
  data or close method) for the Python implementation as well.
  Drop the no-op TreeBuilder().xml() method from the C implementation.

- Issue #14210: pdb now has tab-completion not only for command names, but
  also for their arguments, wherever possible.

- Issue #14310: Sockets can now be with other processes on Windows using
  the api socket.socket.share() and socket.fromshare().

- Issue #10576: The gc module now has a 'callbacks' member that will get
  called when garbage collection takes place.

Build
-----

- Issue #14557: Fix extensions build on HP-UX. Patch by Adi Roiban.

- Issue #14387: Do not include accu.h from Python.h.

- Issue #14359: Only use O_CLOEXEC in _posixmodule.c if it is defined.
  Based on patch from Hervé Coatanhay.

- Issue #14321: Do not run pgen during the build if files are up to date.

Documentation
-------------

- Issue #14034: added the argparse tutorial.

- Issue #14324: Fix configure tests for cross builds.

- Issue #14327: Call AC_CANONICAL_HOST in configure.ac and check in
  config.{guess,sub}. Don't use uname calls for cross builds.

Extension Modules
-----------------

- Issue #9041: An issue in ctypes.c_longdouble, ctypes.c_double, and
  ctypes.c_float that caused an incorrect exception to be returned in the
  case of overflow has been fixed.

- Issue #14212: The re module didn't retain a reference to buffers it was
  scanning, resulting in segfaults.

- Issue #14259: The finditer() method of re objects did not take any
  keyword arguments, contrary to the documentation.

- Issue #10142: Support for SEEK_HOLE/SEEK_DATA (for example, under ZFS).

Tests
-----

- Issue #14442: Add missing errno import in test_smtplib.

- Issue #8315: (partial fix) python -m unittest test.test_email now works.


What's New in Python 3.3.0 Alpha 1?
===================================

*Release date: 05-Mar-2012*

Core and Builtins
-----------------

- Issue #14172: Fix reference leak when marshalling a buffer-like object
  (other than a bytes object).

- Issue #13521: dict.setdefault() now does only one lookup for the given key,
  making it "atomic" for many purposes.  Patch by Filip Gruszczyński.

- PEP 409, Issue #6210: "raise X from None" is now supported as a means of
  suppressing the display of the chained exception context. The chained
  context still remains available as the __context__ attribute.

- Issue #10181: New memoryview implementation fixes multiple ownership
  and lifetime issues of dynamically allocated Py_buffer members (#9990)
  as well as crashes (#8305, #7433). Many new features have been added
  (See whatsnew/3.3), and the documentation has been updated extensively.
  The ndarray test object from _testbuffer.c implements all aspects of
  PEP-3118, so further development towards the complete implementation
  of the PEP can proceed in a test-driven manner.

  Thanks to Nick Coghlan, Antoine Pitrou and Pauli Virtanen for review
  and many ideas.

- Issue #12834: Fix incorrect results of memoryview.tobytes() for
  non-contiguous arrays.

- Issue #5231: Introduce memoryview.cast() method that allows changing
  format and shape without making a copy of the underlying memory.

- Issue #14084: Fix a file descriptor leak when importing a module with a
  bad encoding.

- Upgrade Unicode data to Unicode 6.1.

- Issue #14040: Remove rarely used file name suffixes for C extensions
  (under POSIX mainly).

- Issue #14051: Allow arbitrary attributes to be set of classmethod and
  staticmethod.

- Issue #13703: oCERT-2011-003: Randomize hashes of str and bytes to protect
  against denial of service attacks due to hash collisions within the dict and
  set types.  Patch by David Malcolm, based on work by Victor Stinner.

- Issue #13020: Fix a reference leak when allocating a structsequence object
  fails.  Patch by Suman Saha.

- Issue #13908: Ready types returned from PyType_FromSpec.

- Issue #11235: Fix OverflowError when trying to import a source file whose
  modification time doesn't fit in a 32-bit timestamp.

- Issue #12705: A SyntaxError exception is now raised when attempting to
  compile multiple statements as a single interactive statement.

- Fix the builtin module initialization code to store the init function for
  future reinitialization.

- Issue #8052: The posix subprocess module would take a long time closing
  all possible file descriptors in the child process rather than just open
  file descriptors.  It now closes only the open fds if possible for the
  default close_fds=True behavior.

- Issue #13629: Renumber the tokens in token.h so that they match the indexes
  into _PyParser_TokenNames.

- Issue #13752: Add a casefold() method to str.

- Issue #13761: Add a "flush" keyword argument to the print() function,
  used to ensure flushing the output stream.

- Issue #13645: pyc files now contain the size of the corresponding source
  code, to avoid timestamp collisions (especially on filesystems with a low
  timestamp resolution) when checking for freshness of the bytecode.

- PEP 380, Issue #11682: Add "yield from <x>" to support easy delegation to
  subgenerators (initial patch by Greg Ewing, integration into 3.3 by
  Renaud Blanch, Ryan Kelly, Zbigniew Jędrzejewski-Szmek and Nick Coghlan)

- Issue #13748: Raw bytes literals can now be written with the ``rb`` prefix
  as well as ``br``.

- Issue #12736: Use full unicode case mappings for upper, lower, and title case.

- Issue #12760: Add a create mode to open(). Patch by David Townshend.

- Issue #13738: Simplify implementation of bytes.lower() and bytes.upper().

- Issue #13577: Built-in methods and functions now have a __qualname__.
  Patch by sbt.

- Issue #6695: Full garbage collection runs now clear the freelist of set
  objects.  Initial patch by Matthias Troffaes.

- Fix OSError.__init__ and OSError.__new__ so that each of them can be
  overridden and take additional arguments (followup to issue #12555).

- Fix the fix for issue #12149: it was incorrect, although it had the side
  effect of appearing to resolve the issue.  Thanks to Mark Shannon for
  noticing.

- Issue #13505: Pickle bytes objects in a way that is compatible with
  Python 2 when using protocols <= 2.

- Issue #11147: Fix an unused argument in _Py_ANNOTATE_MEMORY_ORDER.  (Fix
  given by Campbell Barton).

- Issue #13503: Use a more efficient reduction format for bytearrays with
  pickle protocol >= 3.  The old reduction format is kept with older protocols
  in order to allow unpickling under Python 2.  Patch by Irmen de Jong.

- Issue #7111: Python can now be run without a stdin, stdout or stderr
  stream.  It was already the case with Python 2.  However, the corresponding
  sys module entries are now set to None (instead of an unusable file object).

- Issue #11849: Ensure that free()d memory arenas are really released
  on POSIX systems supporting anonymous memory mappings.  Patch by
  Charles-François Natali.

- PEP 3155 / issue #13448: Qualified name for classes and functions.

- Issue #13436: Fix a bogus error message when an AST object was passed
  an invalid integer value.

- Issue #13411: memoryview objects are now hashable when the underlying
  object is hashable.

- Issue #13338: Handle all enumerations in _Py_ANNOTATE_MEMORY_ORDER
  to allow compiling extension modules with -Wswitch-enum on gcc.
  Initial patch by Floris Bruynooghe.

- Issue #10227: Add an allocation cache for a single slice object.  Patch by
  Stefan Behnel.

- Issue #13393: BufferedReader.read1() now asks the full requested size to
  the raw stream instead of limiting itself to the buffer size.

- Issue #13392: Writing a pyc file should now be atomic under Windows as well.

- Issue #13333: The UTF-7 decoder now accepts lone surrogates (the encoder
  already accepts them).

- Issue #13389: Full garbage collection passes now clear the freelists for
  list and dict objects.  They already cleared other freelists in the
  interpreter.

- Issue #13327: Remove the need for an explicit None as the second argument
  to os.utime, os.lutimes, os.futimes, os.futimens, os.futimesat, in
  order to update to the current time. Also added keyword argument
  handling to os.utimensat in order to remove the need for explicit None.

- Issue #13350: Simplify some C code by replacing most usages of
  PyUnicode_Format by PyUnicode_FromFormat.

- Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode
  error handler in interactive mode (when calling into PyOS_Readline()).

- Issue #9896: Add start, stop, and step attributes to range objects.

- Issue #13343: Fix a SystemError when a lambda expression uses a global
  variable in the default value of a keyword-only argument: ``lambda *,
  arg=GLOBAL_NAME: None``

- Issue #12797: Added custom opener parameter to builtin open() and
  FileIO.open().

- Issue #10519: Avoid unnecessary recursive function calls in
  setobject.c.

- Issue #10363: Deallocate global locks in Py_Finalize().

- Issue #13018: Fix reference leaks in error paths in dictobject.c.
  Patch by Suman Saha.

- Issue #13201: Define '==' and '!=' to compare range objects based on
  the sequence of values they define (instead of comparing based on
  object identity).

- Issue #1294232: In a few cases involving metaclass inheritance, the
  interpreter would sometimes invoke the wrong metaclass when building a new
  class object. These cases now behave correctly. Patch by Daniel Urban.

- Issue #12753: Add support for Unicode name aliases and named sequences.
  Both ``unicodedata.lookup()`` and '\N{...}' now resolve aliases,
  and ``unicodedata.lookup()`` resolves named sequences too.

- Issue #12170: The count(), find(), rfind(), index() and rindex() methods
  of bytes and bytearray objects now accept an integer between 0 and 255
  as their first argument.  Patch by Petri Lehtinen.

- Issue #12604: VTRACE macro expanded to no-op in _sre.c to avoid compiler
  warnings. Patch by Josh Triplett and Petri Lehtinen.

- Issue #12281: Rewrite the MBCS codec to handle correctly replace and ignore
  error handlers on all Windows versions. The MBCS codec is now supporting all
  error handlers, instead of only replace to encode and ignore to decode.

- Issue #13188: When called without an explicit traceback argument,
  generator.throw() now gets the traceback from the passed exception's
  ``__traceback__`` attribute.  Patch by Petri Lehtinen.

- Issue #13146: Writing a pyc file is now atomic under POSIX.

- Issue #7833: Extension modules built using distutils on Windows will no
  longer include a "manifest" to prevent them failing at import time in some
  embedded situations.

- PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.

- Add internal API for static strings (_Py_identifier et al.).

- Issue #13063: the Windows error ERROR_NO_DATA (numbered 232 and described
  as "The pipe is being closed") is now mapped to POSIX errno EPIPE
  (previously EINVAL).

- Issue #12911: Fix memory consumption when calculating the repr() of huge
  tuples or lists.

- PEP 393: flexible string representation. Thanks to Torsten Becker for the
  initial implementation, and Victor Stinner for various bug fixes.

- Issue #14081: The 'sep' and 'maxsplit' parameter to str.split, bytes.split,
  and bytearray.split may now be passed as keyword arguments.

- Issue #13012: The 'keepends' parameter to str.splitlines may now be passed
  as a keyword argument:  "my_string.splitlines(keepends=True)".  The same
  change also applies to bytes.splitlines and bytearray.splitlines.

- Issue #7732: Don't open a directory as a file anymore while importing a
  module. Ignore the directory if its name matches the module name (e.g.
  "__init__.py") and raise an ImportError instead.

- Issue #13021: Missing decref on an error path.  Thanks to Suman Saha for
  finding the bug and providing a patch.

- Issue #12973: Fix overflow checks that relied on undefined behaviour in
  list_repeat (listobject.c) and islice_next (itertoolsmodule.c).  These bugs
  caused test failures with recent versions of Clang.

- Issue #12904: os.utime, os.futimes, os.lutimes, and os.futimesat now write
  atime and mtime with nanosecond precision on modern POSIX platforms.

- Issue #12802: the Windows error ERROR_DIRECTORY (numbered 267) is now
  mapped to POSIX errno ENOTDIR (previously EINVAL).

- Issue #9200: The str.is* methods now work with strings that contain non-BMP
  characters even in narrow Unicode builds.

- Issue #12791: Break reference cycles early when a generator exits with
  an exception.

- Issue #12773: Make __doc__ mutable on user-defined classes.

- Issue #12766: Raise a ValueError when creating a class with a class variable
  that conflicts with a name in __slots__.

- Issue #12266: Fix str.capitalize() to correctly uppercase/lowercase
  titlecased and cased non-letter characters.

- Issue #12732: In narrow unicode builds, allow Unicode identifiers which fall
  outside the BMP.

- Issue #12575: Validate user-generated AST before it is compiled.

- Make type(None), type(Ellipsis), and type(NotImplemented) callable. They
  return the respective singleton instances.

- Forbid summing bytes with sum().

- Verify the types of AST strings and identifiers provided by the user before
  compiling them.

- Issue #12647: The None object now has a __bool__() method that returns False.
  Formerly, bool(None) returned False only because of special case logic
  in PyObject_IsTrue().

- Issue #12579: str.format_map() now raises a ValueError if used on a
  format string that contains positional fields. Initial patch by
  Julian Berman.

- Issue #10271: Allow warnings.showwarning() be any callable.

- Issue #11627: Fix segfault when __new__ on an exception returns a
  non-exception class.

- Issue #12149: Update the method cache after a type's dictionary gets
  cleared by the garbage collector.  This fixes a segfault when an instance
  and its type get caught in a reference cycle, and the instance's
  deallocator calls one of the methods on the type (e.g. when subclassing
  IOBase).  Diagnosis and patch by Davide Rizzo.

- Issue #9611, Issue #9015: FileIO.read() clamps the length to INT_MAX on Windows.

- Issue #9642: Uniformize the tests on the availability of the mbcs codec, add
  a new HAVE_MBCS define.

- Issue #9642: Fix filesystem encoding initialization: use the ANSI code page
  on Windows if the mbcs codec is not available, and fail with a fatal error if
  we cannot get the locale encoding (if nl_langinfo(CODESET) is not available)
  instead of using UTF-8.

- When a generator yields, do not retain the caller's exception state on the
  generator.

- Issue #12475: Prevent generators from leaking their exception state into the
  caller's frame as they return for the last time.

- Issue #12291: You can now load multiple marshalled objects from a stream,
  with other data interleaved between marshalled objects.

- Issue #12356: When required positional or keyword-only arguments are not
  given, produce an informative error message which includes the name(s) of the
  missing arguments.

- Issue #12370: Fix super with no arguments when __class__ is overridden in the
  class body.

- Issue #12084: os.stat on Windows now works properly with relative symbolic
  links when called from any directory.

- Loosen type restrictions on the __dir__ method. __dir__ can now return any
  sequence, which will be converted to a list and sorted by dir().

- Issue #12265: Make error messages produced by passing an invalid set of
  arguments to a function more informative.

- Issue #12225: Still allow Python to build if Python is not in its hg repo or
  mercurial is not installed.

- Issue #1195: my_fgets() now always clears errors before calling fgets(). Fix
  the following case: sys.stdin.read() stopped with CTRL+d (end of file),
  raw_input() interrupted by CTRL+c.

- Issue #12216: Allow unexpected EOF errors to happen on any line of the file.

- Issue #12199: The TryExcept and TryFinally and AST nodes have been unified
  into a Try node.

- Issue #9670: Increase the default stack size for secondary threads on
  Mac OS X and FreeBSD to reduce the chances of a crash instead of a
  "maximum recursion depth" RuntimeError exception.
  (patch by Ronald Oussoren)

- Issue #12106: The use of the multiple-with shorthand syntax is now reflected
  in the AST.

- Issue #12190: Try to use the same filename object when compiling unmarshalling
  a code objects in the same file.

- Issue #12166: Move implementations of dir() specialized for various types into
  the __dir__() methods of those types.

- Issue #5715: In socketserver, close the server socket in the child process.

- Correct lookup of __dir__ on objects. Among other things, this causes errors
  besides AttributeError found on lookup to be propagated.

- Issue #12060: Use sig_atomic_t type and volatile keyword in the signal
  module. Patch written by Charles-François Natali.

- Issue #1746656: Added the if_nameindex, if_indextoname, if_nametoindex
  methods to the socket module.

- Issue #12044: Fixed subprocess.Popen when used as a context manager to
  wait for the process to end when exiting the context to avoid unintentionally
  leaving zombie processes around.

- Issue #1195: Fix input() if it is interrupted by CTRL+d and then CTRL+c,
  clear the end-of-file indicator after CTRL+d.

- Issue #1856: Avoid crashes and lockups when daemon threads run while the
  interpreter is shutting down; instead, these threads are now killed when
  they try to take the GIL.

- Issue #9756: When calling a method descriptor or a slot wrapper descriptor,
  the check of the object type doesn't read the __class__ attribute anymore.
  Fix a crash if a class override its __class__ attribute (e.g. a proxy of the
  str type). Patch written by Andreas Stührk.

- Issue #10517: After fork(), reinitialize the TLS used by the PyGILState_*
  APIs, to avoid a crash with the pthread implementation in RHEL 5.  Patch
  by Charles-François Natali.

- Issue #10914: Initialize correctly the filesystem codec when creating a new
  subinterpreter to fix a bootstrap issue with codecs implemented in Python, as
  the ISO-8859-15 codec.

- Issue #11918: OS/2 and VMS are no more supported because of the lack of
  maintainer.

- Issue #6780: fix starts/endswith error message to mention that tuples are
  accepted too.

- Issue #5057: fix a bug in the peepholer that led to non-portable pyc files
  between narrow and wide builds while optimizing BINARY_SUBSCR on non-BMP
  chars (e.g. "\U00012345"[0]).

- Issue #11845: Fix typo in rangeobject.c that caused a crash in
  compute_slice_indices.  Patch by Daniel Urban.

- Issue #5673: Added a `timeout` keyword argument to subprocess.Popen.wait,
  subprocess.Popen.communicated, subprocess.call, subprocess.check_call, and
  subprocess.check_output.  If the blocking operation takes more than `timeout`
  seconds, the `subprocess.TimeoutExpired` exception is raised.

- Issue #11650: PyOS_StdioReadline() retries fgets() if it was interrupted
  (EINTR), for example if the program is stopped with CTRL+z on Mac OS X. Patch
  written by Charles-Francois Natali.

- Issue #9319: Include the filename in "Non-UTF8 code ..." syntax error.

- Issue #10785: Store the filename as Unicode in the Python parser.

- Issue #11619: _PyImport_LoadDynamicModule() doesn't encode the path to bytes
  on Windows.

- Issue #10998: Remove mentions of -Q, sys.flags.division_warning and
  Py_DivisionWarningFlag left over from Python 2.

- Issue #11244: Remove an unnecessary peepholer check that was preventing
  negative zeros from being constant-folded properly.

- Issue #11395: io.FileIO().write() clamps the data length to 32,767 bytes on
  Windows if the file is a TTY to workaround a Windows bug. The Windows console
  returns an error (12: not enough space error) on writing into stdout if
  stdout mode is binary and the length is greater than 66,000 bytes (or less,
  depending on heap usage).

- Issue #11320: fix bogus memory management in Modules/getpath.c, leading to
  a possible crash when calling Py_SetPath().

- Issue #11432: A bug was introduced in subprocess.Popen on posix systems with
  3.2.0 where the stdout or stderr file descriptor being the same as the stdin
  file descriptor would raise an exception. webbrowser.open would fail. fixed.

- Issue #9856: Change object.__format__ with a non-empty format string
  to be a DeprecationWarning. In 3.2 it was a PendingDeprecationWarning.
  In 3.4 it will be a TypeError.

- Issue #11244: The peephole optimizer is now able to constant-fold
  arbitrarily complex expressions.  This also fixes a 3.2 regression where
  operations involving negative numbers were not constant-folded.

- Issue #11450: Don't truncate hg version info in Py_GetBuildInfo() when
  there are many tags (e.g. when using mq).  Patch by Nadeem Vawda.

- Issue #11335: Fixed a memory leak in list.sort when the key function
  throws an exception.

- Issue #8923: When a string is encoded to UTF-8 in strict mode, the result is
  cached into the object. Examples: str.encode(), str.encode('utf-8'),
  PyUnicode_AsUTF8String() and PyUnicode_AsEncodedString(unicode, "utf-8",
  NULL).

- Issue #10829: Refactor PyUnicode_FromFormat(), use the same function to parse
  the format string in the 3 steps, fix crashes on invalid format strings.

- Issue #13007: whichdb should recognize gdbm 1.9 magic numbers.

- Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
  a buffer struct having a NULL data pointer.

- Issue #11272: On Windows, input() strips '\r' (and not only '\n'), and
  sys.stdin uses universal newline (replace '\r\n' by '\n').

- Issue #11828: startswith and endswith now accept None as slice index.
  Patch by Torsten Becker.

- Issue #11168: Remove filename debug variable from PyEval_EvalFrameEx().
  It encoded the Unicode filename to UTF-8, but the encoding fails on
  undecodable filename (on surrogate characters) which raises an unexpected
  UnicodeEncodeError on recursion limit.

- Issue #11187: Remove bootstrap code (use ASCII) of
  PyUnicode_AsEncodedString(), it was replaced by a better fallback (use the
  locale encoding) in PyUnicode_EncodeFSDefault().

- Check for NULL result in PyType_FromSpec.

- Issue #10516: New copy() and clear() methods for lists and bytearrays.

- Issue #11386: bytearray.pop() now throws IndexError when the bytearray is
  empty, instead of OverflowError.

- Issue #12380: The rjust, ljust and center methods of bytes and bytearray
  now accept a bytearray argument.

Library
-------

- Issue #14195: An issue that caused weakref.WeakSet instances to incorrectly
  return True for a WeakSet instance 'a' in both 'a < a' and 'a > a' has been
  fixed.

- Issue #14166: Pickler objects now have an optional ``dispatch_table``
  attribute which allows setting custom per-pickler reduction functions.
  Patch by sbt.

- Issue #14177: marshal.loads() now raises TypeError when given a unicode
  string.  Patch by Guilherme Gonçalves.

- Issue #13550: Remove the debug machinery from the threading module: remove
  verbose arguments from all threading classes and functions.

- Issue #14159: Fix the len() of weak containers (WeakSet, WeakKeyDictionary,
  WeakValueDictionary) to return a better approximation when some objects
  are dead or dying.  Moreover, the implementation is now O(1) rather than
  O(n).

- Issue #11841: Fix comparison bug with 'rc' versions in packaging.version.
  Patch by Filip Gruszczyński.

- Issue #6884: Fix long-standing bugs with MANIFEST.in parsing in distutils
  on Windows.  Also fixed in packaging.

- Issue #8033: sqlite3: Fix 64-bit integer handling in user functions
  on 32-bit architectures. Initial patch by Philippe Devalkeneer.

- HTMLParser is now able to handle slashes in the start tag.

- Issue #13641: Decoding functions in the base64 module now accept ASCII-only
  unicode strings.  Patch by Catalin Iacob.

- Issue #14043: Speed up importlib's _FileFinder by at least 8x, and add a
  new importlib.invalidate_caches() function.

- Issue #14001: CVE-2012-0845: xmlrpc: Fix an endless loop in
  SimpleXMLRPCServer upon malformed POST request.

- Issue #13961: Move importlib over to using os.replace() for atomic renaming.

- Do away with ambiguous level values (as suggested by PEP 328) in
  importlib.__import__() by raising ValueError when level < 0.

- Issue #2489: pty.spawn could consume 100% cpu when it encountered an EOF.

- Issue #13014: Fix a possible reference leak in SSLSocket.getpeercert().

- Issue #13777: Add PF_SYSTEM sockets on OS X.
  Patch by Michael Goderbauer.

- Issue #13015: Fix a possible reference leak in defaultdict.__repr__.
  Patch by Suman Saha.

- Issue #1326113: distutils' and packaging's build_ext commands option now
  correctly parses multiple values (separated by whitespace or commas) given
  to their --libraries option.

- Issue #10287: nntplib now queries the server's CAPABILITIES first before
  sending MODE READER, and only sends it if not already in READER mode.
  Patch by Hynek Schlawack.

- Issue #13993: HTMLParser is now able to handle broken end tags when
  strict=False.

- Issue #13930: lib2to3 now supports writing converted output files to another
  directory tree as well as copying unchanged files and altering the file
  suffix.

- Issue #9750: Fix sqlite3.Connection.iterdump on tables and fields
  with a name that is a keyword or contains quotes. Patch by Marko
  Kohtala.

- Issue #10287: nntplib now queries the server's CAPABILITIES again after
  authenticating (since the result may change, according to RFC 4643).
  Patch by Hynek Schlawack.

- Issue #13590: On OS X 10.7 and 10.6 with Xcode 4.2, building
  Distutils-based packages with C extension modules may fail because
  Apple has removed gcc-4.2, the version used to build python.org
  64-bit/32-bit Pythons.  If the user does not explicitly override
  the default C compiler by setting the CC environment variable,
  Distutils will now attempt to compile extension modules with clang
  if gcc-4.2 is required but not found. Also as a convenience, if
  the user does explicitly set CC, substitute its value as the default
  compiler in the Distutils LDSHARED configuration variable for OS X.
  (Note, the python.org 32-bit-only Pythons use gcc-4.0 and the 10.4u
  SDK, neither of which are available in Xcode 4.  This change does not
  attempt to override settings to support their use with Xcode 4.)

- Issue #13960: HTMLParser is now able to handle broken comments when
  strict=False.

- When '' is a path (e.g. in sys.path), make sure __file__ uses the current
  working directory instead of '' in importlib.

- Issue #13609: Add two functions to query the terminal size:
  os.get_terminal_size (low level) and shutil.get_terminal_size (high level).
  Patch by Zbigniew Jędrzejewski-Szmek.

- Issue #13845: On Windows, time.time() now uses GetSystemTimeAsFileTime()
  instead of ftime() to have a resolution of 100 ns instead of 1 ms (the clock
  accuracy is between 0.5 ms and 15 ms).

- Issue #13846: Add time.monotonic(), monotonic clock.

- Issue #8184: multiprocessing: On Windows, don't set SO_REUSEADDR on
  Connection sockets, and set FILE_FLAG_FIRST_PIPE_INSTANCE on named pipes, to
  make sure two listeners can't bind to the same socket/pipe (or any existing
  socket/pipe).

- Issue #10811: Fix recursive usage of cursors. Instead of crashing,
  raise a ProgrammingError now.

- Issue #13734: Add os.fwalk(), a directory walking function yielding file
  descriptors.

- Issue #2945: Make the distutils upload command aware of bdist_rpm products.

- Issue #13712: pysetup create should not convert package_data to extra_files.

- Issue #11805: package_data in setup.cfg should allow more than one value.

- Issue #13676: Handle strings with embedded zeros correctly in sqlite3.

- Issue #8828: Add new function os.replace(), for cross-platform renaming
  with overwriting.

- Issue #13848: open() and the FileIO constructor now check for NUL
  characters in the file name.  Patch by Hynek Schlawack.

- Issue #13806: The size check in audioop decompression functions was too
  strict and could reject valid compressed data.  Patch by Oleg Plakhotnyuk.

- Issue #13812: When a multiprocessing Process child raises an exception,
  flush stderr after printing the exception traceback.

- Issue #13885: CVE-2011-3389: the _ssl module would always disable the CBC
  IV attack countermeasure.

- Issue #13847: time.localtime() and time.gmtime() now raise an OSError instead
  of ValueError on failure. time.ctime() and time.asctime() now raises an
  OSError if localtime() failed. time.clock() now raises a RuntimeError if the
  processor time used is not available or its value cannot be represented

- Issue #13772: In os.symlink() under Windows, do not try to guess the link
  target's type (file or directory).  The detection was buggy and made the
  call non-atomic (therefore prone to race conditions).

- Issue #6631: Disallow relative file paths in urllib urlopen methods.

- Issue #13722: Avoid silencing ImportErrors when initializing the codecs
  registry.

- Issue #13781: Fix GzipFile bug that caused an exception to be raised when
  opening for writing using a fileobj returned by os.fdopen().

- Issue #13803: Under Solaris, distutils doesn't include bitness
  in the directory name.

- Issue #10278: Add time.wallclock() function, monotonic clock.

- Issue #13809: Fix regression where bz2 module wouldn't work when threads are
  disabled. Original patch by Amaury Forgeot d'Arc.

- Issue #13589: Fix some serialization primitives in the aifc module.
  Patch by Oleg Plakhotnyuk.

- Issue #13642: Unquote before b64encoding user:password during Basic
  Authentication. Patch contributed by Joonas Kuorilehto.

- Issue #12364: Fix a hang in concurrent.futures.ProcessPoolExecutor.
  The hang would occur when retrieving the result of a scheduled future after
  the executor had been shut down.

- Issue #13502: threading: Fix a race condition in Event.wait() that made it
  return False when the event was set and cleared right after.

- Issue #9993: When the source and destination are on different filesystems,
  and the source is a symlink, shutil.move() now recreates a symlink on the
  destination instead of copying the file contents.  Patch by Jonathan Niehof
  and Hynek Schlawack.

- Issue #12926: Fix a bug in tarfile's link extraction.

- Issue #13696: Fix the 302 Relative URL Redirection problem.

- Issue #13636: Weak ciphers are now disabled by default in the ssl module
  (except when SSLv2 is explicitly asked for).

- Issue #12715: Add an optional symlinks argument to shutil functions
  (copyfile, copymode, copystat, copy, copy2).  When that parameter is
  true, symlinks aren't dereferenced and the operation instead acts on the
  symlink itself (or creates one, if relevant).  Patch by Hynek Schlawack.

- Add a flags parameter to select.epoll.

- Issue #13626: Add support for SSL Diffie-Hellman key exchange, through the
  SSLContext.load_dh_params() method and the ssl.OP_SINGLE_DH_USE option.

- Issue #11006: Don't issue low level warning in subprocess when pipe2() fails.

- Issue #13620: Support for Chrome browser in webbrowser.  Patch contributed
  by Arnaud Calmettes.

- Issue #11829: Fix code execution holes in inspect.getattr_static for
  metaclasses with metaclasses. Patch by Andreas Stührk.

- Issue #12708: Add starmap() and starmap_async() methods (similar to
  itertools.starmap()) to multiprocessing.Pool.  Patch by Hynek Schlawack.

- Issue #1785: Fix inspect and pydoc with misbehaving descriptors.

- Issue #13637: "a2b" functions in the binascii module now accept ASCII-only
  unicode strings.

- Issue #13634: Add support for querying and disabling SSL compression.

- Issue #13627: Add support for SSL Elliptic Curve-based Diffie-Hellman
  key exchange, through the SSLContext.set_ecdh_curve() method and the
  ssl.OP_SINGLE_ECDH_USE option.

- Issue #13635: Add ssl.OP_CIPHER_SERVER_PREFERENCE, so that SSL servers
  choose the cipher based on their own preferences, rather than on the
  client's.

- Issue #11813: Fix inspect.getattr_static for modules. Patch by Andreas
  Stührk.

- Issue #7502: Fix equality comparison for DocTestCase instances.  Patch by
  Cédric Krier.

- Issue #11870: threading: Properly reinitialize threads internal locks and
  condition variables to avoid deadlocks in child processes.

- Issue #8035: urllib: Fix a bug where the client could remain stuck after a
  redirection or an error.

- Issue #13560: os.strerror() now uses the current locale encoding instead of
  UTF-8.

- Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
  encoding and the surrogateescape error handler, rather than UTF-8.  Patch
  by David Watson.

- Issue #10350: Read and save errno before calling a function which might
  overwrite it.  Original patch by Hallvard B Furuseth.

- Issue #11610: Introduce a more general way to declare abstract properties.

- Issue #13591: A bug in importlib has been fixed that caused import_module
  to load a module twice.

- Issue #13449: sched.scheduler.run() method has a new "blocking" parameter which
  when set to False makes run() execute the scheduled events due to expire
  soonest (if any) and then return.  Patch by Giampaolo Rodolà.

- Issue #8684: sched.scheduler class can be safely used in multi-threaded
  environments.  Patch by Josiah Carlson and Giampaolo Rodolà.

- Alias resource.error to OSError ala PEP 3151.

- Issue #5689: Add support for lzma compression to the tarfile module.

- Issue #13248: Turn 3.2's PendingDeprecationWarning into 3.3's
  DeprecationWarning.  It covers 'cgi.escape', 'importlib.abc.PyLoader',
  'importlib.abc.PyPycLoader', 'nntplib.NNTP.xgtitle', 'nntplib.NNTP.xpath',
  and private attributes of 'smtpd.SMTPChannel'.

- Issue #5905, Issue #13560: time.strftime() is now using the current locale
  encoding, instead of UTF-8, if the wcsftime() function is not available.

- Issue #13464: Add a readinto() method to http.client.HTTPResponse.  Patch
  by Jon Kuhn.

- tarfile.py: Correctly detect bzip2 compressed streams with blocksizes
  other than 900k.

- Issue #13439: Fix many errors in turtle docstrings.

- Issue #6715: Add a module 'lzma' for compression using the LZMA algorithm.
  Thanks to Per Øyvind Karlsen for the initial implementation.

- Issue #13487: Make inspect.getmodule robust against changes done to
  sys.modules while it is iterating over it.

- Issue #12618: Fix a bug that prevented py_compile from creating byte
  compiled files in the current directory.  Initial patch by Sjoerd de Vries.

- Issue #13444: When stdout has been closed explicitly, we should not attempt
  to flush it at shutdown and print an error.

- Issue #12567: The curses module uses Unicode functions for Unicode arguments
  when it is linked to the ncurses library. It encodes also Unicode strings to
  the locale encoding instead of UTF-8.

- Issue #12856: Ensure child processes do not inherit the parent's random
  seed for filename generation in the tempfile module.  Patch by Brian
  Harring.

- Issue #9957: SpooledTemporaryFile.truncate() now accepts an optional size
  parameter, as other file-like objects.  Patch by Ryan Kelly.

- Issue #13458: Fix a memory leak in the ssl module when decoding a
  certificate with a subjectAltName.  Patch by Robert Xiao.

- Issue #13415: os.unsetenv() doesn't ignore errors anymore.

- Issue #13245: sched.scheduler class constructor's timefunc and
  delayfunct parameters are now optional.
  scheduler.enter and scheduler.enterabs methods gained a new kwargs parameter.
  Patch contributed by Chris Clark.

- Issue #12328: Under Windows, refactor handling of Ctrl-C events and
  make _multiprocessing.win32.WaitForMultipleObjects interruptible when
  the wait_flag parameter is false.  Patch by sbt.

- Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
  raised when the wrapped raw file is non-blocking and the write would block.
  Previous code assumed that the raw write() would raise BlockingIOError, but
  RawIOBase.write() is defined to returned None when the call would block.
  Patch by sbt.

- Issue #13358: HTMLParser now calls handle_data only once for each CDATA.

- Issue #4147: minidom's toprettyxml no longer adds whitespace around a text
  node when it is the only child of an element.  Initial patch by Dan
  Kenigsberg.

- Issue #13374: The Windows bytes API has been deprecated in the os module. Use
  Unicode filenames instead of bytes filenames to not depend on the ANSI code
  page anymore and to support any filename.

- Issue #13297: Use bytes type to send and receive binary data through XMLRPC.

- Issue #6397: Support "/dev/poll" polling objects in select module,
  under Solaris & derivatives.

- Issues #1745761, #755670, #13357, #12629, #1200313: HTMLParser now correctly
  handles non-valid attributes, including adjacent and unquoted attributes.

- Issue #13193: Fix distutils.filelist.FileList and packaging.manifest.Manifest
  under Windows.

- Issue #13384: Remove unnecessary __future__ import in Lib/random.py

- Issue #13149: Speed up append-only StringIO objects.

- Issue #13373: multiprocessing.Queue.get() could sometimes block indefinitely
  when called with a timeout.  Patch by Arnaud Ysmal.

- Issue #13254: Fix Maildir initialization so that maildir contents
  are read correctly.

- Issue #3067: locale.setlocale() now raises TypeError if the second
  argument is an invalid iterable. Its documentation and docstring
  were also updated. Initial patch by Jyrki Pulliainen.

- Issue #13140: Fix the daemon_threads attribute of ThreadingMixIn.

- Issue #13339: Fix compile error in posixmodule.c due to missing semicolon.
  Thanks to Robert Xiao.

- Byte compilation in packaging is now isolated from the calling Python -B or
  -O options, instead of being disallowed under -B or buggy under -O.

- Issue #10570: curses.putp() and curses.tparm() are now expecting a byte
  string, instead of a Unicode string.

- Issue #13295: http.server now produces valid HTML 4.01 strict.

- Issue #2892: preserve iterparse events in case of SyntaxError.

- Issue #13287: urllib.request and urllib.error now contains an __all__
  attribute to expose only relevant classes and functions.  Patch by Florent
  Xicluna.

- Issue #670664: Fix HTMLParser to correctly handle the content of
  ``<script>...</script>`` and ``<style>...</style>``.

- Issue #10817: Fix urlretrieve function to raise ContentTooShortError even
  when reporthook is None. Patch by Jyrki Pulliainen.

- Fix the xmlrpc.client user agent to return something similar to
  urllib.request user agent: "Python-xmlrpc/3.3".

- Issue #13293: Better error message when trying to marshal bytes using
  xmlrpc.client.

- Issue #13291: NameError in xmlrpc package.

- Issue #13258: Use callable() built-in in the standard library.

- Issue #13273: fix a bug that prevented HTMLParser to properly detect some
  tags when strict=False.

- Issue #11183: Add finer-grained exceptions to the ssl module, so that
  you don't have to inspect the exception's attributes in the common case.

- Issue #13216: Add cp65001 codec, the Windows UTF-8 (CP_UTF8).

- Issue #13226: Add RTLD_xxx constants to the os module. These constants can be
  used with sys.setdlopenflags().

- Issue #10278: Add clock_getres(), clock_gettime() and CLOCK_xxx constants to
  the time module. time.clock_gettime(time.CLOCK_MONOTONIC) provides a
  monotonic clock

- Issue #10332: multiprocessing: fix a race condition when a Pool is closed
  before all tasks have completed.

- Issue #13255: wrong docstrings in array module.

- Issue #8540: Remove deprecated Context._clamp attribute in Decimal module.

- Issue #13235: Added DeprecationWarning to logging.warn() method and function.

- Issue #9168: now smtpd is able to bind privileged port.

- Issue #12529: fix cgi.parse_header issue on strings with double-quotes and
  semicolons together. Patch by Ben Darnell and Petri Lehtinen.

- Issue #13227: functools.lru_cache() now has an option to distinguish
  calls with different argument types.

- Issue #6090: zipfile raises a ValueError when a document with a timestamp
  earlier than 1980 is provided. Patch contributed by Petri Lehtinen.

- Issue #13150: sysconfig no longer parses the Makefile and config.h files
  when imported, instead doing it at build time.  This makes importing
  sysconfig faster and reduces Python startup time by 20%.

- Issue #12448: smtplib now flushes stdout while running ``python -m smtplib``
  in order to display the prompt correctly.

- Issue #12454: The mailbox module is now using ASCII, instead of the locale
  encoding, to read and write .mh_sequences files.

- Issue #13194: zlib.compressobj().copy() and zlib.decompressobj().copy() are
  now available on Windows.

- Issue #1673007: urllib.request now supports HEAD request via new method argument.
  Patch contributions by David Stanek, Patrick Westerhoff and Ezio Melotti.

- Issue #12386: packaging does not fail anymore when writing the RESOURCES
  file.

- Issue #13158: Fix decoding and encoding of GNU tar specific base-256 number
  fields in tarfile.

- Issue #13025: mimetypes is now reading MIME types using the UTF-8 encoding,
  instead of the locale encoding.

- Issue #10653: On Windows, use strftime() instead of wcsftime() because
  wcsftime() doesn't format time zone correctly.

- Issue #13150: The tokenize module doesn't compile large regular expressions
  at startup anymore.

- Issue #11171: Fix distutils.sysconfig.get_makefile_filename when Python was
  configured with different prefix and exec-prefix.

- Issue #11254: Teach distutils and packaging to compile .pyc and .pyo files in
  PEP 3147-compliant __pycache__ directories.

- Issue #7367: Fix pkgutil.walk_paths to skip directories whose
  contents cannot be read.

- Issue #3163: The struct module gets new format characters 'n' and 'N'
  supporting C integer types ``ssize_t`` and ``size_t``, respectively.

- Issue #13099: Fix sqlite3.Cursor.lastrowid under a Turkish locale.
  Reported and diagnosed by Thomas Kluyver.

- Issue #13087: BufferedReader.seek() now always raises UnsupportedOperation
  if the underlying raw stream is unseekable, even if the seek could be
  satisfied using the internal buffer.  Patch by John O'Connor.

- Issue #7689: Allow pickling of dynamically created classes when their
  metaclass is registered with copyreg.  Patch by Nicolas M. Thiéry and Craig
  Citro.

- Issue #13034: When decoding some SSL certificates, the subjectAltName
  extension could be unreported.

- Issue #12306: Expose the runtime version of the zlib C library as a constant,
  ZLIB_RUNTIME_VERSION, in the zlib module. Patch by Torsten Landschoff.

- Issue #12959: Add collections.ChainMap to collections.__all__.

- Issue #8933: distutils' PKG-INFO files and packaging's METADATA files will
  now correctly report Metadata-Version: 1.1 instead of 1.0 if a Classifier or
  Download-URL field is present.

- Issue #12567: Add curses.unget_wch() function. Push a character so the next
  get_wch() will return it.

- Issue #9561: distutils and packaging now writes egg-info files using UTF-8,
  instead of the locale encoding.

- Issue #8286: The distutils command sdist will print a warning message instead
  of crashing when an invalid path is given in the manifest template.

- Issue #12841: tarfile unnecessarily checked the existence of numerical user
  and group ids on extraction. If one of them did not exist the respective id
  of the current user (i.e. root) was used for the file and ownership
  information was lost.

- Issue #12888: Fix a bug in HTMLParser.unescape that prevented it to escape
  more than 128 entities.  Patch by Peter Otten.

- Issue #12878: Expose a __dict__ attribute on io.IOBase and its subclasses.

- Issue #12494: On error, call(), check_call(), check_output() and
  getstatusoutput() functions of the subprocess module now kill the process,
  read its status (to avoid zombis) and close pipes.

- Issue #12720: Expose low-level Linux extended file attribute functions in os.

- Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
  now respect a --skip-build option given to bdist.  The packaging commands
  were fixed too.

- Issue #12847: Fix a crash with negative PUT and LONG_BINPUT arguments in
  the C pickle implementation.

- Issue #11564: Avoid crashes when trying to pickle huge objects or containers
  (more than 2**31 items).  Instead, in most cases, an OverflowError is raised.

- Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
  greater than FD_SETSIZE.

- Issue #12839: Fix crash in zlib module due to version mismatch.
  Fix by Richard M. Tew.

- Issue #9923: The mailcap module now correctly uses the platform path
  separator for the MAILCAP environment variable on non-POSIX platforms.

- Issue #12835: Follow up to #6560 that unconditionally prevents use of the
  unencrypted sendmsg/recvmsg APIs on SSL wrapped sockets. Patch by David
  Watson.

- Issue #12803: SSLContext.load_cert_chain() now accepts a password argument
  to be used if the private key is encrypted.  Patch by Adam Simpkins.

- Issue #11657: Fix sending file descriptors over 255 over a multiprocessing
  Pipe.

- Issue #12811: tabnanny.check() now promptly closes checked files. Patch by
  Anthony Briggs.

- Issue #6560: The sendmsg/recvmsg API is now exposed by the socket module
  when provided by the underlying platform, supporting processing of
  ancillary data in pure Python code. Patch by David Watson and Heiko Wundram.

- Issue #12326: On Linux, sys.platform doesn't contain the major version
  anymore. It is now always 'linux', instead of 'linux2' or 'linux3' depending
  on the Linux version used to build Python.

- Issue #12213: Fix a buffering bug with interleaved reads and writes that
  could appear on BufferedRandom streams.

- Issue #12778: Reduce memory consumption when JSON-encoding a large
  container of many small objects.

- Issue #12650: Fix a race condition where a subprocess.Popen could leak
  resources (FD/zombie) when killed at the wrong time.

- Issue #12744: Fix inefficient representation of integers between 2**31 and
  2**63 on systems with a 64-bit C "long".

- Issue #12646: Add an 'eof' attribute to zlib.Decompress, to make it easier to
  detect truncated input streams.

- Issue #11513: Fix exception handling ``tarfile.TarFile.gzopen()`` when
  the file cannot be opened.

- Issue #12687: Fix a possible buffering bug when unpickling text mode
  (protocol 0, mostly) pickles.

- Issue #10087: Fix the html output format of the calendar module.

- Issue #13121: add support for inplace math operators to collections.Counter.

- Add support for unary plus and unary minus to collections.Counter.

- Issue #12683: urlparse updated to include svn as schemes that uses relative
  paths. (svn from 1.5 onwards support relative path).

- Issue #12655: Expose functions from sched.h in the os module: sched_yield(),
  sched_setscheduler(), sched_getscheduler(), sched_setparam(),
  sched_get_min_priority(), sched_get_max_priority(), sched_rr_get_interval(),
  sched_getaffinity(), sched_setaffinity().

- Add ThreadError to threading.__all__.

- Issues #11104, #8688: Fix the behavior of distutils' sdist command with
  manually-maintained MANIFEST files.

- Issue #11281: smtplib.STMP gets source_address parameter, which adds the
  ability to bind to specific source address on a machine with multiple
  interfaces. Patch by Paulo Scardine.

- Issue #12464: tempfile.TemporaryDirectory.cleanup() should not follow
  symlinks: fix it. Patch by Petri Lehtinen.

- Issue #8887: "pydoc somebuiltin.somemethod" (or help('somebuiltin.somemethod')
  in Python code) now finds the doc of the method.

- Issue #10968: Remove indirection in threading.  The public names (Event,
  Condition, etc.) used to be factory functions returning instances of hidden
  classes (_Event, _Condition, etc.), because (if Guido recalls correctly) this
  code pre-dates the ability to subclass extension types.  It is now possible
  to inherit from these classes, without having to import the private
  underscored names like multiprocessing did.

- Issue #9723: Add shlex.quote functions, to escape filenames and command
  lines.

- Issue #12603: Fix pydoc.synopsis() on files with non-negative st_mtime.

- Issue #12514: Use try/finally to assure the timeit module restores garbage
  collections when it is done.

- Issue #12607: In subprocess, fix issue where if stdin, stdout or stderr is
  given as a low fd, it gets overwritten.

- Issue #12576: Fix urlopen behavior on sites which do not send (or obfuscates)
  ``Connection: close`` header.

- Issue #12560: Build libpython.so on OpenBSD. Patch by Stefan Sperling.

- Issue #1813: Fix codec lookup under Turkish locales.

- Issue #12591: Improve support of "universal newlines" in the subprocess
  module: the piped streams can now be properly read from or written to.

- Issue #12591: Allow io.TextIOWrapper to work with raw IO objects (without
  a read1() method), and add a *write_through* parameter to mandate
  unbuffered writes.

- Issue #10883: Fix socket leaks in urllib.request when using FTP.

- Issue #12592: Make Python build on OpenBSD 5 (and future major releases).

- Issue #12372: POSIX semaphores are broken on AIX: don't use them.

- Issue #12551: Provide a get_channel_binding() method on SSL sockets so as
  to get channel binding data for the current SSL session (only the
  "tls-unique" channel binding is implemented).  This allows the implementation
  of certain authentication mechanisms such as SCRAM-SHA-1-PLUS.  Patch by
  Jacek Konieczny.

- Issue #665194: email.utils now has format_datetime and parsedate_to_datetime
  functions, allowing for round tripping of RFC2822 format dates.

- Issue #12571: Add a plat-linux3 directory mirroring the plat-linux2
  directory, so that "import DLFCN" and other similar imports work on
  Linux 3.0.

- Issue #7484: smtplib no longer puts <> around addresses in VRFY and EXPN
  commands; they aren't required and in fact postfix doesn't support that form.

- Issue #12273: Remove ast.__version__. AST changes can be accounted for by
  checking sys.version_info or sys._mercurial.

- Silence spurious "broken pipe" tracebacks when shutting down a
  ProcessPoolExecutor.

- Fix potential resource leaks in concurrent.futures.ProcessPoolExecutor
  by joining all queues and processes when shutdown() is called.

- Issue #11603: Fix a crash when __str__ is rebound as __repr__.  Patch by
  Andreas Stührk.

- Issue #11321: Fix a crash with multiple imports of the _pickle module when
  embedding Python.  Patch by Andreas Stührk.

- Issue #6755: Add get_wch() method to curses.window class. Patch by Iñigo
  Serna.

- Add cgi.closelog() function to close the log file.

- Issue #12502: asyncore: fix polling loop with AF_UNIX sockets.

- Issue #4376: ctypes now supports nested structures in an endian different than
  the parent structure. Patch by Vlad Riscutia.

- Raise ValueError when attempting to set the _CHUNK_SIZE attribute of a
  TextIOWrapper to a huge value, not TypeError.

- Issue #12504: Close file handles in a timely manner in packaging.database.
  This fixes a bug with the remove (uninstall) feature on Windows.

- Issues #12169 and #10510: Factor out code used by various packaging commands
  to make HTTP POST requests, and make sure it uses CRLF.

- Issue #12016: Multibyte CJK decoders now resynchronize faster. They only
  ignore the first byte of an invalid byte sequence. For example,
  b'\xff\n'.decode('gb2312', 'replace') gives '\ufffd\n' instead of '\ufffd'.

- Issue #12459: time.sleep() now raises a ValueError if the sleep length is
  negative, instead of an infinite sleep on Windows or raising an IOError on
  Linux for example, to have the same behaviour on all platforms.

- Issue #12451: pydoc: html_getfile() now uses tokenize.open() to support
  Python scripts using an encoding different than UTF-8 (read the coding cookie
  of the script).

- Issue #12493: subprocess: Popen.communicate() now also handles EINTR errors
  if the process has only one pipe.

- Issue #12467: warnings: fix a race condition if a warning is emitted at
  shutdown, if globals()['__file__'] is None.

- Issue #12451: pydoc: importfile() now opens the Python script in binary mode,
  instead of text mode using the locale encoding, to avoid encoding issues.

- Issue #12451: runpy: run_path() now opens the Python script in binary mode,
  instead of text mode using the locale encoding, to support other encodings
  than UTF-8 (scripts using the coding cookie).

- Issue #12451: xml.dom.pulldom: parse() now opens files in binary mode instead
  of the text mode (using the locale encoding) to avoid encoding issues.

- Issue #12147: Adjust the new-in-3.2 smtplib.send_message method for better
  conformance to the RFCs:  correctly handle Sender and Resent- headers.

- Issue #12352: Fix a deadlock in multiprocessing.Heap when a block is freed by
  the garbage collector while the Heap lock is held.

- Issue #12462: time.sleep() now immediately calls the (Python) signal handler
  if it is interrupted by a signal, instead of having to wait until the next
  instruction.

- Issue #12442: new shutil.disk_usage function, providing total, used and free
  disk space statistics.

- Issue #12451: The XInclude default loader of xml.etree now decodes files from
  UTF-8 instead of the locale encoding if the encoding is not specified. It now
  also opens XML files for the parser in binary mode instead of the text mode
  to avoid encoding issues.

- Issue #12451: doctest.debug_script() doesn't create a temporary file
  anymore to avoid encoding issues.

- Issue #12451: pydoc.synopsis() now reads the encoding cookie if available,
  to read the Python script from the right encoding.

- Issue #12451: distutils now opens the setup script in binary mode to read the
  encoding cookie, instead of opening it in UTF-8.

- Issue #9516: On Mac OS X, change Distutils to no longer globally attempt to
  check or set the MACOSX_DEPLOYMENT_TARGET environment variable for the
  interpreter process.  This could cause failures in non-Distutils subprocesses
  and was unreliable since tests or user programs could modify the interpreter
  environment after Distutils set it.  Instead, have Distutils set the
  deployment target only in the environment of each build subprocess.  It is
  still possible to globally override the default by setting
  MACOSX_DEPLOYMENT_TARGET before launching the interpreter; its value must be
  greater or equal to the default value, the value with which the interpreter
  was built.  Also, implement the same handling in packaging.

- Issue #12422: In the copy module, don't store objects that are their own copy
  in the memo dict.

- Issue #12303: Add sigwaitinfo() and sigtimedwait() to the signal module.

- Issue #12404: Remove C89 incompatible code from mmap module. Patch by Akira
  Kitada.

- Issue #1874: email now detects and reports as a defect the presence of
  any CTE other than 7bit, 8bit, or binary on a multipart.

- Issue #12383: Fix subprocess module with env={}: don't copy the environment
  variables, start with an empty environment.

- Issue #11637: Fix support for importing packaging setup hooks from the
  project directory.

- Issue #6771: Moved the curses.wrapper function from the single-function
  wrapper module into __init__, eliminating the module.  Since __init__ was
  already importing the function to curses.wrapper, there is no API change.

- Issue #11584: email.header.decode_header no longer fails if the header
  passed to it is a Header object, and Header/make_header no longer fail
  if given binary unknown-8bit input.

- Issue #11700: mailbox proxy object close methods can now be called multiple
  times without error.

- Issue #11767: Correct file descriptor leak in mailbox's __getitem__ method.

- Issue #12133: AbstractHTTPHandler.do_open() of urllib.request closes the HTTP
  connection if its getresponse() method fails with a socket error. Patch
  written by Ezio Melotti.

- Issue #12240: Allow multiple setup hooks in packaging's setup.cfg files.
  Original patch by Erik Bray.

- Issue #9284: Allow inspect.findsource() to find the source of doctest
  functions.

- Issue #11595: Fix assorted bugs in packaging.util.cfg_to_args, a
  compatibility helper for the distutils-packaging transition.  Original patch
  by Erik Bray.

- Issue #12287: In ossaudiodev, check that the device isn't closed in several
  methods.

- Issue #12009: Fixed regression in netrc file comment handling.

- Issue #12246: Warn and fail when trying to install a third-party project from
  an uninstalled Python (built in a source checkout).  Original patch by
  Tshepang Lekhonkhobe.

- Issue #10694: zipfile now ignores garbage at the end of a zipfile.

- Issue #12283: Fixed regression in smtplib quoting of leading dots in DATA.

- Issue #10424: Argparse now includes the names of the missing required
  arguments in the missing arguments error message.

- Issue #12168: SysLogHandler now allows NUL termination to be controlled using
  a new 'append_nul' attribute on the handler.

- Issue #11583: Speed up os.path.isdir on Windows by using GetFileAttributes
  instead of os.stat.

- Issue #12021: Make mmap's read() method argument optional. Patch by Petri
  Lehtinen.

- Issue #9205: concurrent.futures.ProcessPoolExecutor now detects killed
  children and raises BrokenProcessPool in such a situation.  Previously it
  would reliably freeze/deadlock.

- Issue #12040: Expose a new attribute ``sentinel`` on instances of
  ``multiprocessing.Process``.  Also, fix Process.join() to not use polling
  anymore, when given a timeout.

- Issue #11893: Remove obsolete internal wrapper class ``SSLFakeFile`` in the
  smtplib module.  Patch by Catalin Iacob.

- Issue #12080: Fix a Decimal.power() case that took an unreasonably long time
  to compute.

- Issue #12221: Remove __version__ attributes from pyexpat, pickle, tarfile,
  pydoc, tkinter, and xml.parsers.expat. This were useless version constants
  left over from the Mercurial transition

- Named tuples now work correctly with vars().

- Issue #12085: Fix an attribute error in subprocess.Popen destructor if the
  constructor has failed, e.g. because of an undeclared keyword argument. Patch
  written by Oleg Oshmyan.

- Issue #12028: Make threading._get_ident() public, rename it to
  threading.get_ident() and document it. This function was already used using
  _thread.get_ident().

- Issue #12171: IncrementalEncoder.reset() of CJK codecs (multibytecodec) calls
  encreset() instead of decreset().

- Issue #12218: Removed wsgiref.egg-info.

- Issue #12196: Add pipe2() to the os module.

- Issue #985064: Make plistlib more resilient to faulty input plists.
  Patch by Mher Movsisyan.

- Issue #1625: BZ2File and bz2.decompress() now support multi-stream files.
  Initial patch by Nir Aides.

- Issue #12175: BufferedReader.read(-1) now calls raw.readall() if available.

- Issue #12175: FileIO.readall() now only reads the file position and size
  once.

- Issue #12175: RawIOBase.readall() now returns None if read() returns None.

- Issue #12175: FileIO.readall() now raises a ValueError instead of an IOError
  if the file is closed.

- Issue #11109: New service_action method for BaseServer, used by ForkingMixin
  class for cleanup. Initial Patch by Justin Warkentin.

- Issue #12045: Avoid duplicate execution of command in
  ctypes.util._get_soname().  Patch by Sijin Joseph.

- Issue #10818: Remove the Tk GUI and the serve() function of the pydoc module,
  pydoc -g has been deprecated in Python 3.2 and it has a new enhanced web
  server.

- Issue #1441530: In imaplib, read the data in one chunk to speed up large
  reads and simplify code.

- Issue #12070: Fix the Makefile parser of the sysconfig module to handle
  correctly references to "bogus variable" (e.g. "prefix=$/opt/python").

- Issue #12100: Don't reset incremental encoders of CJK codecs at each call to
  their encode() method anymore, but continue to call the reset() method if the
  final argument is True.

- Issue #12049: Add RAND_bytes() and RAND_pseudo_bytes() functions to the ssl
  module.

- Issue #6501: os.device_encoding() returns None on Windows if the application
  has no console.

- Issue #12105: Add O_CLOEXEC to the os module.

- Issue #12079: Decimal('Infinity').fma(Decimal('0'), (3.91224318126786e+19+0j))
  now raises TypeError (reflecting the invalid type of the 3rd argument) rather
  than Decimal.InvalidOperation.

- Issue #12124: zipimport doesn't keep a reference to zlib.decompress() anymore
  to be able to unload the module.

- Add the packaging module, an improved fork of distutils (also known as
  distutils2).

- Issue #12065: connect_ex() on an SSL socket now returns the original errno
  when the socket's timeout expires (it used to return None).

- Issue #8809: The SMTP_SSL constructor and SMTP.starttls() now support
  passing a ``context`` argument pointing to an ssl.SSLContext instance.
  Patch by Kasun Herath.

- Issue #9516: Issue #9516: avoid errors in sysconfig when MACOSX_DEPLOYMENT_TARGET
  is set in shell.

- Issue #8650: Make zlib module 64-bit clean. compress(), decompress() and
  their incremental counterparts now raise OverflowError if given an input
  larger than 4GB, instead of silently truncating the input and returning
  an incorrect result.

- Issue #12050: zlib.decompressobj().decompress() now clears the unconsumed_tail
  attribute when called without a max_length argument.

- Issue #12062: Fix a flushing bug when doing a certain type of I/O sequence
  on a file opened in read+write mode (namely: reading, seeking a bit forward,
  writing, then seeking before the previous write but still within buffered
  data, and writing again).

- Issue #9971: Write an optimized implementation of BufferedReader.readinto().
  Patch by John O'Connor.

- Issue #11799: urllib.request Authentication Handlers will raise a ValueError
  when presented with an unsupported Authentication Scheme. Patch contributed
  by Yuval Greenfield.

- Issue #10419, #6011: build_scripts command of distutils handles correctly
  non-ASCII path (path to the Python executable). Open and write the script in
  binary mode, but ensure that the shebang is decodable from UTF-8 and from the
  encoding of the script.

- Issue #8498: In socket.accept(), allow specifying 0 as a backlog value in
  order to accept exactly one connection.  Patch by Daniel Evers.

- Issue #12011: signal.signal() and signal.siginterrupt() raise an OSError,
  instead of a RuntimeError: OSError has an errno attribute.

- Issue #3709: add a flush_headers method to BaseHTTPRequestHandler, which
  manages the sending of headers to output stream and flushing the internal
  headers buffer. Patch contribution by Andrew Schaaf

- Issue #11743: Rewrite multiprocessing connection classes in pure Python.

- Issue #11164: Stop trying to use _xmlplus in the xml module.

- Issue #11888: Add log2 function to math module. Patch written by Mark
  Dickinson.

- Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional.

- Issue #8407: The signal handler writes the signal number as a single byte
  instead of a nul byte into the wakeup file descriptor. So it is possible to
  wait more than one signal and know which signals were raised.

- Issue #8407: Add pthread_kill(), sigpending() and sigwait() functions to the
  signal module.

- Issue #11927: SMTP_SSL now uses port 465 by default as documented.  Patch
  by Kasun Herath.

- Issue #12002: ftplib's abort() method raises TypeError.

- Issue #11916: Add a number of MacOSX specific definitions to the errno module.
  Patch by Pierre Carrier.

- Issue #11999: fixed sporadic sync failure mailbox.Maildir due to its trying to
  detect mtime changes by comparing to the system clock instead of to the
  previous value of the mtime.

- Issue #11072: added MLSD command (RFC-3659) support to ftplib.

- Issue #8808: The IMAP4_SSL constructor now allows passing an SSLContext
  parameter to control parameters of the secure channel.  Patch by Sijin
  Joseph.

- ntpath.samefile failed to notice that "a.txt" and "A.TXT" refer to the same
  file on Windows XP. As noticed in issue #10684.

- Issue #12000: When a SSL certificate has a subjectAltName without any
  dNSName entry, ssl.match_hostname() should use the subject's commonName.
  Patch by Nicolas Bareil.

- Issue #10775: assertRaises, assertRaisesRegex, assertWarns, and
  assertWarnsRegex now accept a keyword argument 'msg' when used as context
  managers.  Initial patch by Winston Ewert.

- Issue #10684: shutil.move used to delete a folder on case insensitive
  filesystems when the source and destination name where the same except
  for the case.

- Issue #11647: objects created using contextlib.contextmanager now support
  more than one call to the function when used as a decorator. Initial patch
  by Ysj Ray.

- Issue #11930: Removed deprecated time.accept2dyear variable.
  Removed year >= 1000 restriction from datetime.strftime.

- logging: don't define QueueListener if Python has no thread support.

- functools.cmp_to_key() now works with collections.Hashable().

- Issue #11277: mmap.mmap() calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get
  around a mmap bug with sparse files. Patch written by Steffen Daode Nurpmeso.

- Issue #8407: Add signal.pthread_sigmask() function to fetch and/or change the
  signal mask of the calling thread.

- Issue #11858: configparser.ExtendedInterpolation expected lower-case section
  names.

- Issue #11324: ConfigParser(interpolation=None) now works correctly.

- Issue #11811: ssl.get_server_certificate() is now IPv6-compatible.  Patch
  by Charles-François Natali.

- Issue #11763: don't use difflib in TestCase.assertMultiLineEqual if the
  strings are too long.

- Issue #11236: getpass.getpass responds to ctrl-c or ctrl-z on terminal.

- Issue #11856: Speed up parsing of JSON numbers.

- Issue #11005: threading.RLock()._release_save() raises a RuntimeError if the
  lock was not acquired.

- Issue #11258: Speed up ctypes.util.find_library() under Linux by a factor
  of 5 to 10.  Initial patch by Jonas H.

- Issue #11382: Trivial system calls, such as dup() or pipe(), needn't
  release the GIL.  Patch by Charles-François Natali.

- Issue #11223: Add threading._info() function providing information about
  the thread implementation.

- Issue #11731: simplify/enhance email parser/generator API by introducing
  policy objects.

- Issue #11768: The signal handler of the signal module only calls
  Py_AddPendingCall() for the first signal to fix a deadlock on reentrant or
  parallel calls. PyErr_SetInterrupt() writes also into the wake up file.

- Issue #11492: fix several issues with header folding in the email package.

- Issue #11852: Add missing imports and update tests.

- Issue #11875: collections.OrderedDict's __reduce__ was temporarily
  mutating the object instead of just working on a copy.

- Issue #11467: Fix urlparse behavior when handling urls which contains scheme
  specific part only digits. Patch by Santoso Wijaya.

- collections.Counter().copy() now works correctly for subclasses.

- Issue #11474: Fix the bug with url2pathname() handling of '/C|/' on Windows.
  Patch by Santoso Wijaya.

- Issue #11684: complete email.parser bytes API by adding BytesHeaderParser.

- The bz2 module now handles 4GiB+ input buffers correctly.

- Issue #9233: Fix json.loads('{}') to return a dict (instead of a list), when
  _json is not available.

- Issue #11830: Remove unnecessary introspection code in the decimal module.

- Issue #11703: urllib2.geturl() does not return correct url when the original
  url contains #fragment.

- Issue #10019: Fixed regression in json module where an indent of 0 stopped
  adding newlines and acted instead like 'None'.

- Issue #11186: pydoc ignores a module if its name contains a surrogate
  character in the index of modules.

- Issue #11815: Use a light-weight SimpleQueue for the result queue in
  concurrent.futures.ProcessPoolExecutor.

- Issue #5162: Treat services like frozen executables to allow child spawning
  from multiprocessing.forking on Windows.

- logging.basicConfig now supports an optional 'handlers' argument taking an
  iterable of handlers to be added to the root logger. Additional parameter
  checks were also added to basicConfig.

- Issue #11814: Fix likely typo in multiprocessing.Pool._terminate().

- Issue #11747: Fix range formatting in difflib.context_diff() and
  difflib.unified_diff().

- Issue #8428: Fix a race condition in multiprocessing.Pool when terminating
  worker processes: new processes would be spawned while the pool is being
  shut down.  Patch by Charles-François Natali.

- Issue #2650: re.escape() no longer escapes the '_'.

- Issue #11757: select.select() now raises ValueError when a negative timeout
  is passed (previously, a select.error with EINVAL would be raised).  Patch
  by Charles-François Natali.

- Issue #7311: fix html.parser to accept non-ASCII attribute values.

- Issue #11605: email.parser.BytesFeedParser was incorrectly converting
  multipart subparts with an 8-bit CTE into unicode instead of preserving the
  bytes.

- Issue #1690608: email.util.formataddr is now RFC 2047 aware:  it now has a
  charset parameter that defaults to utf-8 and is used as the charset for RFC
  2047 encoding when the realname contains non-ASCII characters.

- Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.

- Issue #10791: Implement missing method GzipFile.read1(), allowing GzipFile
  to be wrapped in a TextIOWrapper.  Patch by Nadeem Vawda.

- Issue #11707: Added a fast C version of functools.cmp_to_key().
  Patch by Filip Gruszczyński.

- Issue #11688: Add sqlite3.Connection.set_trace_callback().  Patch by
  Torsten Landschoff.

- Issue #11746: Fix SSLContext.load_cert_chain() to accept elliptic curve
  private keys.

- Issue #5863: Rewrite BZ2File in pure Python, and allow it to accept
  file-like objects using a new ``fileobj`` constructor argument.  Patch by
  Nadeem Vawda.

- unittest.TestCase.assertSameElements has been removed.

- sys.getfilesystemencoding() raises a RuntimeError if initfsencoding() was not
  called yet: detect bootstrap (startup) issues earlier.

- Issue #11393: Add the new faulthandler module.

- Issue #11618: Fix the timeout logic in threading.Lock.acquire() under Windows.

- Removed the 'strict' argument to email.parser.Parser, which has been
  deprecated since Python 2.4.

- Issue #11256: Fix inspect.getcallargs on functions that take only keyword
  arguments.

- Issue #11696: Fix ID generation in msilib.

- itertools.accumulate now supports an optional *func* argument for
  a user-supplied binary function.

- Issue #11692: Remove unnecessary demo functions in subprocess module.

- Issue #9696: Fix exception incorrectly raised by xdrlib.Packer.pack_int when
  trying to pack a negative (in-range) integer.

- Issue #11675: multiprocessing.[Raw]Array objects created from an integer size
  are now zeroed on creation.  This matches the behaviour specified by the
  documentation.

- Issue #7639: Fix short file name generation in bdist_msi

- Issue #11635: Don't use polling in worker threads and processes launched by
  concurrent.futures.

- Issue #5845: Automatically read readline configuration to enable completion
  in interactive mode.

- Issue #6811: Allow importlib to change a code object's co_filename attribute
  to match the path to where the source code currently is, not where the code
  object originally came from.

- Issue #8754: Have importlib use the repr of a module name in error messages.

- Issue #11591: Prevent "import site" from modifying sys.path when python
  was started with -S.

- collections.namedtuple() now adds a _source attribute to the generated
  class.  This make the source more accessible than the outdated
  "verbose" option which prints to stdout but doesn't make the source
  string available.

- Issue #11371: Mark getopt error messages as localizable.  Patch by Filip
  Gruszczyński.

- Issue #11333: Add __slots__ to collections ABCs.

- Issue #11628: cmp_to_key generated class should use __slots__.

- Issue #11666: let help() display named tuple attributes and methods
  that start with a leading underscore.

- Issue #11662: Make urllib and urllib2 ignore redirections if the
  scheme is not HTTP, HTTPS or FTP (CVE-2011-1521).

- Issue #5537: Fix time2isoz() and time2netscape() functions of
  httplib.cookiejar for expiration year greater than 2038 on 32-bit systems.

- Issue #4391: Use proper gettext plural forms in optparse.

- Issue #11127: Raise a TypeError when trying to pickle a socket object.

- Issue #11563: ``Connection: close`` header is sent by requests using URLOpener
  class which helps in closing of sockets after connection is over. Patch
  contributions by Jeff McNeil and Nadeem Vawda.

- Issue #11459: A ``bufsize`` value of 0 in subprocess.Popen() really creates
  unbuffered pipes, such that select() works properly on them.

- Issue #5421: Fix misleading error message when one of socket.sendto()'s
  arguments has the wrong type.  Patch by Nikita Vetoshkin.

- Issue #10812: Add some extra posix functions to the os module.

- Issue #10979: unittest stdout buffering now works with class and module
  setup and teardown.

- Issue #11243: fix the parameter querying methods of Message to work if
  the headers contain un-encoded non-ASCII data.

- Issue #11401: fix handling of headers with no value; this fixes a regression
  relative to Python2 and the result is now the same as it was in Python2.

- Issue #9298: base64 bodies weren't being folded to line lengths less than 78,
  which was a regression relative to Python2.  Unlike Python2, the last line
  of the folded body now ends with a carriage return.

- Issue #11560: shutil.unpack_archive now correctly handles the format
  parameter. Patch by Evan Dandrea.

- Issue #5870: Add `subprocess.DEVNULL` constant.

- Issue #11133: fix two cases where inspect.getattr_static can trigger code
  execution. Patch by Andreas Stührk.

- Issue #11569: use absolute path to the sysctl command in multiprocessing to
  ensure that it will be found regardless of the shell PATH. This ensures
  that multiprocessing.cpu_count works on default installs of MacOSX.

- Issue #11501: distutils.archive_utils.make_zipfile no longer fails if zlib is
  not installed. Instead, the zipfile.ZIP_STORED compression is used to create
  the ZipFile. Patch by Natalia B. Bidart.

- Issue #11289: `smtp.SMTP` class is now a context manager so it can be used
  in a `with` statement.  Contributed by Giampaolo Rodola.

- Issue #11554: Fixed support for Japanese codecs; previously the body output
  encoding was not done if euc-jp or shift-jis was specified as the charset.

- Issue #11407: `TestCase.run` returns the result object used or created.
  Contributed by Janathan Hartley.

- Issue #11500: Fixed a bug in the OS X proxy bypass code for fully qualified
  IP addresses in the proxy exception list.

- Issue #11491: dbm.error is no longer raised when dbm.open is called with
  the "n" as the flag argument and the file exists. The behavior matches
  the documentation and general logic.

- Issue #1162477: Postel Principle adjustment to email date parsing: handle the
  fact that some non-compliant MUAs use '.' instead of ':' in time specs.

- Issue #11131: Fix sign of zero in decimal.Decimal plus and minus
  operations when the rounding mode is ROUND_FLOOR.

- Issue #9935: Speed up pickling of instances of user-defined classes.

- Issue #5622: Fix curses.wrapper to raise correct exception if curses
  initialization fails.

- Issue #11408: In threading.Lock.acquire(), only call gettimeofday() when
  really necessary.  Patch by Charles-François Natali.

- Issue #11391: Writing to a mmap object created with
  ``mmap.PROT_READ|mmap.PROT_EXEC`` would segfault instead of raising a
  TypeError.  Patch by Charles-François Natali.

- Issue #9795: add context management protocol support for nntplib.NNTP class.

- Issue #11306: mailbox in certain cases adapts to an inability to open
  certain files in read-write mode.  Previously it detected this by
  checking for EACCES, now it also checks for EROFS.

- Issue #11265: asyncore now correctly handles EPIPE, EBADF and EAGAIN errors
  on accept(), send() and recv().

- Issue #11377: Deprecate platform.popen() and reimplement it with os.popen().

- Issue #8513: On UNIX, subprocess supports bytes command string.

- Issue #10866: Add socket.sethostname().  Initial patch by Ross Lagerwall.

- Issue #11140: Lock.release() now raises a RuntimeError when attempting
  to release an unacquired lock, as claimed in the threading documentation.
  The _thread.error exception is now an alias of RuntimeError.  Patch by
  Filip Gruszczyński.  Patch for _dummy_thread by Aymeric Augustin.

- Issue #8594: ftplib now provides a source_address parameter to specify which
  (address, port) to bind to before connecting.

- Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
  and make it work for non-blocking connects.

- Issue #11297: Add collections.ChainMap().

- Issue #10755: Add the posix.flistdir() function.  Patch by Ross Lagerwall.

- Issue #4761: Add the ``*at()`` family of functions (openat(), etc.) to the
  posix module.  Patch by Ross Lagerwall.

- Issue #7322: Trying to read from a socket's file-like object after a timeout
  occurred now raises an error instead of silently losing data.

- Issue #11291: poplib.POP no longer suppresses errors on quit().

- Issue #11177: asyncore's create_socket() arguments can now be omitted.

- Issue #6064: Add a ``daemon`` keyword argument to the threading.Thread
  and multiprocessing.Process constructors in order to override the
  default behaviour of inheriting the daemonic property from the current
  thread/process.

- Issue #10956: Buffered I/O classes retry reading or writing after a signal
  has arrived and the handler returned successfully.

- Issue #10784: New os.getpriority() and os.setpriority() functions.

- Issue #11114: Fix catastrophic performance of tell() on text files (up
  to 1000x faster in some cases).  It is still one to two order of magnitudes
  slower than binary tell().

- Issue #10882: Add os.sendfile function.

- Issue #10868: Allow usage of the register method of an ABC as a class
  decorator.

- Issue #11224: Fixed a regression in tarfile that affected the file-like
  objects returned by TarFile.extractfile() regarding performance, memory
  consumption and failures with the stream interface.

- Issue #10924: Adding salt and Modular Crypt Format to crypt library.
  Moved old C wrapper to _crypt, and added a Python wrapper with
  enhanced salt generation and simpler API for password generation.

- Issue #11074: Make 'tokenize' so it can be reloaded.

- Issue #11085: Moved collections abstract base classes into a separate
  module called collections.abc, following the pattern used by importlib.abc.
  For backwards compatibility, the names are imported into the collections
  module.

- Issue #4681: Allow mmap() to work on file sizes and offsets larger than
  4GB, even on 32-bit builds.  Initial patch by Ross Lagerwall, adapted for
  32-bit Windows.

- Issue #11169: compileall module uses repr() to format filenames and paths to
  escape surrogate characters and show spaces.

- Issue #11089: Fix performance issue limiting the use of ConfigParser()
  with large config files.

- Issue #10276: Fix the results of zlib.crc32() and zlib.adler32() on buffers
  larger than 4GB.  Patch by Nadeem Vawda.

- Issue #11388: Added a clear() method to MutableSequence

- Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
  for the names of optional and positional arguments in help messages.

- Issue #9348: Raise an early error if argparse nargs and metavar don't match.

- Issue #9026: Fix order of argparse sub-commands in help messages.

- Issue #9347: Fix formatting for tuples in argparse type= error messages.

- Issue #12191: Added shutil.chown() to change user and/or group owner of a
  given path also specifying their names.

- Issue #13988: The _elementtree accelerator is used whenever available.
  Now xml.etree.cElementTree becomes a deprecated alias to ElementTree.

Build
-----

- Issue #6807: Run msisupport.mak earlier.

- Issue #10580: Minor grammar change in Windows installer.

- Issue #13326: Clean __pycache__ directories correctly on OpenBSD.

- PEP 393: the configure option --with-wide-unicode is removed.

- Issue #12852: Set _XOPEN_SOURCE to 700, instead of 600, to get POSIX 2008
  functions on OpenBSD (e.g. fdopendir).

- Issue #11863: Remove support for legacy systems deprecated in Python 3.2
  (following PEP 11).  These systems are systems using Mach C Threads,
  SunOS lightweight processes, GNU pth threads and IRIX threads.

- Issue #8746: Correct faulty configure checks so that os.chflags() and
  os.lchflags() are once again built on systems that support these
  functions (BSD and OS X).  Also add new stat file flags for OS X
  (UF_HIDDEN and UF_COMPRESSED).

- Issue #10645: Installing Python no longer creates a
  Python-X.Y.Z-pyX.Y.egg-info file in the lib-dynload directory.

- Do not accidentally include the directory containing sqlite.h twice when
  building sqlite3.

- Issue #11217: For 64-bit/32-bit Mac OS X universal framework builds,
  ensure "make install" creates symlinks in --prefix bin for the "-32"
  files in the framework bin directory like the installer does.

- Issue #11347: Use --no-as-needed when linking libpython3.so.

- Issue #11411: Fix 'make DESTDIR=' with a relative destination.

- Issue #11268: Prevent Mac OS X Installer failure if Documentation
  package had previously been installed.

- Issue #11495: OSF support is eliminated. It was deprecated in Python 3.2.

IDLE
----

- Issue #14409: IDLE now properly executes commands in the Shell window
  when it cannot read the normal config files on startup and
  has to use the built-in default key bindings.
  There was previously a bug in one of the defaults.

- IDLE can be launched as python -m idlelib

- Issue #3573: IDLE hangs when passing invalid command line args
  (directory(ies) instead of file(s)) (Patch by Guilherme Polo)

- Issue #14200: IDLE shell crash on printing non-BMP unicode character.

- Issue #5219: Prevent event handler cascade in IDLE.

- Issue #964437: Make IDLE help window non-modal.
  Patch by Guilherme Polo and Roger Serwy.

- Issue #13933: IDLE auto-complete did not work with some imported
  module, like hashlib.  (Patch by Roger Serwy)

- Issue #13506: Add '' to path for IDLE Shell when started and restarted with Restart Shell.
  Original patches by Marco Scataglini and Roger Serwy.

- Issue #4625: If IDLE cannot write to its recent file or breakpoint files,
  display a message popup and continue rather than crash.  Original patch by
  Roger Serwy.

- Issue #8641: Update IDLE 3 syntax coloring to recognize b".." and not u"..".
  Patch by Tal Einat.

- Issue #13296: Fix IDLE to clear compile __future__ flags on shell restart.
  (Patch by Roger Serwy)

- Issue #9871: Prevent IDLE 3 crash when given byte strings
  with invalid hex escape sequences, like b'\x0'.
  (Original patch by Claudiu Popa.)

- Issue #12636: IDLE reads the coding cookie when executing a Python script.

- Issue #12540: Prevent zombie IDLE processes on Windows due to changes
  in os.kill().

- Issue #12590: IDLE editor window now always displays the first line
  when opening a long file.  With Tk 8.5, the first line was hidden.

- Issue #11088: don't crash when using F5 to run a script in IDLE on MacOSX
  with Tk 8.5.

- Issue #1028: Tk returns invalid Unicode null in %A: UnicodeDecodeError.
  With Tk < 8.5 _tkinter.c:PythonCmd() raised UnicodeDecodeError, caused
  IDLE to exit.  Converted to valid Unicode null in PythonCmd().

- Issue #11718: IDLE's open module dialog couldn't find the __init__.py
  file in a package.

Tools/Demos
-----------

- Issue #14053: patchcheck.py ("make patchcheck") now works with MQ patches.
  Patch by Francisco Martín Brugué.

- Issue #13930: 2to3 is now able to write its converted output files to another
  directory tree as well as copying unchanged files and altering the file
  suffix.  See its new -o, -W and --add-suffix options.  This makes it more
  useful in many automated code translation workflows.

- Issue #13628: python-gdb.py is now able to retrieve more frames in the Python
  traceback if Python is optimized.

- Issue #11996: libpython (gdb), replace "py-bt" command by "py-bt-full" and
  add a smarter "py-bt" command printing a classic Python traceback.

- Issue #11179: Make ccbench work under Python 3.1 and 2.7 again.

- Issue #10639: reindent.py no longer converts newlines and will raise
  an error if attempting to convert a file with mixed newlines.
  "--newline" option added to specify new line character.

Extension Modules
-----------------

- Issue #16847: Fixed improper use of _PyUnicode_CheckConsistency() in
  non-pydebug builds. Several extension modules now compile cleanly when
  assert()s are enabled in standard builds (-DDEBUG flag).

- Issue #13840: The error message produced by ctypes.create_string_buffer
  when given a Unicode string has been fixed.

- Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
  Vilmos Nebehaj.

- Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.

- Issue #13159: FileIO and BZ2Compressor/BZ2Decompressor now use a linear-time
  buffer growth strategy instead of a quadratic-time one.

- Issue #10141: socket: Add SocketCAN (PF_CAN) support. Initial patch by
  Matthias Fuchs, updated by Tiago Gonçalves.

- Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
  would be finalized after the reference to its underlying BufferedRWPair's
  writer got cleared by the GC.

- Issue #12881: ctypes: Fix segfault with large structure field names.

- Issue #13058: ossaudiodev: fix a file descriptor leak on error. Patch by
  Thomas Jarosch.

- Issue #13013: ctypes: Fix a reference leak in PyCArrayType_from_ctype.
  Thanks to Suman Saha for finding the bug and providing a patch.

- Issue #13022: Fix: _multiprocessing.recvfd() doesn't check that
  file descriptor was actually received.

- Issue #1172711: Add 'long long' support to the array module.
  Initial patch by Oren Tirosh and Hirokazu Yamamoto.

- Issue #12483: ctypes: Fix a crash when the destruction of a callback
  object triggers the garbage collector.

- Issue #12950: Fix passing file descriptors in multiprocessing, under
  OpenIndiana/Illumos.

- Issue #12764: Fix a crash in ctypes when the name of a Structure field is not
  a string.

- Issue #11241: subclasses of ctypes.Array can now be subclassed.

- Issue #9651: Fix a crash when ctypes.create_string_buffer(0) was passed to
  some functions like file.write().

- Issue #10309: Define _GNU_SOURCE so that mremap() gets the proper
  signature.  Without this, architectures where sizeof void* != sizeof int are
  broken.  Patch given by Hallvard B Furuseth.

- Issue #12051: Fix segfault in json.dumps() while encoding highly-nested
  objects using the C accelerations.

- Issue #12017: Fix segfault in json.loads() while decoding highly-nested
  objects using the C accelerations.

- Issue #1838: Prevent segfault in ctypes, when _as_parameter_ on a class is set
  to an instance of the class.

Tests
-----

- Issue #13125: Silence spurious test_lib2to3 output when in non-verbose mode.
  Patch by Mikhail Novikov.

- Issue #13447: Add a test file to host regression tests for bugs in the
  scripts found in the Tools directory.

- Issue #10881: Fix test_site failure with OS X framework builds.

- Issue #13901: Prevent test_distutils failures on OS X with --enable-shared.

- Issue #13862: Fix spurious failure in test_zlib due to runtime/compile time
  minor versions not matching.

- Issue #12804: Fix test_socket and test_urllib2net failures when running tests
  on a system without internet access.

- Issue #13726: Fix the ambiguous -S flag in regrtest. It is -o/--slow for slow
  tests.

- Issue #11659: Fix ResourceWarning in test_subprocess introduced by #11459.
  Patch by Ben Hayden.

- Issue #11577: fix ResourceWarning triggered by improved binhex test coverage

- Issue #11509: Significantly increase test coverage of fileinput.
  Patch by Denver Coneybeare at PyCon 2011 Sprints.

- Issue #11689: Fix a variable scoping error in an sqlite3 test

- Issue #13786: Remove unimplemented 'trace' long option from regrtest.py.

- Issue #13725: Fix regrtest to recognize the documented -d flag.
  Patch by Erno Tukia.

- Issue #13304: Skip test case if user site-packages disabled (-s or
  PYTHONNOUSERSITE).  (Patch by Carl Meyer)

- Issue #5661: Add a test for ECONNRESET/EPIPE handling to test_asyncore. Patch
  by Xavier de Gaye.

- Issue #13218: Fix test_ssl failures on Debian/Ubuntu.

- Re-enable lib2to3's test_parser.py tests, though with an expected failure
  (see issue 13125).

- Issue #12656: Add tests for IPv6 and Unix sockets to test_asyncore.

- Issue #6484: Add unit tests for mailcap module (patch by Gregory Nofi)

- Issue #11651: Improve the Makefile test targets to run more of the test suite
  more quickly. The --multiprocess option is now enabled by default, reducing
  the amount of time needed to run the tests. "make test" and "make quicktest"
  now include some resource-intensive tests, but no longer run the test suite
  twice to check for bugs in .pyc generation. Tools/scripts/run_test.py provides
  an easy platform-independent way to run test suite with sensible defaults.

- Issue #12331: The test suite for the packaging module can now run from an
  installed Python.

- Issue #12331: The test suite for lib2to3 can now run from an installed
  Python.

- Issue #12626: In regrtest, allow filtering tests using a glob filter
  with the ``-m`` (or ``--match``) option.  This works with all test cases
  using the unittest module.  This is useful with long test suites
  such as test_io or test_subprocess.

- Issue #12624: It is now possible to fail after the first failure when
  running in verbose mode (``-v`` or ``-W``), by using the ``--failfast``
  (or ``-G``) option to regrtest.  This is useful with long test suites
  such as test_io or test_subprocess.

- Issue #12587: Correct faulty test file and reference in test_tokenize.
  (Patch by Robert Xiao)

- Issue #12573: Add resource checks for dangling Thread and Process objects.

- Issue #12549: Correct test_platform to not fail when OS X returns 'x86_64'
  as the processor type on some Mac systems.

- Skip network tests when getaddrinfo() returns EAI_AGAIN, meaning a temporary
  failure in name resolution.

- Issue #11812: Solve transient socket failure to connect to 'localhost'
  in test_telnetlib.py.

- Solved a potential deadlock in test_telnetlib.py. Related to issue #11812.

- Avoid failing in test_robotparser when mueblesmoraleda.com is flaky and
  an overzealous DNS service (e.g. OpenDNS) redirects to a placeholder
  web site.

- Avoid failing in test_urllibnet.test_bad_address when some overzealous
  DNS service (e.g. OpenDNS) resolves a non-existent domain name.  The test
  is now skipped instead.

- Issue #12440: When testing whether some bits in SSLContext.options can be
  reset, check the version of the OpenSSL headers Python was compiled against,
  rather than the runtime version of the OpenSSL library.

- Issue #11512: Add a test suite for the cgitb module. Patch by Robbie Clemons.

- Issue #12497: Install test/data to prevent failures of the various codecmaps
  tests.

- Issue #12496: Install test/capath directory to prevent test_connect_capath
  testcase failure in test_ssl.

- Issue #12469: Run wakeup and pending signal tests in a subprocess to run the
  test in a fresh process with only one thread and to not change signal
  handling of the parent process.

- Issue #8716: Avoid crashes caused by Aqua Tk on OSX when attempting to run
  test_tk or test_ttk_guionly under a username that is not currently logged
  in to the console windowserver (as may be the case under buildbot or ssh).

- Issue #12407: Explicitly skip test_capi.EmbeddingTest under Windows.

- Issue #12400: regrtest -W doesn't rerun the tests twice anymore, but captures
  the output and displays it on failure instead. regrtest -v doesn't print the
  error twice anymore if there is only one error.

- Issue #12141: Install copies of template C module file so that
  test_build_ext of test_distutils and test_command_build_ext of
  test_packaging are no longer silently skipped when
  run outside of a build directory.

- Issue #8746: Add additional tests for os.chflags() and os.lchflags().
  Patch by Garrett Cooper.

- Issue #10736: Fix test_ttk test_widgets failures with Cocoa Tk 8.5.9
  2.8 +  on Mac OS X.  (Patch by Ronald Oussoren)

- Issue #12057: Add tests for ISO 2022 codecs (iso2022_jp, iso2022_jp_2,
  iso2022_kr).

- Issue #12096: Fix a race condition in test_threading.test_waitfor(). Patch
  written by Charles-François Natali.

- Issue #11614: import __hello__ prints "Hello World!". Patch written by
  Andreas Stührk.

- Issue #5723: Improve json tests to be executed with and without accelerations.

- Issue #12041: Make test_wait3 more robust.

- Issue #11873: Change regex in test_compileall to fix occasional failures when
  the randomly generated temporary path happened to match the regex.

- Issue #11958: Fix FTP tests for IPv6, bind to "::1" instead of "localhost".
  Patch written by Charles-Francois Natali.

- Issue #8407, #11859: Fix tests of test_io using threads and an alarm: use
  pthread_sigmask() to ensure that the SIGALRM signal is received by the main
  thread.

- Issue #11811: Factor out detection of IPv6 support on the current host
  and make it available as ``test.support.IPV6_ENABLED``.  Patch by
  Charles-François Natali.

- Issue #10914: Add a minimal embedding test to test_capi.

- Issue #11223: Skip test_lock_acquire_interruption() and
  test_rlock_acquire_interruption() of test_threadsignals if a thread lock is
  implemented using a POSIX mutex and a POSIX condition variable. A POSIX
  condition variable cannot be interrupted by a signal (e.g. on Linux, the
  futex system call is restarted).

- Issue #11790: Fix sporadic failures in test_multiprocessing.WithProcessesTestCondition.

- Fix possible "file already exists" error when running the tests in parallel.

- Issue #11719: Fix message about unexpected test_msilib skip on non-Windows
  platforms. Patch by Nadeem Vawda.

- Issue #11727: Add a --timeout option to regrtest: if a test takes more than
  TIMEOUT seconds, dumps the traceback of all threads and exits.

- Issue #11653: fix -W with -j in regrtest.

- The email test suite now lives in the Lib/test/test_email package.  The test
  harness code has also been modernized to allow use of new unittest features.

- regrtest now discovers test packages as well as test modules.

- Issue #11577: improve test coverage of binhex.py. Patch by Arkady Koplyarov.

- New test_crashers added to exercise the scripts in the Lib/test/crashers
  directory and confirm they fail as expected

- Issue #11578: added test for the timeit module.  Patch by Michael Henry.

- Issue #11503: improve test coverage of posixpath.py. Patch by Evan Dandrea.

- Issue #11505: improves test coverage of string.py, increases granularity of
  string.Formatter tests. Initial patch by Alicia Arlen.

- Issue #11548: Improve test coverage of the shutil module. Patch by
  Evan Dandrea.

- Issue #11554: Reactivated test_email_codecs.

- Issue #11505: improves test coverage of string.py. Patch by Alicia
  Arlen

- Issue #11490: test_subprocess.test_leaking_fds_on_error no longer gives a
  false positive if the last directory in the path is inaccessible.

- Issue #11223: Fix test_threadsignals to fail, not hang, when the
  non-semaphore implementation of locks is used under POSIX.

- Issue #10911: Add tests on CGI with non-ASCII characters. Patch written by
  Pierre Quentel.

- Issue #9931: Fix hangs in GUI tests under Windows in certain conditions.
  Patch by Hirokazu Yamamoto.

- Issue #10512: Properly close sockets under test.test_cgi.

- Issue #10992: Make tests pass under coverage.

- Issue #10826: Prevent sporadic failure in test_subprocess on Solaris due
  to open door files.

- Issue #10990: Prevent tests from clobbering a set trace function.

C-API
-----

- Issue #13452: PyUnicode_EncodeDecimal() doesn't support error handlers
  different than "strict" anymore. The caller was unable to compute the
  size of the output buffer: it depends on the error handler.

- Issue #13560: Add PyUnicode_DecodeLocale(), PyUnicode_DecodeLocaleAndSize()
  and PyUnicode_EncodeLocale() functions to the C API to decode/encode from/to
  the current locale encoding.

- Issue #10831: PyUnicode_FromFormat() supports %li, %lli and %zi formats.

- Issue #11246: Fix PyUnicode_FromFormat("%V") to decode the byte string from
  UTF-8 (with replace error handler) instead of ISO-8859-1 (in strict mode).
  Patch written by Ray Allen.

- Issue #10830: Fix PyUnicode_FromFormatV("%c") for non-BMP characters on
  narrow build.

- Add PyObject_GenericGetDict and PyObject_GeneriSetDict. They are generic
  implementations for the getter and setter of a ``__dict__`` descriptor of C
  types.

- Issue #13727: Add 3 macros to access PyDateTime_Delta members:
  PyDateTime_DELTA_GET_DAYS, PyDateTime_DELTA_GET_SECONDS,
  PyDateTime_DELTA_GET_MICROSECONDS.

- Issue #10542: Add 4 macros to work with surrogates: Py_UNICODE_IS_SURROGATE,
  Py_UNICODE_IS_HIGH_SURROGATE, Py_UNICODE_IS_LOW_SURROGATE,
  Py_UNICODE_JOIN_SURROGATES.

- Issue #12724: Add Py_RETURN_NOTIMPLEMENTED macro for returning NotImplemented.

- PY_PATCHLEVEL_REVISION has been removed, since it's meaningless with
  Mercurial.

- Issue #12173: The first argument of PyImport_ImportModuleLevel is now `const
  char *` instead of `char *`.

- Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.

Documentation
-------------

- Issue #13989: Document that GzipFile does not support text mode, and give a
  more helpful error message when opened with an invalid mode string.

- Issue #13921: Undocument and clean up sqlite3.OptimizedUnicode,
  which is obsolete in Python 3.x. It's now aliased to str for
  backwards compatibility.

- Issue #12102: Document that buffered files must be flushed before being used
  with mmap. Patch by Steffen Daode Nurpmeso.

- Issue #8982: Improve the documentation for the argparse Namespace object.

- Issue #9343: Document that argparse parent parsers must be configured before
  their children.

- Issue #13498: Clarify docs of os.makedirs()'s exist_ok argument.  Done with
  great native-speaker help from R. David Murray.

- Issues #13491 and #13995: Fix many errors in sqlite3 documentation.
  Initial patch for #13491 by Johannes Vogel.

- Issue #13402: Document absoluteness of sys.executable.

- Issue #13883: PYTHONCASEOK also works on OS X.

- Issue #9021: Add an introduction to the copy module documentation.

- Issue #6005: Examples in the socket library documentation use sendall, where
  relevant, instead send method.

- Issue #12798: Updated the mimetypes documentation.

- Issue #12949: Document the kwonlyargcount argument for the PyCode_New
  C API function.

- Issue #13513: Fix io.IOBase documentation to correctly link to the
  io.IOBase.readline method instead of the readline module.

- Issue #13237: Reorganise subprocess documentation to emphasise convenience
  functions and the most commonly needed arguments to Popen.

- Issue #13141: Demonstrate recommended style for socketserver examples.

- Issue #11818: Fix tempfile examples for Python 3.


What's New in Python 3.2?
=========================

*Release date: 20-Feb-2011*

Core and Builtins
-----------------

- Issue #11249: Fix potential crashes when using the limited API.

Build
-----

- Issue #11222: Fix non-framework shared library build on Mac OS X.

- Issue #11184: Fix large-file support on AIX.

- Issue #941346: Fix broken shared library build on AIX.

Documentation
-------------

- Issue #10709: Add updated AIX notes in Misc/README.AIX.


What's New in Python 3.2 Release Candidate 3?
=============================================

*Release date: 13-Feb-2011*

Core and Builtins
-----------------

- Issue #11134: Add missing fields to typeslots.h.

- Issue #11135: Remove redundant doc field from PyType_Spec.

- Issue #11067: Add PyType_GetFlags, to support PyUnicode_Check in the limited
  ABI.

- Issue #11118: Fix bogus export of None in python3.dll.

Library
-------

- Issue #11116: any error during addition of a message to a mailbox now causes a
  rollback, instead of leaving the mailbox partially modified.

- Issue #11132: Fix passing of "optimize" parameter when recursing in
  compileall.compile_dir().

- Issue #11110: Fix a potential decref of a NULL in sqlite3.

- Issue #8275: Fix passing of callback arguments with ctypes under Win64.  Patch
  by Stan Mihai.

Build
-----

- Issue #11079: The /Applications/Python x.x folder created by the Mac OS X
  installers now includes a link to the installed documentation and no longer
  includes an Extras directory.  The Tools directory is now installed in the
  framework under share/doc.

- Issue #11121: Fix building with --enable-shared.

Tests
-----

- Issue #10971: test_zipimport_support is once again compatible with the refleak
  hunter feature of test.regrtest.


What's New in Python 3.2 Release Candidate 2?
=============================================

*Release date: 30-Jan-2011*

Core and Builtins
-----------------

- Issue #10451: memoryview objects could allow mutating a readable buffer.
  Initial patch by Ross Lagerwall.

Library
-------

- Issue #9124: mailbox now accepts binary input and reads and writes mailbox
  files in binary mode, using the email package's binary support to parse
  arbitrary email messages.  StringIO and text file input is deprecated,
  and string input fails early if non-ASCII characters are used, where
  previously it would fail when the email was processed in a later step.

- Issue #10845: Mitigate the incompatibility between the multiprocessing
  module on Windows and the use of package, zipfile or directory execution
  by special casing main modules that actually *are* called __main__.py.

- Issue #11045: Protect logging call against None argument.

- Issue #11052: Correct IDLE menu accelerators on Mac OS X for Save
  commands.

- Issue #11053: Fix IDLE "Syntax Error" windows to behave as in 2.x,
  preventing a confusing hung appearance on OS X with the windows
  obscured.

- Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the
  menu accelerators for Open Module, Go to Line, and New Indent Width.
  The accelerators still work but no longer appear in the menu items.

- Issue #10989: Fix a crash on SSLContext.load_verify_locations(None, True).

- Issue #11020: Command-line pyclbr was broken because of missing 2-to-3
  conversion.

- Issue #11019: Fixed BytesGenerator so that it correctly handles a Message
  with a None body.

- Issue #11014: Make 'filter' argument in tarfile.Tarfile.add() into a
  keyword-only argument.  The preceding positional argument was deprecated,
  so it made no sense to add filter as a positional argument.

- Issue #11004: Repaired edge case in deque.count().

- Issue #10974: IDLE no longer crashes if its recent files list includes files
  with non-ASCII characters in their path names.

- Have hashlib.algorithms_available and hashlib.algorithms_guaranteed both
  return sets instead of one returning a tuple and the other a frozenset.

- Issue #10987: Fix the recursion limit handling in the _pickle module.

- Issue #10983: Fix several bugs making tunnel requests in http.client.

- Issue #10955: zipimport uses ASCII encoding instead of cp437 to decode
  filenames, at bootstrap, if the codec registry is not ready yet. It is still
  possible to have non-ASCII filenames using the Unicode flag (UTF-8 encoding)
  for all file entries in the ZIP file.

- Issue #10949: Improved robustness of rotating file handlers.

- Issue #10955: Fix a potential crash when trying to mmap() a file past its
  length.  Initial patch by Ross Lagerwall.

- Issue #10898: Allow compiling the posix module when the C library defines
  a symbol named FSTAT.

- Issue #10980: the HTTP server now encodes headers with iso-8859-1 (latin1)
  encoding.  This is the preferred encoding of PEP 3333 and the base encoding
  of HTTP 1.1.

- To match the behaviour of HTTP server, the HTTP client library now also
  encodes headers with iso-8859-1 (latin1) encoding.  It was already doing
  that for incoming headers which makes this behaviour now consistent in
  both incoming and outgoing direction.

- Issue #9509: argparse now properly handles IOErrors raised by
  argparse.FileType.

- Issue #10961: The new pydoc server now better handles exceptions raised
  during request handling.

- Issue #10680: Fix mutually exclusive arguments for argument groups in
  argparse.

Build
-----

- Issue #11054: Allow Mac OS X installer builds to again work on 10.5 with
  the system-provided Python.


What's New in Python 3.2 Release Candidate 1
============================================

*Release date: 16-Jan-2011*

Core and Builtins
-----------------

- Issue #10889: range indexing and slicing now works correctly on ranges with
  a length that exceeds sys.maxsize.

- Issue #10892: Don't segfault when trying to delete __abstractmethods__ from a
  class.

- Issue #8020: Avoid a crash where the small objects allocator would read
  non-Python managed memory while it is being modified by another thread.  Patch
  by Matt Bandy.

- Issue #10841: On Windows, set the binary mode on stdin, stdout, stderr and all
  io.FileIO objects (to not translate newlines, \r\n <=> \n).  The Python parser
  translates newlines (\r\n => \n).

- Remove buffer API from stable ABI for now, see #10181.

- Issue #8651: PyArg_Parse*() functions raise an OverflowError if the file
  doesn't have PY_SSIZE_T_CLEAN define and the size doesn't fit in an int
  (length bigger than 2^31-1 bytes).

- Issue #9015, #9611: FileIO.readinto(), FileIO.write(), os.write() and
  stdprinter.write() clamp the length to INT_MAX on Windows.

- Issue #8278: On Windows and with a NTFS filesystem, os.stat() and os.utime()
  can now handle dates after 2038.

- Issue #10780: PyErr_SetFromWindowsErrWithFilename() and
  PyErr_SetExcFromWindowsErrWithFilename() decode the filename from the
  filesystem encoding instead of UTF-8.

- Issue #10779: PyErr_WarnExplicit() decodes the filename from the filesystem
  encoding instead of UTF-8.

- Add sys.flags attribute for the new -q command-line option.

- Issue #11506: Trying to assign to a bytes literal should result in a
  SyntaxError.

Library
-------

- Issue #10916: mmap should not segfault when a file is mapped using 0 as length
  and a non-zero offset, and an attempt to read past the end of file is made
  (IndexError is raised instead).  Patch by Ross Lagerwall.

- Issue #10154, #10090: change the normalization of UTF-8 to "UTF-8" instead
  of "UTF8" in the locale module as the latter is not supported MacOSX and OpenBSD.

- Issue #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5, rather
  than the currently problematic Apple-supplied one, when running with the
  64-/32-bit installer variant.

- Issue #4953: cgi.FieldStorage and cgi.parse() parse the request as bytes, not
  as unicode, and accept binary files. Add encoding and errors attributes to
  cgi.FieldStorage. Patch written by Pierre Quentel (with many inputs by Glenn
  Linderman).

- Add encoding and errors arguments to urllib.parse_qs() and urllib.parse_qsl().

- Issue #10899: No function type annotations in the standard library.  Removed
  function type annotations from _pyio.py.

- Issue #10875: Update Regular Expression HOWTO; patch by 'SilentGhost'.

- Issue #10872: The repr() of TextIOWrapper objects now includes the mode
  if available.

- Issue #10869: Fixed bug where ast.increment_lineno modified the root node
  twice.

- Issue #5871: email.header.Header.encode now raises an error if any
  continuation line in the formatted value has no leading white space and looks
  like a header.  Since Generator uses Header to format all headers, this check
  is made for all headers in any serialized message at serialization time.  This
  provides protection against header injection attacks.

- Issue #10859: Make ``contextlib.GeneratorContextManager`` officially
  private by renaming it to ``_GeneratorContextManager``.

- Issue #10042: Fixed the total_ordering decorator to handle cross-type
  comparisons that could lead to infinite recursion.

- Issue #10686: the email package now :rfc:`2047`\ -encodes headers with
  non-ASCII bytes (parsed by a BytesParser) when doing conversion to 7bit-clean
  presentation, instead of replacing them with ?s.

- email.header.Header was incorrectly encoding folding whitespace when
  rfc2047-encoding header values with embedded newlines, leaving them without
  folding whitespace.  It now uses the continuation_ws, as it does for
  continuation lines that it creates itself.

- Issue #1777412, #10827: Changed the rules for 2-digit years. The
  time.asctime(), time.ctime() and time.strftime() functions will now format
  any year when ``time.accept2dyear`` is False and will accept years >= 1000
  otherwise. ``time.mktime`` and ``time.strftime`` now accept full range
  supported by the OS. With Visual Studio or on Solaris, the year is limited to
  the range [1; 9999]. Conversion of 2-digit years to 4-digit is deprecated.

- Issue #7858: Raise an error properly when os.utime() fails under Windows
  on an existing file.

- Issue #3839: wsgiref should not override a Content-Length header set by
  the application.  Initial patch by Clovis Fabricio.

- Issue #10492: bdb.Bdb.run() only traces the execution of the code, not the
  compilation (if the input is a string).

- Issue #7995: When calling accept() on a socket with a timeout, the returned
  socket is now always blocking, regardless of the operating system.

- Issue #10756: atexit normalizes the exception before displaying it. Patch by
  Andreas Stührk.

- Issue #10790: email.header.Header.append's charset logic now works correctly
  for charsets whose output codec is different from its input codec.

- Issue #10819: SocketIO.name property returns -1 when its closed, instead of
  raising a ValueError, to fix repr().

- Issue #8650: zlib.compress() and zlib.decompress() raise an OverflowError if
  the input buffer length doesn't fit into an unsigned int (length bigger than
  2^32-1 bytes).

- Issue #6643: Reinitialize locks held within the threading module after fork to
  avoid a potential rare deadlock or crash on some platforms.

- Issue #10806, issue #9905: Fix subprocess pipes when some of the standard file
  descriptors (0, 1, 2) are closed in the parent process.  Initial patch by Ross
  Lagerwall.

- `unittest.TestCase` can be instantiated without a method name; for simpler
  exploration from the interactive interpreter.

- Issue #10798: Reject supporting concurrent.futures if the system has too
  few POSIX semaphores.

- Issue #10807: Remove base64, bz2, hex, quopri, rot13, uu and zlib codecs from
  the codec aliases. They are still accessible via codecs.lookup().

- Issue #10801: In zipfile, support different encodings for the header and the
  filenames.

- Issue #6285: IDLE no longer crashes on missing help file; patch by Scott
  David Daniels.

- Fix collections.OrderedDict.setdefault() so that it works in subclasses that
  define __missing__().

- Issue #10786: unittest.TextTestRunner default stream no longer bound at import
  time. `sys.stderr` now looked up at instantiation time.  Fix contributed by
  Mark Roddy.

- Issue #10753: Characters ';', '=' and ',' in the PATH_INFO environment variable
  won't be quoted when the URI is constructed by the wsgiref.util's request_uri
  method. According to RFC 3986, these characters can be a part of params in
  PATH component of URI and need not be quoted.

- Issue #10738: Fix webbrowser.Opera.raise_opts.

- Issue #9824: SimpleCookie now encodes , and ; in values to cater to how
  browsers actually parse cookies.

- Issue #9333: os.symlink now available regardless of user privileges.  The
  function now raises OSError on Windows >=6.0 when the user is unable to create
  symbolic links. XP and 2003 still raise NotImplementedError.

- Issue #10783: struct.pack() no longer implicitly encodes unicode to UTF-8.

- Issue #10730: Add SVG mime types to mimetypes module.

- Issue #10768: Make the Tkinter ScrolledText widget work again.

- Issue #10777: Fix "dictionary changed size during iteration" bug in
  ElementTree register_namespace().

- Issue #10626: test_logging now preserves logger disabled states.

- Issue #10774: test_logging now removes temp files created during tests.

- Issue #5258/#10642: if site.py encounters a .pth file that generates an error,
  it now prints the filename, line number, and traceback to stderr and skips
  the rest of that individual file, instead of stopping processing entirely.

- Issue #10763: subprocess.communicate() closes stdout and stderr if both are
  pipes (bug specific to Windows).

- Issue #1693546: fix email.message RFC 2231 parameter encoding to be in better
  compliance (no "s around encoded values).

- Improved the diff message in the unittest module's assertCountEqual().

- Issue #1155362: email.utils.parsedate_tz now handles a missing space before
  the '-' of a timezone field as well as before a '+'.

- Issue #4871: The zipfile module now gives a more useful error message if
  an attempt is made to use a string to specify the archive password.

- Issue #10750: The ``raw`` attribute of buffered IO objects is now read-only.

- Deprecated assertDictContainsSubset() in the unittest module.

C-API
-----

- PyObject_CallMethod now passes along any underlying AttributeError from
  PyObject_GetAttr, instead of replacing it with something less informative

- Issue #10913: Deprecate misleading functions PyEval_AcquireLock() and
  PyEval_ReleaseLock().  The thread-state aware APIs should be used instead.

- Issue #10333: Remove ancient GC API, which has been deprecated since Python
  2.2.

Build
-----

- Issue #10843: Update third-party library versions used in OS X 32-bit
  installer builds: bzip2 1.0.6, readline 6.1.2, SQLite 3.7.4 (with FTS3/FTS4
  and RTREE enabled), and ncursesw 5.5 (wide-char support enabled).

- Issue #10820: Fix OS X framework installs to support version-specific
  scripts (#10679).

- Issue #7716: Under Solaris, don't assume existence of /usr/xpg4/bin/grep in
  the configure script but use $GREP instead.  Patch by Fabian Groffen.

- Issue #10475: Don't hardcode compilers for LDSHARED/LDCXXSHARED on NetBSD
  and DragonFly BSD.  Patch by Nicolas Joly.

- Issue #10679: The "idle", "pydoc" and "2to3" scripts are now installed with
  a version-specific suffix on "make altinstall".

- Issue #10655: Fix the build on PowerPC on Linux with GCC when building with
  timestamp profiling (--with-tsc): the preprocessor test for the PowerPC
  support now looks for "__powerpc__" as well as "__ppc__": the latter seems to
  only be present on OS X; the former is the correct one for Linux with GCC.

- Issue #1099: Fix the build on MacOSX when building a framework with pydebug
  using GCC 4.0.

Tools/Demos
-----------

- Issue #10843: Install the Tools directory on OS X in the applications Extras
  (/Applications/Python 3.n/Extras/) where the Demo directory had previous been
  installed.

- Issue #7962: The Demo directory is gone.  Most of the old and unmaintained
  demos have been removed, others integrated in documentation or a new
  Tools/demo subdirectory.

- Issue #10502: Addition of the unittestgui tool. Originally by Steve Purcell.
  Updated for test discovery by Mark Roddy and Python 3 compatibility by Brian
  Curtin.

Tests
-----

- Issue #11910: Fix test_heapq to skip the C tests when _heapq is missing.

- Fix test_startfile to wait for child process to terminate before finishing.

- Issue #10822: Fix test_posix:test_getgroups failure under Solaris.  Patch
  by Ross Lagerwall.

- Make the --coverage flag work for test.regrtest.

- Issue #1677694: Refactor and improve test_timeout.  Original patch by
  Björn Lindqvist.

- Issue #5485: Add tests for the UseForeignDTD method of expat parser objects.
  Patch by Jean-Paul Calderone and Sandro Tosi.

- Issue #6293: Have regrtest.py echo back sys.flags.  This is done by default in
  whole runs and enabled selectively using ``--header`` when running an explicit
  list of tests.  Original patch by Collin Winter.


What's New in Python 3.2 Beta 2?
================================

*Release date: 19-Dec-2010*

Core and Builtins
-----------------

- Issue #8844: Regular and recursive lock acquisitions can now be interrupted
  by signals on platforms using pthreads.  Patch by Reid Kleckner.

- Issue #4236: PyModule_Create2 now checks the import machinery directly
  rather than the Py_IsInitialized flag, avoiding a Fatal Python
  error in certain circumstances when an import is done in __del__.

- Issue #5587: add a repr to dict_proxy objects.  Patch by David Stanek and
  Daniel Urban.

Library
-------

- Issue #3243:  Support iterable bodies in httplib. Patch Contributions by
  Xuanji Li and Chris AtLee.

- Issue #10611: SystemExit exception will no longer kill a unittest run.

- Issue #9857: It is now possible to skip a test in a setUp, tearDown or clean
  up function.

- Issue #10573: use actual/expected consistently in unittest methods.
  The order of the args of assertCountEqual is also changed.

- Issue #9286: email.utils.parseaddr no longer concatenates blank-separated
  words in the local part of email addresses, thereby preserving the input.

- Issue #6791: Limit header line length (to 65535 bytes) in http.client
  and http.server, to avoid denial of services from the other party.

- Issue #10404: Use ctl-button-1 on OSX for the context menu in Idle.

- Issue #9907: Fix tab handling on OSX when using editline by calling
  rl_initialize first, then setting our custom defaults, then reading .editrc.

- Issue #4188: Avoid creating dummy thread objects when logging operations
  from the threading module (with the internal verbose flag activated).

- Issue #10711: Remove HTTP 0.9 support from http.client.  The ``strict``
  parameter to HTTPConnection and friends is deprecated.

- Issue #9721: Fix the behavior of urljoin when the relative url starts with a
  ';' character. Patch by Wes Chow.

- Issue #10714: Limit length of incoming request in http.server to 65536 bytes
  for security reasons.  Initial patch by Ross Lagerwall.

- Issue #9558: Fix distutils.command.build_ext with VS 8.0.

- Issue #10667: Fast path for collections.Counter().

- Issue #10695: passing the port as a string value to telnetlib no longer
  causes debug mode to fail.

- Issue #1078919: add_header now automatically RFC2231 encodes parameters
  that contain non-ascii values.

- Issue #10188 (partial resolution): tempfile.TemporaryDirectory emits
  a warning on sys.stderr rather than throwing a misleading exception
  if cleanup fails due to nulling out of modules during shutdown.
  Also avoids an AttributeError when mkdtemp call fails and issues
  a ResourceWarning on implicit cleanup via __del__.

- Issue #10107: Warn about unsaved files in IDLE on OSX.

- Issue #7213: subprocess.Popen's default for close_fds has been changed.
  It is now True in most cases other than on Windows when input, output or
  error handles are provided.

- Issue #6559: subprocess.Popen has a new pass_fds parameter (actually
  added in 3.2beta1) to allow specifying a specific list of file descriptors
  to keep open in the child process.

- Issue #1731717: Fixed the problem where subprocess.wait() could cause an
  OSError exception when The OS had been told to ignore SIGCLD in our process
  or otherwise not wait for exiting child processes.

Tests
-----

- Issue #775964: test_grp now skips YP/NIS entries instead of failing when
  encountering them.

Tools/Demos
-----------

- Issue #6075: IDLE on Mac OS X now works with both Carbon AquaTk and
  Cocoa AquaTk.

- Issue #10710: ``Misc/setuid-prog.c`` is removed from the source tree.

- Issue #10706: Remove outdated script runtests.sh.  Either ``make test``
  or ``python -m test`` should be used instead.

Build
-----

- The Windows build now uses Tcl/Tk 8.5.9 and sqlite3 3.7.4.

- Issue #9234: argparse supports alias names for subparsers.


What's New in Python 3.2 Beta 1?
================================

*Release date: 05-Dec-2010*

Core and Builtins
-----------------

- Issue #10630: Return dict views from the dict proxy keys()/values()/items()
  methods.

- Issue #10596: Fix float.__mod__ to have the same behaviour as float.__divmod__
  with respect to signed zeros.  -4.0 % 4.0 should be 0.0, not -0.0.

- Issue #1772833: Add the -q command-line option to suppress copyright and
  version output in interactive mode.

- Provide an *optimize* parameter in the built-in compile() function.

- Fixed several corner case issues on Windows in os.stat/os.lstat related to
  reparse points.

- PEP 384 (Defining a Stable ABI) is implemented.

- Issue #2690: Range objects support negative indices and slicing.

- Issue #9915: Speed up sorting with a key.

- Issue #8685: Speed up set difference ``a - b`` when source set ``a`` is much
  larger than operand ``b``.  Patch by Andrew Bennetts.

- Issue #10518: Bring back the callable() builtin.

- Issue #7094: Added alternate formatting (specified by '#') to ``__format__``
  method of float, complex, and Decimal. This allows more precise control over
  when decimal points are displayed.

- Issue #10474: range.count() should return integers.

- Issue #1574217: isinstance now catches only AttributeError, rather than
  masking all errors.

Library
-------

- logging: added "handler of last resort". See http://bit.ly/last-resort-handler

- test.support: Added TestHandler and Matcher classes for better support of
  assertions about logging.

- Issue #4391: Use proper plural forms in argparse.

- Issue #10601: sys.displayhook uses 'backslashreplace' error handler on
  UnicodeEncodeError.

- Add the "display" and "undisplay" pdb commands.

- Issue #7245: Add a SIGINT handler in pdb that allows breaking a program again
  after a "continue" command.

- Add the "interact" pdb command.

- Issue #7905: Actually respect the keyencoding parameter to shelve.Shelf.

- Issue #1569291: Speed up array.repeat().

- Provide an interface to set the optimization level of compilation in
  py_compile, compileall and zipfile.PyZipFile.

- Issue #7904: Changes to urllib.parse.urlsplit to handle schemes as defined by
  RFC3986. Anything before :// is considered a scheme and is followed by an
  authority (or netloc) and by '/' led path, which is optional.

- Issue #6045: dbm.gnu databases now support get() and setdefault() methods.

- Issue #10620: `python -m unittest` can accept file paths instead of module
  names for running specific tests.

- Issue #9424: Deprecate the `unittest.TestCase` methods `assertEquals`,
  `assertNotEquals`, `assertAlmostEquals`, `assertNotAlmostEquals` and `assert_`
  and replace them with the correct methods in the Python test suite.

- Issue #10272: The ssl module now raises socket.timeout instead of a generic
  SSLError on socket timeouts.

- Issue #10528: Allow translators to reorder placeholders in localizable
  messages from argparse.

- Issue #10497: Fix incorrect use of gettext in argparse.

- Issue #10478: Reentrant calls inside buffered IO objects (for example by
  way of a signal handler) now raise a RuntimeError instead of freezing the
  current process.

- logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests.

- Issue #10549: Fix pydoc traceback when text-documenting certain classes.

- Issue #2001: New HTML server with enhanced web page features.  Patch by Ron
  Adam.

- Issue #10360: In WeakSet, do not raise TypeErrors when testing for membership
  of non-weakrefable objects.

- Issue #940286: pydoc.Helper.help() ignores input/output init parameters.

- Issue #1745035: Add a command size and data size limit to smtpd.py, to prevent
  DoS attacks.  Patch by Savio Sena.

- Issue #4925: Add filename to error message when executable can't be found in
  subprocess.

- Issue #10391: Don't dereference invalid memory in error messages in the ast
  module.

- Issue #10027: st_nlink was not being set on Windows calls to os.stat or
  os.lstat. Patch by Hirokazu Yamamoto.

- Issue #9333: Expose os.symlink only when the SeCreateSymbolicLinkPrivilege is
  held by the user's account, i.e., when the function can actually be used.

- Issue #8879: Add os.link support for Windows.

- Issue #7911: ``unittest.TestCase.longMessage`` defaults to True for improved
  failure messages by default. Patch by Mark Roddy.

- Issue #1486713: HTMLParser now has an optional tolerant mode where it tries to
  guess at the correct parsing of invalid html.

- Issue #10554: Add context management protocol support to subprocess.Popen objects.

- Issue #8989: email.utils.make_msgid now has a domain parameter that can
  override the domain name used in the generated msgid.

- Issue #9299: Add exist_ok parameter to os.makedirs to suppress the 'File
  exists' exception when a target directory already exists with the specified
  mode. Patch by Ray Allen.

- Issue #9573: os.fork() now works correctly when triggered as a side effect of
  a module import.

- Issue #10464: netrc now correctly handles lines with embedded '#' characters.

- Added itertools.accumulate().

- Issue #4113: Added custom ``__repr__`` method to ``functools.partial``.
  Original patch by Daniel Urban.

- Issue #10273: Rename `assertRegexpMatches` and `assertRaisesRegexp` to
  `assertRegex` and `assertRaisesRegex`.

- Issue #10535: Enable silenced warnings in unittest by default.

- Issue #9873: The URL parsing functions in urllib.parse now accept ASCII byte
  sequences as input in addition to character strings.

- Issue #10586: The statistics API for the new functools.lru_cache has been
  changed to a single cache_info() method returning a named tuple.

- Issue #10323: itertools.islice() now consumes the minimum number of inputs
  before stopping.  Formerly, the final state of the underlying iterator was
  undefined.

- Issue #10565: The collections.Iterator ABC now checks for both __iter__ and
  __next__.

- Issue #10242: Fixed implementation of unittest.ItemsEqual and gave it a new
  more informative name, unittest.CountEqual.

- Issue #10561: In pdb, clear the breakpoints by the breakpoint number.

- Issue #2986: difflib.SequenceMatcher gets a new parameter, autojunk, which can
  be set to False to turn off the previously undocumented 'popularity'
  heuristic. Patch by Terry Reedy and Eli Bendersky.

- Issue #10534: in difflib, expose bjunk and bpopular sets; deprecate
  undocumented and now redundant isbjunk and isbpopular methods.

- Issue #9846: zipfile is now correctly closing underlying file objects.

- Issue #10459: Update CJK character names to Unicode 6.0.

- Issue #4493: urllib.request adds '/' in front of path components which does not
  start with '/. Common behavior exhibited by browsers and other clients.

- Issue #6378: idle.bat now runs with the appropriate Python version rather than
  the system default. Patch by Sridhar Ratnakumar.

- Issue #10470: 'python -m unittest' will now run test discovery by default,
  when no extra arguments have been provided.

- Issue #3709: BaseHTTPRequestHandler will buffer the headers and write to
  output stream only when end_headers is invoked. This is a speedup and an
  internal optimization.  Patch by Andrew Shaaf.

- Issue #10220: Added inspect.getgeneratorstate. Initial patch by Rodolpho
  Eckhardt.

- Issue #10453: compileall now uses argparse instead of getopt, and thus
  provides clean output when called with '-h'.

- Issue #8078: Add constants for higher baud rates in the termios module.  Patch
  by Rodolpho Eckhardt.

- Issue #10407: Fix two NameErrors in distutils.

- Issue #10371: Deprecated undocumented functions in the trace module.

- Issue #10467: Fix BytesIO.readinto() after seeking into a position after the
  end of the file.

- configparser: 100% test coverage.

- Issue #10499: configparser supports pluggable interpolation handlers. The
  default classic interpolation handler is called BasicInterpolation. Another
  interpolation handler added (ExtendedInterpolation) which supports the syntax
  used by zc.buildout (e.g. interpolation between sections).

- configparser: the SafeConfigParser class has been renamed to ConfigParser.
  The legacy ConfigParser class has been removed but its interpolation mechanism
  is still available as LegacyInterpolation.

- configparser: Usage of RawConfigParser is now discouraged for new projects
  in favor of ConfigParser(interpolation=None).

- Issue #1682942: configparser supports alternative option/value delimiters.

- Issue #5412: configparser supports mapping protocol access.

- Issue #9411: configparser supports specifying encoding for read operations.

- Issue #9421: configparser's getint(), getfloat() and getboolean() methods
  accept vars and default arguments just like get() does.

- Issue #9452: configparser supports reading from strings and dictionaries
  (thanks to the mapping protocol API, the latter can be used to copy data
  between parsers).

- configparser: accepted INI file structure is now customizable, including
  comment prefixes, name of the DEFAULT section, empty lines in multiline
  values, and indentation.

- Issue #10326: unittest.TestCase instances can be pickled.

- Issue #9926: Wrapped TestSuite subclass does not get __call__ executed.

- Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to complex
  zeros on systems where the log1p function fails to respect the sign of zero.
  This fixes a test failure on AIX.

- Issue #9732: Addition of getattr_static to the inspect module.

- Issue #10446: Module documentation generated by pydoc now links to a
  version-specific online reference manual.

- Make the 'No module named' exception message from importlib consistent.

- Issue #10443: Add the SSLContext.set_default_verify_paths() method.

- Issue #10440: Support RUSAGE_THREAD as a constant in the resource module.
  Patch by Robert Collins.

- Issue #10429: IMAP.starttls() stored the capabilities as bytes objects, rather
  than strings.

C-API
-----

- Issue #10557: Added a new API function, PyUnicode_TransformDecimalToASCII(),
  which transforms non-ASCII decimal digits in a Unicode string to their ASCII
  equivalents.

- Issue #9518: Extend the PyModuleDef_HEAD_INIT macro to explicitly
  zero-initialize all fields, fixing compiler warnings seen when building
  extension modules with gcc with "-Wmissing-field-initializers" (implied by
  "-W").

- Issue #10255: Fix reference leak in Py_InitializeEx().  Patch by Neil
  Schemenauer.

- structseq.h is now included in Python.h.

- Loosen PyArg_ValidateKeywordArguments to allow dict subclasses.

Tests
-----

- regrtest.py once again ensures the test directory is removed from sys.path
  when it is invoked directly as the __main__ module.

- `python -m test` can be used to run the test suite as well as `python -m
  test.regrtest`.

- Do not fail test_socket when the IP address of the local hostname cannot be
  looked up.

- Issue #8886: Use context managers throughout test_zipfile. Patch by Eric
  Carstensen.

Build
-----

- Issue #10325: Fix two issues in the fallback definitions for PY_ULLONG_MAX and
  PY_LLONG_MAX that made them unsuitable for use in preprocessor conditionals.

Documentation
-------------

- Issue #10299: List the built-in functions in a table in functions.rst.


What's New in Python 3.2 Alpha 4?
=================================

*Release date: 13-Nov-2010*

Core and Builtins
-----------------

- Issue #10372: Import the warnings module only after the IO library is
  initialized, so as to avoid bootstrap issues with the '-W' option.

- Issue #10293: Remove obsolete field in the PyMemoryView structure, unused
  undocumented value PyBUF_SHADOW, and strangely-looking code in
  PyMemoryView_GetContiguous.

- Issue #6081: Add str.format_map(), similar to ``str.format(**mapping)``.

- If FileIO.__init__ fails, close the file descriptor.

- Issue #10221: dict.pop(k) now has a key error message that includes the
  missing key (same message d[k] returns for missing keys).

- Issue #5437: A preallocated MemoryError instance should not keep traceback
  data (including local variables caught in the stack trace) alive infinitely.

- Issue #10186: Fix the SyntaxError caret when the offset is equal to the length
  of the offending line.

- Issue #10089: Add support for arbitrary -X options on the command line.  They
  can be retrieved through a new attribute ``sys._xoptions``.

- Issue #4388: On Mac OS X, decode command line arguments from UTF-8, instead of
  the locale encoding.  If the LANG (and LC_ALL and LC_CTYPE) environment
  variable is not set, the locale encoding is ISO-8859-1, whereas most programs
  (including Python) expect UTF-8.  Python already uses UTF-8 for the filesystem
  encoding and to encode command line arguments on this OS.

- Issue #9713, #10114: Parser functions (e.g. PyParser_ASTFromFile) expect
  filenames encoded to the filesystem encoding with the surrogateescape error
  handler (to support undecodable bytes), instead of UTF-8 in strict mode.

- Issue #9997: Don't let the name "top" have special significance in scope
  resolution.

- Issue #9862: Compensate for broken PIPE_BUF in AIX by hard coding its value as
  the default 512 when compiling on AIX.

- Use locale encoding instead of UTF-8 to encode and decode filenames if
  Py_FileSystemDefaultEncoding is not set.

- Issue #10095: fp_setreadl() doesn't reopen the file, instead reuse the file
  descriptor.

- Issue #9418: Moved private string methods ``_formatter_parser`` and
  ``_formatter_field_name_split`` into a new ``_string`` module.

- Issue #9992: Remove PYTHONFSENCODING environment variable.

Library
-------

- Issue #12943: python -m tokenize support has been added to tokenize.

- Issue #10465: fix broken delegating of attributes by gzip._PaddedFile.

- Issue #10356: Decimal.__hash__(-1) should return -2.

- Issue #1553375: logging: Added stack_info kwarg to display stack information.

- Issue #5111: IPv6 Host in the Header is wrapped inside [ ]. Patch by Chandru.

- Fix Fraction.__hash__ so that Fraction.__hash__(-1) is -2.  (See also issue
  #10356.)

- Issue #4471: Add the IMAP.starttls() method to enable encryption on standard
  IMAP4 connections.  Original patch by Lorenzo M. Catucci.

- Issue #1466065: Add 'validate' option to base64.b64decode to raise an error if
  there are non-base64 alphabet characters in the input.

- Issue #10386: Add __all__ to token module; this simplifies importing in
  tokenize module and prevents leaking of private names through ``import *``.

- Issue #4471: Properly shutdown socket in IMAP.shutdown().  Patch by Lorenzo
  M. Catucci.

- Fix IMAP.login() to work properly.

- Issue #9244: multiprocessing pool worker processes could terminate
  unexpectedly if the return value of a task could not be pickled.  Only the
  ``repr`` of such errors are now sent back, wrapped in an
  ``MaybeEncodingError`` exception.

- Issue #9244: The ``apply_async()`` and ``map_async()`` methods of
  ``multiprocessing.Pool`` now accepts an ``error_callback`` argument.  This can
  be a callback with the signature ``callback(exc)``, which will be called if
  the target raises an exception.

- Issue #10022: The dictionary returned by the ``getpeercert()`` method of SSL
  sockets now has additional items such as ``issuer`` and ``notBefore``.

- ``usenetrc`` is now false by default for NNTP objects.

- Issue #1926: Add support for NNTP over SSL on port 563, as well as STARTTLS.
  Patch by Andrew Vant.

- Issue #10335: Add tokenize.open(), detect the file encoding using
  tokenize.detect_encoding() and open it in read only mode.

- Issue #10321: Add support for binary data to smtplib.SMTP.sendmail, and a new
  method send_message to send an email.message.Message object.

- Issue #6011: sysconfig and distutils.sysconfig use the surrogateescape error
  handler to parse the Makefile file.  Avoid a UnicodeDecodeError if the source
  code directory name contains a non-ASCII character and the locale encoding is
  ASCII.

- Issue #10329: The trace module writes reports using the input Python script
  encoding, instead of the locale encoding.  Patch written by Alexander
  Belopolsky.

- Issue #10126: Fix distutils' test_build when Python was built with
  --enable-shared.

- Issue #9281: Prevent race condition with mkdir in distutils.  Patch by
  Arfrever.

- Issue #10229: Fix caching error in gettext.

- Issue #10252: Close file objects in a timely manner in distutils code and
  tests.  Patch by Brian Brazil, completed by Éric Araujo.

- Issue #10180: Pickling file objects is now explicitly forbidden, since
  unpickling them produced nonsensical results.

- Issue #10311: The signal module now restores errno before returning from its
  low-level signal handler.  Patch by Hallvard B Furuseth.

- Issue #10282: Add a ``nntp_implementation`` attribute to NNTP objects.

- Issue #10283: Add a ``group_pattern`` argument to NNTP.list().

- Issue #10155: Add IISCGIHandler to wsgiref.handlers to support IIS CGI
  environment better, and to correct unicode environment values for WSGI 1.0.1.

- Issue #10281: nntplib now returns None for absent fields in the OVER/XOVER
  response, instead of raising an exception.

- wsgiref now implements and validates PEP 3333, rather than an experimental
  extension of PEP 333.  (Note: earlier versions of Python 3.x may have
  incorrectly validated some non-compliant applications as WSGI compliant; if
  your app validates with Python <3.2b1+, but not on this version, it is likely
  the case that your app was not compliant.)

- Issue #10280: NNTP.nntp_version should reflect the highest version advertised
  by the server.

- Issue #10184: Touch directories only once when extracting a tarfile.

- Issue #10199: New package, ``turtledemo`` now contains selected demo scripts
  that were formerly found under Demo/turtle.

- Issue #10265: Close file objects explicitly in sunau.  Patch by Brian Brazil.

- Issue #10266: uu.decode didn't close in_file explicitly when it was given as a
  filename.  Patch by Brian Brazil.

- Issue #10110: Queue objects didn't recognize full queues when the maxsize
  parameter had been reduced.

- Issue #10160: Speed up operator.attrgetter.  Patch by Christos Georgiou.

- logging: Added style option to basicConfig() to allow %, {} or $-formatting.

- Issue #5729: json.dumps() now supports using a string such as '\t' for
  pretty-printing multilevel objects.

- Issue #10253: FileIO leaks a file descriptor when trying to open a file for
  append that isn't seekable.  Patch by Brian Brazil.

- Support context management protocol for file-like objects returned by mailbox
  ``get_file()`` methods.

- Issue #10246: uu.encode didn't close file objects explicitly when filenames
  were given to it.  Patch by Brian Brazil.

- Issue #10198: fix duplicate header written to wave files when writeframes() is
  called without data.

- Close file objects in modulefinder in a timely manner.

- Close an io.TextIOWrapper object in email.parser in a timely manner.

- Close a file object in distutils.sysconfig in a timely manner.

- Close a file object in pkgutil in a timely manner.

- Issue #10233: Close file objects in a timely manner in the tarfile module and
  its test suite.

- Issue #10093: ResourceWarnings are now issued when files and sockets are
  deallocated without explicit closing.  These warnings are silenced by default,
  except in pydebug mode.

- tarfile.py: Add support for all missing variants of the GNU sparse extensions
  and create files with holes when extracting sparse members.

- Issue #10218: Return timeout status from ``Condition.wait`` in threading.

- Issue #7351: Add ``zipfile.BadZipFile`` spelling of the exception name and
  deprecate the old name ``zipfile.BadZipfile``.

- Issue #5027: The standard ``xml`` namespace is now understood by
  xml.sax.saxutils.XMLGenerator as being bound to
  http://www.w3.org/XML/1998/namespace.  Patch by Troy J. Farrell.

- Issue #5975: Add csv.unix_dialect class.

- Issue #7761: telnetlib.interact failures on Windows fixed.

- logging: Added style option to Formatter to allow %, {} or $-formatting.

- Issue #5178: Added tempfile.TemporaryDirectory class that can be used as a
  context manager.

- Issue #1349106: Generator (and BytesGenerator) flatten method and Header
  encode method now support a 'linesep' argument.

- Issue #5639: Add a *server_hostname* argument to ``SSLContext.wrap_socket`` in
  order to support the TLS SNI extension.  ``HTTPSConnection`` and ``urlopen()``
  also use this argument, so that HTTPS virtual hosts are now supported.

- Issue #10166: Avoid recursion in pstats Stats.add() for many stats items.

- Issue #10163: Skip unreadable registry keys during mimetypes initialization.

- logging: Made StreamHandler terminator configurable.

- logging: Allowed filters to be just callables.

- logging: Added tests for _logRecordClass changes.

- Issue #10092: Properly reset locale in calendar.Locale*Calendar classes.

- logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to
  increase flexibility of LogRecord creation.

- Issue #5117: Case normalization was needed on ntpath.relpath().  Also fixed
  root directory issue on posixpath.relpath().  (Ported working fixes from
  ntpath.)

- Issue #1343: xml.sax.saxutils.XMLGenerator now has an option
  short_empty_elements to direct it to use self-closing tags when appropriate.

- Issue #9807 (part 1): Expose the ABI flags in sys.abiflags.  Add --abiflags
  switch to python-config for command line access.

- Issue #6098: Don't claim DOM level 3 conformance in minidom.

- Issue #5762: Fix AttributeError raised by ``xml.dom.minidom`` when an empty
  XML namespace attribute is encountered.

- Issue #2830: Add the ``html.escape()`` function, which quotes all problematic
  characters by default.  Deprecate ``cgi.escape()``.

- Issue #9409: Fix the regex to match all kind of filenames, for interactive
  debugging in doctests.

- Issue #9183: ``datetime.timezone(datetime.timedelta(0))`` will now return the
  same instance as ``datetime.timezone.utc``.

- Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module, where
  supported by the system.  Patch by Nikita Vetoshkin.

- Issue #10063: file:// scheme will stop accessing remote hosts via ftp
  protocol. file:// urls had fallback to access remote hosts via ftp. This was
  not correct, change is made to raise a URLError when a remote host is tried to
  access via file:// scheme.

- Issue #1710703: Write structures for an empty ZIP archive when a ZipFile is
  created in modes 'a' or 'w' and then closed without adding any files. Raise
  BadZipfile (rather than IOError) when opening small non-ZIP files.

- Issue #10041: The signature of optional arguments in socket.makefile() didn't
  match that of io.open(), and they also didn't get forwarded properly to
  TextIOWrapper in text mode.  Patch by Kai Zhu.

- Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
  urllib.request.urlopen now take optional arguments to allow for server
  certificate checking, as recommended in public uses of HTTPS.

- Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
  current directory was deleted. Patch written by W. Trevor King.

- Issue #3873: Speed up unpickling from file objects that have a peek() method.

- Issue #10075: Add a session_stats() method to SSLContext objects.

- Issue #9948: Fixed problem of losing filename case information.

Extension Modules
-----------------

- Issue #5109: array.array constructor will now use fast code when
  initial data is provided in an array object with correct type.

- Issue #6317: Now winsound.PlaySound only accepts unicode.

- Issue #6317: Now winsound.PlaySound can accept non ascii filename.

- Issue #9377: Use Unicode API for gethostname on Windows.

- Issue #10143: Update "os.pathconf" values.

- Issue #6518: Support context management protocol for ossaudiodev types.

- Issue #678250: Make mmap flush a noop on ACCESS_READ and ACCESS_COPY.

- Issue #9054: Fix a crash occurring when using the pyexpat module with expat
  version 2.0.1.

- Issue #5355: Provide mappings from Expat error numbers to string descriptions
  and backwards, in order to actually make it possible to analyze error codes
  provided by ExpatError.

- The Unicode database was updated to 6.0.0.

C-API
-----

- Issue #10288: The deprecated family of "char"-handling macros
  (ISLOWER()/ISUPPER()/etc) have now been removed: use Py_ISLOWER() etc instead.

- Issue #9778: Hash values are now always the size of pointers. A new Py_hash_t
  type has been introduced.

Tools/Demos
-----------

- Issue #10117: Tools/scripts/reindent.py now accepts source files that use
  encoding other than ASCII or UTF-8.  Source encoding is preserved when
  reindented code is written to a file.

- Issue #7287: Demo/imputil/knee.py was removed.

Tests
-----

- Issue #3699: Fix test_bigaddrspace and extend it to test bytestrings as well
  as unicode strings.  Initial patch by Sandro Tosi.

- Issue #10294: Remove dead code form test_unicode_file.

- Issue #10123: Don't use non-ascii filenames in test_doctest tests. Add a new
  test specific to unicode (non-ascii name and filename).

Build
-----

- Issue #10268: Add a --enable-loadable-sqlite-extensions option to configure.

- Issue #8852: Allow the socket module to build on OpenSolaris.

- Drop -OPT:Olimit compiler option.

- Issue #10094: Use versioned .so files on GNU/kfreeBSD and the GNU Hurd.

- Accept Oracle Berkeley DB 5.0 and 5.1 as backend for the dbm extension.

- Issue #7473: avoid link errors when building a framework with a different set
  of architectures than the one that is currently installed.


What's New in Python 3.2 Alpha 3?
=================================

*Release date: 09-Oct-2010*

Core and Builtins
-----------------

- Issue #10068: Global objects which have reference cycles with their module's
  dict are now cleared again. This causes issue #7140 to appear again.

- Issue #9738: Document PyErr_SetString() and PyErr_SetFromErrnoWithFilename()
  encodings.

- ast.literal_eval() can now handle negative numbers.  It is also a little more
  liberal in what it accepts without compromising the safety of the evaluation.
  For example, 3j+4 and 3+4+5 are both accepted.

- Issue #10006: type.__abstractmethods__ now raises an AttributeError.  As a
  result metaclasses can now be ABCs (see #9533).

- Issue #8670: ctypes.c_wchar supports non-BMP characters with 32 bits wchar_t.

- Issue #8670: PyUnicode_AsWideChar() and PyUnicode_AsWideCharString() replace
  UTF-16 surrogate pairs by single non-BMP characters for 16 bits Py_UNICODE and
  32 bits wchar_t (eg. Linux in narrow build).

- Issue #10003: Allow handling of SIGBREAK on Windows. Fixes a regression
  introduced by issue #9324.

- Issue #9979: Create function PyUnicode_AsWideCharString().

- Issue #7397: Mention that importlib.import_module() is probably what someone
  really wants to be using in __import__'s docstring.

- Issue #8521: Allow CreateKeyEx, OpenKeyEx, and DeleteKeyEx functions of winreg
  to use named arguments.

- Issue #9930: Remove bogus subtype check that was causing (e.g.)
  float.__rdiv__(2.0, 3) to return NotImplemented instead of the expected 1.5.

- Issue #9808: Implement os.getlogin for Windows. Patch by Jon Anglin.

- Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other
  threads are still running.  Instead, reinitialize the GIL on a second call to
  Py_Initialize().

- All SyntaxErrors now have a column offset and therefore a caret when the error
  is printed.

- Issue #9252: PyImport_Import no longer uses a fromlist hack to return the
  module that was imported, but instead gets the module from sys.modules.

- Issue #9213: The range type_items now provides index() and count() methods, to
  conform to the Sequence ABC.  Patch by Daniel Urban and Daniel Stutzbach.

- Issue #7994: Issue a PendingDeprecationWarning if object.__format__ is called
  with a non-empty format string.  This is an effort to future-proof user
  code. If a derived class does not currently implement __format__ but later
  adds its own __format__, it would most likely break user code that had
  supplied a format string.  This will be changed to a DeprecationWaring in
  Python 3.3 and it will be an error in Python 3.4.

- Issue #9828: Destroy the GIL in Py_Finalize(), so that it gets properly
  re-created on a subsequent call to Py_Initialize().  The problem (a crash)
  wouldn't appear in 3.1 or 2.7 where the GIL's structure is more trivial.

- Issue #9210: Configure option --with-wctype-functions was removed.  Using the
  functions from the libc caused the methods .upper() and lower() to become
  locale aware and created subtly wrong results.

- Issue #9738: PyUnicode_FromFormat() and PyErr_Format() raise an error on a
  non-ASCII byte in the format string.

- Issue #4617: Previously it was illegal to delete a name from the local
  namespace if it occurs as a free variable in a nested block.  This limitation
  of the compiler has been lifted, and a new opcode introduced (DELETE_DEREF).

- Issue #9804: ascii() now always represents unicode surrogate pairs as a single
  ``\UXXXXXXXX``, regardless of whether the character is printable or not.
  Also, the "backslashreplace" error handler now joins surrogate pairs into a
  single character on UCS-2 builds.

- Issue #9757: memoryview objects get a release() method to release the
  underlying buffer (previously this was only done when deallocating the
  memoryview), and gain support for the context management protocol.

- Issue #9797: pystate.c wrongly assumed that zero couldn't be a valid
  thread-local storage key.

Library
-------

- Issue #2236: distutils' mkpath ignored the mode parameter.

- Fix typo in one sdist option (medata-check).

- Issue #9199: Fix incorrect use of distutils.cmd.Command.announce.

- Issue #1718574: Fix options that were supposed to accept arguments but did
  not in build_clib.

- Issue #9437: Fix building C extensions with non-default LDFLAGS.

- Issue #4661: email can now parse bytes input and generate either converted
  7bit output or bytes output.  Email version bumped to 5.1.0.

- Issue #1589: Add ssl.match_hostname(), to help implement server identity
  verification for higher-level protocols.

- Issue #9759: GzipFile now raises ValueError when an operation is attempted
  after the file is closed.  Patch by Jeffrey Finkelstein.

- Issue #9042: Fix interaction of custom translation classes and caching in
  gettext.

- Issue #6706: asyncore.dispatcher now provides a handle_accepted() method
  returning a (sock, addr) pair which is called when a connection has been
  established with a new remote endpoint.  This is supposed to be used as a
  replacement for old handle_accept() and avoids the user to call accept()
  directly.

- Issue #9065: tarfile no longer uses "root" as the default for the uname and
  gname field.

- Issue #8980: Fixed a failure in distutils.command check that was shadowed by
  an environment that does not have docutils.  Patch by Arfrever.

- Issue #1050268: parseaddr now correctly quotes double quote and backslash
  characters that appear inside quoted strings in email addresses.

- Issue #10004: quoprimime no longer generates a traceback when confronted with
  invalid characters after '=' in a Q-encoded word.

- Issue #1491: BaseHTTPServer nows send a ``100 Continue`` response before
  sending a 200 OK for the Expect: 100-continue request header.

- Issue #9360: Cleanup and improvements to the nntplib module.  The API now
  conforms to the philosophy of bytes and unicode separation in Python 3.  A
  test suite has also been added.

- Issue #9962: GzipFile now has the peek() method.

- Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
  retry the select() loop instead of bailing out.  This is because select() can
  incorrectly report a socket as ready for reading (for example, if it received
  some data with an invalid checksum).

- Issue #3612: Added new types to ctypes.wintypes. (CHAR and pointers)

- Issue #9950: Fix socket.sendall() crash or misbehaviour when a signal is
  received.  Now sendall() properly calls signal handlers if necessary, and
  retries sending if these returned successfully, including on sockets with a
  timeout.

- Issue #9947: logging: Fixed locking bug in stopListening.

- Issue #9945: logging: Fixed locking bugs in addHandler/removeHandler.

- Issue #9936: Fixed executable lines' search in the trace module.

- Issue #9790: Rework imports necessary for samefile and sameopenfile
  in ntpath.

- Issue #9928: Properly initialize the types exported by the bz2 module.

- Issue #1675951: Allow GzipFile to work with unseekable file objects.  Patch by
  Florian Festi.

- Logging: Added QueueListener class to facilitate logging usage for
  performance-critical threads.

- Issue #9916: Add some missing errno symbols.

- Issue #9877: Expose sysconfig.get_makefile_filename()

- logging: Added hasHandlers() method to Logger and LoggerAdapter.

- Issue #9908: Fix os.stat() on bytes paths under Windows 7.

- Issue #2643: msync() is not called anymore when deallocating an open mmap
  object, only munmap().

- logging: Changed LoggerAdapter implementation internally, to make it easier to
  subclass in a useful way.

- logging: hasHandlers method was added to Logger, and isEnabledFor,
  getEffectiveLevel, hasHandlers and setLevel were added to LoggerAdapter.
  LoggerAdapter was introduced into the unit tests for logging.

- Issue #1686: Fix string.Template when overriding the pattern attribute.

- Issue #9854: SocketIO objects now observe the RawIOBase interface in
  non-blocking mode: they return None when an operation would block (instead of
  raising an exception).

- Issue #1730136: Fix the comparison between a tk.font.Font and an object of
  another kind.

- Issue #9441: logging has better coverage for rotating file handlers.

- Issue #9865: collections.OrderedDict now has a __sizeof__ method.

- Issue #9854: The default read() implementation in io.RawIOBase now handles
  non-blocking readinto() returning None correctly.

- Issue #1552: socket.socketpair() now returns regular socket.socket objects
  supporting the whole socket API (rather than the "raw" _socket.socket
  objects).

- Issue #9853: Fix the signature of SSLSocket.recvfrom() and SSLSocket.sendto()
  to match the corresponding socket methods.

- Issue #9840: Added a decorator to reprlib for wrapping __repr__ methods to make
  them handle recursive calls within the same thread.

- logging: Enhanced HTTPHandler with secure and credentials initializers.

- Issue #767645: Set os.path.supports_unicode_filenames to True on Mac OS X.

- Issue #9837: The read() method of ZipExtFile objects (as returned by
  ZipFile.open()) could return more bytes than requested.

- Issue #9826: OrderedDict.__repr__ can now handle self-referential values:
  d['x'] = d.

- Issue #9825: Using __del__ in the definition of collections.OrderedDict made
  it possible for the user to create self-referencing ordered dictionaries which
  become permanently uncollectable GC garbage.  Reinstated the Python 3.1
  approach of using weakref proxies so that reference cycles never get created
  in the first place.

- Issue #9579, #9580: Fix os.confstr() for value longer than 255 bytes and
  encode the value with filesystem encoding and surrogateescape (instead of
  utf-8 in strict mode) . Patch written by David Watson.

- Issue #9632: Remove sys.setfilesystemencoding() function: use PYTHONFSENCODING
  environment variable to set the filesystem encoding at Python startup.
  sys.setfilesystemencoding() creates inconsistencies because it is unable to
  re-encode all filenames in all objects.

- Issue #9410: Various optimizations to the pickle module, leading to speedups
  up to 4x (depending on the benchmark).  Mostly ported from Unladen Swallow;
  initial patch by Alexandre Vassalotti.

- The pprint module now supports printing OrderedDicts in their given order
  (formerly, it would sort the keys).

- Logging: Added QueueHandler class to facilitate logging usage with
  multiprocessing.

- Issue #9707: Rewritten reference implementation of threading.local which is
  friendlier towards reference cycles.  This change is not normally visible
  since an optimized C implementation (_thread._local) is used instead.

- Issue #6394: os.getppid() is now supported on Windows.  Note that it will
  still return the id of the parent process after it has exited.  This process
  id may even have been reused by another unrelated process.

- Issue #9792: In case of connection failure, socket.create_connection() would
  swallow the exception and raise a new one, making it impossible to fetch the
  original errno, or to filter timeout errors.  Now the original error is
  re-raised.

- Issue #9758: When fcntl.ioctl() was called with mutable_flag set to True, and
  the passed buffer was exactly 1024 bytes long, the buffer wouldn't be updated
  back after the system call.  Original patch by Brian Brazil.

- Updates to the random module:

  * Document which parts of the module are guaranteed to stay the same across
    versions and which parts are subject to change.

  * Update the seed() method to use all of the bits in a string instead of just
    the hash value.  This makes better use of the seed value and assures the
    seeding is platform independent.  Issue #7889.

  * Improved the random()-->integer algorithm used in choice(), shuffle(),
    sample(), randrange(), and randint().  Formerly, it used int(n*random())
    which has a slight bias whenever n is not a power of two.  Issue #9025.

  * Improved documentation of arguments to randrange().  Issue #9379.

- collections.OrderedDict now supports a new method for repositioning keys to
  either end.

- Issue #9754: Similarly to assertRaises and assertRaisesRegexp, unittest test
  cases now also have assertWarns and assertWarnsRegexp methods to check that a
  given warning type was triggered by the code under test.

- Issue #5506: BytesIO objects now have a getbuffer() method exporting a view of
  their contents without duplicating them.  The view is both readable and
  writable.

- Issue #7566: Implement os.path.sameopenfile for Windows.

- Issue #9293: I/O streams now raise ``io.UnsupportedOperation`` when an
  unsupported operation is attempted (for example, writing to a file open only
  for reading).

- hashlib has two new constant attributes: algorithms_guaranteed and
  algorithms_available that respectively list the names of hash algorithms
  guaranteed to exist in all Python implementations and the names of hash
  algorithms available in the current process.

- A new package ``concurrent.futures`` as defined by PEP 3148.

C-API
-----

- Add PyErr_SyntaxLocationEx, which supports passing a column offset.

- Issue #9834: Don't segfault in PySequence_GetSlice, PySequence_SetSlice, or
  PySequence_DelSlice when the object doesn't have any mapping operations
  defined.

Tools/Demos
-----------

- Issue #9188: The gdb extension now handles correctly narrow (UCS2) as well as
  wide (UCS4) unicode builds for both the host interpreter (embedded inside gdb)
  and the interpreter under test.

Tests
-----

- Issue #9308: Added tests for importing encoded modules that do not
  depend on specific stdlib modules being encoded in a certain way.

- Issue #1051: Add a script (Lib/test/make_ssl_certs.py) to generate the custom
  certificate and private key files used by SSL-related certs.

- Issue #9978: Wait until subprocess completes initialization. (Win32KillTests
  in test_os)

- Issue #7110: regrtest now sends test failure reports and single-failure
  tracebacks to stderr rather than stdout.

- Issue #9628: fix runtests.sh -x option so more than one test can be excluded.

- Issue #9899: Fix test_tkinter.test_font on various platforms.  Patch by Ned
  Deily.

- Issue #9894: Do not hardcode ENOENT in test_subprocess.

- Issue #9315: Added tests for the trace module.  Patch by Eli Bendersky.

- Issue #9323: Make test.regrtest.__file__ absolute, this was not always the
  case when running profile or trace, for example.

- Issue #9568: Fix test_urllib2_localnet on OS X 10.3.

Build
-----

- Issue #10062: Allow building on platforms which do not have sem_timedwait.

- Issue #10054: Some platforms provide uintptr_t in inttypes.h.  Patch by Akira
  Kitada.

- Issue #10055: Make json C89-compliant in UCS4 mode.

- Issue #9552: Avoid unnecessary rebuild of OpenSSL. (Windows)

- Issue #1633863: Don't ignore $CC under AIX.

- Issue #9810: Compile bzip2 source files in Python's project file directly. It
  used to be built with bzip2's makefile.

- Issue #9848: Stopping trying to build _weakref in setup.py as it is a built-in
  module.

- Issue #9806: python-config now has an ``--extension-suffix`` option that
  outputs the suffix for dynamic libraries including the ABI version name
  defined by PEP 3149.

- Issue #941346: Improve the build process under AIX and allow Python to be
  built as a shared library.  Patch by Sébastien Sablé.

- Issue #4026: Make the fcntl extension build under AIX.  Patch by Sébastien
  Sablé.

- Issue #9701: The MacOSX installer can patch the shell profile to ensure that
  the "bin" directory inside the framework is on the shell's search path. This
  feature now also supports the ZSH shell.


What's New in Python 3.2 Alpha 2?
=================================

*Release date: 05-Sep-2010*

Core and Builtins
-----------------

- Issue #9225: Remove the ROT_FOUR and DUP_TOPX opcode, the latter replaced by
  the new (and simpler) DUP_TOP_TWO.  Performance isn't changed, but our
  bytecode is a bit simplified.  Patch by Demur Rumed.

- Issue #9766: Rename poorly named variables exposed by _warnings to prevent
  confusion with the proper variables names from 'warnings' itself.

- Issue #9212: dict_keys and dict_items now provide the isdisjoint() method, to
  conform to the Set ABC.  Patch by Daniel Urban.

- Issue #9737: Fix a crash when trying to delete a slice or an item from a
  memoryview object.

- Issue #9549: sys.setdefaultencoding() and PyUnicode_SetDefaultEncoding() are
  now removed, since their effect was inexistent in 3.x (the default encoding is
  hardcoded to utf-8 and cannot be changed).

- Issue #7415: PyUnicode_FromEncodedObject() now uses the new buffer API
  properly.  Patch by Stefan Behnel.

- Issue #5553: The Py_LOCAL_INLINE macro now results in inlining on most
  platforms.  Previously, it inlined only when using Microsoft Visual C.

- Issue #9712: Fix tokenize on identifiers that start with non-ascii names.

- Issue #9688: __basicsize__ and __itemsize__ must be accessed as Py_ssize_t.

- Issue #9684: Added a definition for SIZEOF_WCHAR_T to PC/pyconfig.h, to match
  the pyconfig.h generated by configure on other systems.

- Issue #9666: Only catch AttributeError in hasattr(). All other exceptions that
  occur during attribute lookup are now propagated to the caller.

- Issue #8622: Add PYTHONFSENCODING environment variable to override the
  filesystem encoding.

- Issue #5127: The C functions that access the Unicode Database now accept and
  return characters from the full Unicode range, even on narrow unicode builds
  (Py_UNICODE_TOLOWER, Py_UNICODE_ISDECIMAL, and others).  A visible difference
  in Python is that unicodedata.numeric() now returns the correct value for
  large code points, and repr() may consider more characters as printable.

- Issue #9425: Create PyModule_GetFilenameObject() function to get the filename
  as a unicode object, instead of a byte string. Function needed to support
  unencodable filenames. Deprecate PyModule_GetFilename() in favor on the new
  function.

- Issue #8063: Call _PyGILState_Init() earlier in Py_InitializeEx().

- Issue #9612: The set object is now 64-bit clean under Windows.

- Issue #8202: sys.argv[0] is now set to '-m' instead of '-c' when searching for
  the module file to be executed with the -m command line option.

- Issue #9599: Create PySys_FormatStdout() and PySys_FormatStderr() functions to
  write a message formatted by PyUnicode_FromFormatV() to sys.stdout and
  sys.stderr.

- Issue #9542: Create PyUnicode_FSDecoder() function, a ParseTuple converter:
  decode bytes objects to unicode using PyUnicode_DecodeFSDefaultAndSize(); str
  objects are output as-is.

- Issue #9203: Computed gotos are now enabled by default on supported compilers
  (which are detected by the configure script).  They can still be disable
  selectively by specifying --without-computed-gotos.

- Issue #9425: Create PyErr_WarnFormat() function, similar to PyErr_WarnEx() but
  use PyUnicode_FromFormatV() to format the warning message.

- Issue #8530: Prevent stringlib fastsearch from reading beyond the front of an
  array.

- Issue #5319: Print an error if flushing stdout fails at interpreter shutdown.

- Issue #9337: The str() of a float or complex number is now identical to its
  repr().

- Issue #9416: Fix some issues with complex formatting where the output with no
  type specifier failed to match the str output:

    - format(complex(-0.0, 2.0), '-') omitted the real part from the output,
    - format(complex(0.0, 2.0), '-') included a sign and parentheses.

Extension Modules
-----------------

- Issue #8013: time.asctime and time.ctime no longer call system
  asctime and ctime functions.  The year range for time.asctime is now
  1900 through maxint.  The range for time.ctime is the same as for
  time.localtime.  The string produced by these functions is longer
  than 24 characters when year is greater than 9999.

- Issue #6608: time.asctime is now checking struct tm fields its input
  before passing it to the system asctime.  Patch by MunSic Jeong.

- Issue #8734: Avoid crash in msvcrt.get_osfhandle() when an invalid file
  descriptor is provided.  Patch by Pascal Chambon.

- Issue #7736: Release the GIL around calls to opendir() and closedir() in the
  posix module.  Patch by Marcin Bachry.

- Issue #4835: make PyLong_FromSocket_t() and PyLong_AsSocket_t() private to the
  socket module, and fix the width of socket descriptors to be correctly
  detected under 64-bit Windows.

- Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex, getaddrinfo
  and gethostbyaddr.  getnameinfo is now restricted to numeric addresses as
  input.

- Issue #9214: Set operations on a KeysView or ItemsView in collections now
  correctly return a set.  Patch by Eli Bendersky.

- Issue #5737: Add Solaris-specific mnemonics in the errno module.  Patch by
  Matthew Ahrens.

- Restore GIL in nis_cat in case of error. Decode NIS data to fs encoding, using
  the surrogate error handler.

- Issue #665761: ``functools.reduce()`` will no longer mask exceptions other
  than ``TypeError`` raised by the iterator argument.

- Issue #9570: Use PEP 383 decoding in os.mknod and os.mkfifo.

- Issue #6915: Under Windows, os.listdir() didn't release the Global Interpreter
  Lock around all system calls.  Original patch by Ryan Kelly.

- Issue #8524: Add a detach() method to socket objects, so as to put the socket
  into the closed state without closing the underlying file descriptor.

- Issue #477863: Emit a ResourceWarning at shutdown if gc.garbage is not empty.

- Issue #6869: Fix a refcount problem in the _ctypes extension.

- Issue #5504: ctypes should now work with systems where mmap can't be
  PROT_WRITE and PROT_EXEC.

- Issue #9507: Named tuple repr will now automatically display the right name in
  a tuple subclass.

- Issue #9324: Add parameter validation to signal.signal on Windows in order to
  prevent crashes.

- Issue #9526: Remove some outdated (int) casts that were preventing the array
  module from working correctly with arrays of more than 2**31 elements.

- Fix memory leak in ssl._ssl._test_decode_cert.

- Issue #8065: Fix memory leak in readline module (from failure to free the
  result of history_get_history_state()).

- Issue #9450: Fix memory leak in readline.replace_history_item and
  readline.remove_history_item for readline version >= 5.0.

- Issue #8105: Validate file descriptor passed to mmap.mmap on Windows.

- Issue #8046: Add context management protocol support and .closed property to mmap
  objects.

Library
-------

- Issue #7451: Improve decoding performance of JSON objects, and reduce the
  memory consumption of said decoded objects when they use the same strings as
  keys.

- Issue #1100562: Fix deep-copying of objects derived from the list and dict
  types.  Patch by Michele Orrù and Björn Lindqvist.

- Issue #9753: Fixed socket.dup, which did not always work correctly on Windows.

- Issue #9421: Made the get<type> methods consistently accept the vars and
  default arguments on all parser classes.

- Issue #7005: Fixed output of None values for RawConfigParser.write and
  ConfigParser.write.

- Issue #8990: array.fromstring() and array.tostring() get renamed to
  frombytes() and tobytes(), respectively, to avoid confusion.  Furthermore,
  array.frombytes(), array.extend() as well as the array.array() constructor now
  accept bytearray objects.  Patch by Thomas Jollans.

- Issue #808164: Fixed socket.close to avoid references to globals, to avoid
  issues when socket.close is called from a __del__ method.

- Issue #9706: ssl module provides a better error handling in various
  circumstances.

- Issue #1868: Eliminate subtle timing issues in thread-local objects by getting
  rid of the cached copy of thread-local attribute dictionary.

- Issue #1512791: In setframerate() in the wave module, non-integral frame rates
  are rounded to the nearest integer.

- Issue #8797: urllib2 does a retry for Basic Authentication failure instead of
  falling into recursion.

- Issue #1194222: email.utils.parsedate now returns RFC2822 compliant four
  character years even if the message contains RFC822 two character years.

- Issue #8750: Fixed MutableSet's methods to correctly handle reflexive
  operations on its self, namely x -= x and x ^= x.

- Issue #9129: smtpd.py is vulnerable to DoS attacks deriving from missing error
  handling when accepting a new connection.

- Issue #9601: ftplib now provides a workaround for non-compliant
  implementations such as IIS shipped with Windows server 2003 returning invalid
  response codes for MKD and PWD commands.

- Issue #658749: asyncore's connect() method now correctly interprets winsock
  errors.

- Issue #9501: Fixed logging regressions in cleanup code.

- Fix functools.total_ordering() to skip methods inherited from object.

- Issue #9572: Importlib should not raise an exception if a directory it thought
  it needed to create was done concurrently by another process.

- Issue #9617: Signals received during a low-level write operation aren't
  ignored by the buffered IO layer anymore.

- Issue #843590: Make "macintosh" an alias to the "mac_roman" encoding.

- Create os.fsdecode(): decode from the filesystem encoding with surrogateescape
  error handler, or strict error handler on Windows.

- Issue #3488: Provide convenient shorthand functions ``gzip.compress`` and
  ``gzip.decompress``.  Original patch by Anand B. Pillai.

- Issue #8807: poplib.POP3_SSL class now accepts a context parameter, which is a
  ssl.SSLContext object allowing bundling SSL configuration options,
  certificates and private keys into a single (potentially long-lived)
  structure.

- Issue #8866: parameters passed to socket.getaddrinfo can now be specified as
  single keyword arguments.

- Address XXX comment in dis.py by having inspect.py prefer to reuse the dis.py
  compiler flag values over defining its own.

- Issue #9147: Added dis.code_info() which is similar to show_code() but returns
  formatted code information in a string rather than displaying on screen.

- Issue #9567: functools.update_wrapper now adds a __wrapped__ attribute
  pointing to the original callable.

- Issue #3445: functools.update_wrapper now tolerates missing attributes on
  wrapped callables.

- Issue #5867: Add abc.abstractclassmethod and abc.abstractstaticmethod.

- Issue #9605: posix.getlogin() decodes the username with file filesystem
  encoding and surrogateescape error handler. Patch written by David Watson.

- Issue #9604: posix.initgroups() encodes the username using the filesystem
  encoding and surrogateescape error handler. Patch written by David Watson.

- Issue #9603: posix.ttyname() and posix.ctermid() decode the terminal name
  using the filesystem encoding and surrogateescape error handler. Patch written
  by David Watson.

- Issue #7647: The posix module now has the ST_RDONLY and ST_NOSUID constants,
  for use with the statvfs() function.  Patch by Adam Jackson.

- Issue #8688: MANIFEST files created by distutils now include a magic comment
  indicating they are generated.  Manually maintained MANIFESTs without this
  marker will not be overwritten or removed.

- Issue #7467: when reading a file from a ZIP archive, its CRC is checked and a
  BadZipfile error is raised if it doesn't match (as used to be the case in
  Python 2.5 and earlier).

- Issue #9550: a BufferedReader could issue an additional read when the original
  read request had been satisfied, which could block indefinitely when the
  underlying raw IO channel was e.g. a socket.  Report and original patch by
  Jason V. Miller.

- Issue #3757: thread-local objects now support cyclic garbage collection.
  Thread-local objects involved in reference cycles will be deallocated timely
  by the cyclic GC, even if the underlying thread is still running.

- Issue #9452: Add read_file, read_string, and read_dict to the configparser
  API; new source attribute to exceptions.

- Issue #6231: Fix xml.etree.ElementInclude to include the tail of the current
  node.

- Issue #8047: Fix the xml.etree serializer to return bytes by default.  Use
  ``encoding="unicode"`` to generate a Unicode string.

- Issue #8280: urllib2's Request method will remove fragments in the url.  This
  is how it is supposed to work, wget and curl do the same.  Previous behavior
  was wrong.

- Issue #6683: For SMTP logins we now try all authentication methods advertised
  by the server.  Many servers are buggy and advertise authentication methods
  they do not support in reality.

- Issue #8814: function annotations (the ``__annotations__`` attribute) are now
  included in the set of attributes copied by default by functools.wraps and
  functools.update_wrapper.  Patch by Terrence Cole.

- Issue #2944: asyncore doesn't handle connection refused correctly.

- Issue #4184: Private attributes on smtpd.SMTPChannel made public and deprecate
  the private attributes. Add tests for smtpd module.

- Issue #3196: email header decoding is now forgiving if an RFC2047 encoded word
  encoded in base64 is lacking padding.

- Issue #9444: Argparse now uses the first element of prefix_chars as the option
  character for the added 'h/help' option if prefix_chars does not contain a
  '-', instead of raising an error.

- Issue #7372: Fix pstats regression when stripping paths from profile data
  generated with the profile module.

- Issue #9428: Fix running scripts with the profile/cProfile modules from the
  command line.

- Issue #7781: Fix restricting stats by entry counts in the pstats interactive
  browser.

- Issue #9209: Do not crash in the pstats interactive browser on invalid regular
  expressions.

- Update collections.OrderedDict to match the implementation in Py2.7 (based on
  lists instead of weakly referenced Link objects).

- Issue #8397: Raise an error when attempting to mix iteration and regular reads
  on a BZ2File object, rather than returning incorrect results.

- Issue #9448: Fix a leak of OS resources (mutexes or semaphores) when
  re-initializing a buffered IO object by calling its ``__init__`` method.

- Issue #1713: Fix os.path.ismount(), which returned true for symbolic links
  across devices.

- Issue #8826: Properly load old-style "expires" attribute in http.cookies.

- Issue #1690103: Fix initial namespace for code run with trace.main().

- Issue #7395: Fix tracebacks in pstats interactive browser.

- Issue #8230: Fix Lib/test/sortperf.py.

- Issue #8620: when a cmd.Cmd() is fed input that reaches EOF without a final
  newline, it no longer truncates the last character of the last command line.

- Issue #5146: Handle UID THREAD command correctly in imaplib.

- Issue #5147: Fix the header generated for cookie files written by
  http.cookiejar.MozillaCookieJar.

- Issue #8198: In pydoc, output all help text to the correct stream when
  sys.stdout is reassigned.

- Issue #7909: Do not touch paths with the special prefixes ``\\.\`` or ``\\?\``
  in ntpath.normpath().

- Issue #1286: Allow using fileinput.FileInput as a context manager.

- Add lru_cache() decorator to the functools module.

Tools/Demos
-----------

- Fix ``Tools/scripts/checkpyc.py`` after PEP 3147.

- Issue #8867: Fix ``Tools/scripts/serve.py`` to work with files containing
  non-ASCII content.

Tests
-----

- Issue #9601: Provide a test case for ftplib.parse257.

- Issue #8857: Provide a test case for socket.getaddrinfo.

- Issue #7564: Skip test_ioctl if another process is attached to /dev/tty.

- Issue #8433: Fix test_curses failure with newer versions of ncurses.

- Issue #9496: Provide a test suite for the rlcompleter module.  Patch by
  Michele Orrù.

- Issue #8687: provide a test suite for sched.py module.

Build
-----

- Issue #1303434: Generate ZIP file containing all PDBs.

- Issue #9193: PEP 3149 is accepted.

- Issue #3101: Helper functions _add_one_to_index_C() and _add_one_to_index_F()
  become _Py_add_one_to_index_C() and _Py_add_one_to_index_F(), respectively.

- Issue #9700: define HAVE_BROKEN_POSIX_SEMAPHORES under AIX 6.x.  Patch by
  Sébastien Sablé.

- Don't run pgen twice when using make -j.


What's New in Python 3.2 Alpha 1?
=================================

*Release date: 01-Aug-2010*

Core and Builtins
-----------------

- Issue #8991: convertbuffer() rejects discontiguous buffers.

- Issue #7616: Fix copying of overlapping memoryview slices with the Intel
  compiler.

- Issue #8413: structsequence now subclasses tuple.

- Issue #8271: during the decoding of an invalid UTF-8 byte sequence, only the
  start byte and the continuation byte(s) are now considered invalid, instead of
  the number of bytes specified by the start byte.  E.g.:
  '\xf1\x80AB'.decode('utf-8', 'replace') now returns u'\ufffdAB' and replaces
  with U+FFFD only the start byte ('\xf1') and the continuation byte ('\x80')
  even if '\xf1' is the start byte of a 4-bytes sequence.  Previous versions
  returned a single u'\ufffd'.

- Issue #9011: A negated imaginary literal (e.g., "-7j") now has real part -0.0
  rather than 0.0.  So "-7j" is now exactly equivalent to "-(7j)".

- Be more specific in error messages about positional arguments.

- Issue #8949: "z" format of PyArg_Parse*() functions doesn't accept bytes
  objects, as described in the documentation.

- Issue #6543: Write the traceback in the terminal encoding instead of utf-8.
  Fix the encoding of the modules filename.  Patch written by Amaury Forgeot
  d'Arc.

- Issue #9011: Remove buggy and unnecessary (in 3.x) ST->AST compilation code
  dealing with unary minus applied to a constant.  The removed code was mutating
  the ST, causing a second compilation to fail.

- Issue #850997: mbcs encoding (Windows only) handles errors argument: strict
  mode raises unicode errors.  The encoder only supports "strict" and "replace"
  error handlers, the decoder only supports "strict" and "ignore" error
  handlers.  Patch written by Mark Hammond.

- Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
  "w*" format instead. Add tests for "w*" format.

- Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
  formats if the string contains a null byte/character.  Write unit tests for
  string formats.

- Issue #7490: To facilitate sharing of doctests between 2.x and 3.x test
  suites, the IGNORE_EXCEPTION_DETAIL directive now also ignores the module
  location of the raised exception.

- Issue #8969: On Windows, use mbcs codec in strict mode to encode and decode
  filenames and enable os.fsencode().

- Issue #9058: Remove assertions about INT_MAX in UnicodeDecodeError.

- Issue #8941: Decoding big endian UTF-32 data in UCS-2 builds could crash the
  interpreter with characters outside the Basic Multilingual Plane (higher than
  0x10000).

- Issue #8950: (See also issue #5080).  Py_ArgParse*() functions now raise
  TypeError instead of giving a DeprecationWarning when a float is parsed using
  the 'L' code (for long long).  (All other integer codes already raise
  TypeError in this case.)

- Issue #8922: Normalize the encoding name in PyUnicode_AsEncodedString() to
  enable shortcuts for upper case encoding name. Add also a shortcut for
  "iso-8859-1" in PyUnicode_AsEncodedString() and PyUnicode_Decode().

- Issue #8838: Remove codecs.charbuffer_encode() function.  The buffer protocol
  doesn't support "char buffer" anymore in Python 3.

- Issue #8339: Remove "t#" format of PyArg_Parse*() functions, use "s#" or "s*"
  instead.  codecs.charbuffer_encode() now accepts modifiable buffer objects
  like bytearray.

- Issue #8837: Remove "O?" format of PyArg_Parse*() functions.  The format is no
  used anymore and it was never documented.

- In str.format(), raise a ValueError when indexes to arguments are too large.

- Issue #2844: Make int('42', n) consistently raise ValueError for invalid
  integers n (including n = -909).

- Issue #8188: Introduce a new scheme for computing hashes of numbers (instances
  of int, float, complex, decimal.Decimal and fractions.Fraction) that makes it
  easy to maintain the invariant that hash(x) == hash(y) whenever x and y have
  equal value.

- Issue #8748: Fix two issues with comparisons between complex and integer
  objects.  (1) The comparison could incorrectly return True in some cases
  (2**53+1 == complex(2**53) == 2**53), breaking transitivity of equality.
  (2) The comparison raised an OverflowError for large integers, leading to
  unpredictable exceptions when combining integers and complex objects in sets
  or dicts.

- Issue #8766: Initialize _warnings module before importing the first module.
  Fix a crash if an empty directory called "encodings" exists in sys.path.

- Issue #8589: Decode PYTHONWARNINGS environment variable with the file system
  encoding and surrogateescape error handler instead of the locale encoding to
  be consistent with os.environ.  Add PySys_AddWarnOptionUnicode() function.

- PyObject_Dump() encodes unicode objects to utf8 with backslashreplace (instead
  of strict) error handler to escape surrogates.

- Issue #8715: Create PyUnicode_EncodeFSDefault() function: Encode a Unicode
  object to Py_FileSystemDefaultEncoding with the "surrogateescape" error
  handler, and return bytes.  If Py_FileSystemDefaultEncoding is not set, fall
  back to UTF-8.

- Enable shortcuts for common encodings in PyUnicode_AsEncodedString() for any
  error handler, not only the default error handler (strict).

- Issue #8610: Load file system codec at startup, and display a fatal error on
  failure.  Set the file system encoding to utf-8 (instead of None) if getting
  the locale encoding failed, or if nl_langinfo(CODESET) function is missing.

- PyFile_FromFd() uses PyUnicode_DecodeFSDefault() instead of
  PyUnicode_FromString() to support surrogates in the filename and use the right
  encoding.

- Issue #7507: Quote "!" in pipes.quote(); it is special to some shells.

- PyUnicode_DecodeFSDefaultAndSize() uses surrogateescape error handler.

- Issue #8419: Prevent the dict constructor from accepting non-string keyword
  arguments.

- Issue #8124: PySys_WriteStdout() and PySys_WriteStderr() don't execute
  indirectly Python signal handlers anymore because mywrite() ignores exceptions
  (KeyboardInterrupt).

- Issue #8092: Fix PyUnicode_EncodeUTF8() to support error handler producing
  unicode string (eg. backslashreplace).

- Issue #8485: PyUnicode_FSConverter() doesn't accept byteearray objects
  anymore, you have to convert your bytearray filenames to bytes.

- Issue #7332: Remove the 16KB stack-based buffer in
  PyMarshal_ReadLastObjectFromFile, which doesn't bring any noticeable benefit
  compared to the dynamic memory allocation fallback.  Patch by Charles-François
  Natali.

- Issue #8417: Raise an OverflowError when an integer larger than sys.maxsize is
  passed to bytes or bytearray.

- Issue #7301: Add environment variable $PYTHONWARNINGS.

- Issue #8329: Don't return the same lists from select.select when no fds are
  changed.

- Issue #8259: 1L << (2**31) no longer produces an 'outrageous shift error' on
  64-bit machines.  The shift count for either left or right shift is permitted
  to be up to sys.maxsize.

- Ensure that tokenization of identifiers is not affected by locale.

- Issue #1222585: Added LDCXXSHARED for C++ support. Patch by Arfrever.

- Raise a TypeError when trying to delete a T_STRING_INPLACE struct member.

- Issue #8211: Save/restore CFLAGS around AC_PROG_CC in configure.in, in case it
  is set.

- Issue #8226: sys.setfilesystemencoding() raises a LookupError if the encoding
  is unknown.

- Issue #1583863: A str subclass can now override the __str__ method.

- Issue #8014: Setting a T_UINT or T_PYSSIZET attribute of an object with
  PyMemberDefs could produce an internal error; raise TypeError instead.

- Issue #7845: Rich comparison methods on the complex type now return
  NotImplemented rather than raising a TypeError when comparing with an
  incompatible type; this allows user-defined classes to implement their own
  comparisons with complex.

- Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt
  (SIGINT). If an error occurs while importing the site module, the error is
  printed and Python exits. Initialize the GIL before importing the site module.

- Issue #7173: Generator finalization could invalidate sys.exc_info().

- Issue #7544: Preallocate thread memory before creating the thread to avoid a
  fatal error in low memory condition.

- Issue #7820: The parser tokenizer restores all bytes in the right if the BOM
  check fails.

- Handle errors from looking up __prepare__ correctly.

- Issue #5939: Add additional runtime checking to ensure a valid capsule in
  Modules/_ctypes/callproc.c.

- Issue #7309: Fix unchecked attribute access when converting
  UnicodeEncodeError, UnicodeDecodeError, and UnicodeTranslateError to strings.

- Issue #6902: Fix problem with built-in types format incorrectly with 0
  padding.

- Issue #7988: Fix default alignment to be right aligned for complex.__format__.
  Now it matches other numeric types.

- Issue #5988: Remove deprecated functions PyOS_ascii_formatd,
  PyOS_ascii_strtod, and PyOS_ascii_atof.  Use PyOS_double_to_string and
  PyOS_string_to_double instead.  See issue #5835 for the original deprecations.

- Issue #7385: Fix a crash in `MemoryView_FromObject` when `PyObject_GetBuffer`
  fails.  Patch by Florent Xicluna.

- Issue #7788: Fix an interpreter crash produced by deleting a list slice with
  very large step value.

- Issue #7766: Change sys.getwindowsversion() return value to a named tuple and
  add the additional members returned in an OSVERSIONINFOEX structure.  The new
  members are service_pack_major, service_pack_minor, suite_mask, and
  product_type.

- Issue #7561: Operations on empty bytearrays (such as `int(bytearray())`) could
  crash in many places because of the PyByteArray_AS_STRING() macro returning
  NULL.  The macro now returns a statically allocated empty string instead.

- Issue #6690: Optimize the bytecode for expressions such as `x in {1, 2, 3}`,
  where the right hand operand is a set of constants, by turning the set into a
  frozenset and pre-building it as a constant.  The comparison operation is made
  against the constant instead of building a new set each time it is executed (a
  similar optimization already existed which turned a list of constants into a
  pre-built tuple).  Patch and additional tests by Dave Malcolm.

- Issue #7622: Improve the split(), rsplit(), splitlines() and replace() methods
  of bytes, bytearray and unicode objects by using a common implementation based
  on stringlib's fast search.  Patch by Florent Xicluna.

- Issue #7632: Fix various str -> float conversion bugs present in 2.7 alpha 2,
  including: (1) a serious 'wrong output' bug that could occur for long (> 40
  digit) input strings, (2) a crash in dtoa.c that occurred in debug builds when
  parsing certain long numeric strings corresponding to subnormal values, (3) a
  memory leak for some values large enough to cause overflow, and (4) a number
  of flaws that could lead to incorrectly rounded results.

- The __complex__ method is now looked up on the class of instances to make it
  consistent with other special methods.

- Issue #7462: Implement the stringlib fast search algorithm for the `rfind`,
  `rindex`, `rsplit` and `rpartition` methods.  Patch by Florent Xicluna.

- Issue #7604: Deleting an unset slotted attribute did not raise an
  AttributeError.

- Issue #7534: Fix handling of IEEE specials (infinities, nans, negative zero)
  in ** operator.  The behaviour now conforms to that described in C99 Annex F.

- Issue #1811: improve accuracy and cross-platform consistency for true division
  of integers: the result of a/b is now correctly rounded for ints a and b (at
  least on IEEE 754 platforms), and in particular does not depend on the
  internal representation of an int.

- Issue #6834: replace the implementation for the 'python' and 'pythonw'
  executables on OSX.

  These executables now work properly with the arch(1) command: ``arch -ppc
  python`` will start a universal binary version of python in PPC mode (unlike
  previous releases).

- Issue #7466: Segmentation fault when the garbage collector is called in the
  middle of populating a tuple.  Patch by Florent Xicluna.

- Issue #7419: setlocale() could crash the interpreter on Windows when called
  with invalid values.

- Issue #6077: On Windows, files opened with tempfile.TemporaryFile in "wt+"
  mode would appear truncated on the first '0x1a' byte (aka. Ctrl+Z).

- Issue #7085: Fix crash when importing some extensions in a thread on MacOSX
  10.6.

- Issue #1757126: Fix the cyrillic-asian alias for the ptcp154 encoding.

- Issue #6970: Remove redundant calls when comparing objects that don't
  implement the relevant rich comparison methods.

- Issue #7298: Fixes for range and reversed(range(...)).  Iteration over
  range(a, b, c) incorrectly gave an empty iterator when a, b and c fit in C
  long but the length of the range did not.  Also fix several cases where
  reversed(range(a, b, c)) gave wrong results, and fix a refleak for
  reversed(range(a, b, c)) with large arguments.

- Issue #7244: itertools.izip_longest() no longer ignores exceptions raised
  during the formation of an output tuple.

- Issue #3297: On wide unicode builds, do not split unicode characters into
  surrogates.

- Remove length limitation when constructing a complex number from a string.

- Issue #1087418: Boost performance of bitwise operations for longs.

- Support for AtheOS has been completely removed from the code base. It was
  disabled since Python 3.0.

- Support for several legacy threading libraries has been disabled. These
  libraries are: Mach C threads, SunOS LWP, GNU pth, Irix threads. Support code
  will be entirely removed in 3.3.

- Support for OSF* has been disabled. If nobody stands up, support will be
  removed in 3.3. See <http://bugs.python.org/issue8606>.

- Peephole constant folding had missed UNARY_POSITIVE.

- Issue #1722344: threading._shutdown() is now called in Py_Finalize(), which
  fixes the problem of some exceptions being thrown at shutdown when the
  interpreter is killed. Patch by Adam Olsen.

- Issue #7147: Remove support for compiling Python without complex number
  support.

- Issue #7120: logging: Removed import of multiprocessing which is causing crash
  in GAE.

- Issue #1754094: Improve the stack depth calculation in the compiler.  There
  should be no other effect than a small decrease in memory use.  Patch by
  Christopher Tur Lesniewski-Laas.

- Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when using
  byte values greater than 127.  Patch by Derk Drukker.

- Issue #1571184: The Unicode database contains properties for more characters.
  The tables for code points representing numeric values, white spaces or line
  breaks are now generated from the official Unicode Character Database files,
  and include information from the Unihan.txt file.

- Issue #7019: Raise ValueError when unmarshalling bad long data, instead of
  producing internally inconsistent Python longs.

- Issue #6990: Fix threading.local subclasses leaving old state around after a
  reference cycle GC which could be recycled by new locals.

- Issue #5460: Fix an ambiguity in the grammar.

- Issue #1766304: Improve performance of membership tests on range objects.

- Issue #6713: Improve performance of integer -> string conversions.

- Issue #6846: Fix bug where bytearray.pop() returns negative integers.

- Issue #6750: A text file opened with io.open() could duplicate its output when
  writing from multiple threads at the same time.

- Issue #6707: dir() on an uninitialized module caused a crash.

- Issue #6540: Fixed crash for bytearray.translate() with invalid parameters.

- Issue #6573: set.union() stopped processing inputs if an instance of self
  occurred in the argument chain.

- Issue #6070: On posix platforms import no longer copies the execute bit from
  the .py file to the .pyc file if it is set.

- Issue #1616979: Added the cp720 (Arabic DOS) encoding.

- Issue #6428: Since Python 3.0, the __bool__ method must return a bool object,
  and not an int.  Fix the corresponding error message, and the documentation.

- The deprecated PyCObject has been removed.

- Issue #6347: Include inttypes.h as well as stdint.h in pyport.h.  This fixes a
  build failure on HP-UX: int32_t and uint32_t are defined in inttypes.h instead
  of stdint.h on that platform.

- Issue #6373: Fixed a SystemError when encoding with the latin-1 codec and the
  'surrogateescape' error handler, a string which contains unpaired surrogates.

- Issue #4856: Remove checks for win NT.

- Issue #6687: PyBytes_FromObject() no longer accepts an integer as its argument
  to construct a null-initialized bytes object.

- Issue #1023290: Add from_bytes() and to_bytes() methods to integers.  These
  methods allow the conversion of integers to bytes, and vice-versa.

- Issue #7382: Fix bug in bytes.__getnewargs__ that prevented bytes instances
  from being copied with copy.copy(), and bytes subclasses from being pickled
  properly.

- Code objects now support weak references.

- Issue #7072: isspace(0xa0) is true on Mac OS X.

- Issue #8084: PEP 370 now conforms to system conventions for framework builds
  on MacOS X. That is, "python setup.py install --user" will install into
  "~/Library/Python/2.7" instead of "~/.local".

C-API
-----

- Issue #2443: A new macro, `Py_VA_COPY`, copies the state of the
  variable argument list.  `Py_VA_COPY` is equivalent to C99
  `va_copy`, but available on all python platforms.

- PySlice_GetIndicesEx now clips the step to [-PY_SSIZE_T_MAX, PY_SSIZE_T_MAX]
  instead of [-PY_SSIZE_T_MAX-1, PY_SSIZE_T_MAX].  This makes it safe to do
  "step = -step" when reversing a slice.

- Issue #5753: A new C API function, `PySys_SetArgvEx`, allows embedders of the
  interpreter to set sys.argv without also modifying sys.path.  This helps fix
  `CVE-2008-5983
  <http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5983>`_.

- Add PyArg_ValidateKeywordArguments, which checks if all keyword arguments are
  strings in an efficient manner.

- Issue #8276: PyEval_CallObject() is now only available in macro form.  The
  function declaration, which was kept for backwards compatibility reasons, is
  now removed (the macro was introduced in 1997!).

- Issue #7767: New function PyLong_AsLongLongAndOverflow added, analogous to
  PyLong_AsLongAndOverflow.

- Make PyUnicode_CompareWithASCIIString return not equal if the Python string
  has '\0' at the end.

- Issue #5080: The argument parsing functions PyArg_ParseTuple,
  PyArg_ParseTupleAndKeywords, PyArg_VaParse, PyArg_VaParseTupleAndKeywords and
  PyArg_Parse now raise a DeprecationWarning for float arguments passed with the
  'L' format code.  This will become a TypeError in a future version of Python,
  to match the behaviour of the other integer format codes.

- Issue #7033: Function ``PyErr_NewExceptionWithDoc()`` added.

- Issue #7414: 'C' code wasn't being skipped properly (for keyword arguments) in
  PyArg_ParseTupleAndKeywords.

- Issue #7228: Add '%lld' and '%llu' support to PyString_FromFormat(V) and
  PyErr_Format, on machines with HAVE_LONG_LONG defined.

- Issue #6151: Made PyDescr_COMMON conform to standard C (like PyObject_HEAD in
  PEP 3123).  The PyDescr_TYPE and PyDescr_NAME macros should be used for
  accessing the d_type and d_name members of structures using PyDescr_COMMON.

- Issue #6405: Remove duplicate type declarations in descrobject.h.

- The code flags for old __future__ features are now available again.

- Issue #5954: Add a PyFrame_GetLineNumber() function to replace most uses of
  PyCode_Addr2Line().

- Issue #5959: Add a PyCode_NewEmpty() function to create a new empty code
  object at a specified file, function, and line number.

- Issue #1419652: Change the first argument to PyImport_AppendInittab() to
  ``const char *`` as the string is stored beyond the call.

- Issue #2422: When compiled with the ``--with-valgrind`` option, the pymalloc
  allocator will be automatically disabled when running under Valgrind.  This
  gives improved memory leak detection when running under Valgrind, while taking
  advantage of pymalloc at other times.

Library
-------

- In pdb, when Ctrl-C is entered while defining commands for a breakpoint, the
  old commands are restored.

- For traceback debugging, the pdb listing now also shows the locations where
  the exception was originally (re)raised, if it differs from the last line
  executed (e.g. in case of finally clauses).

- The pdb command "source" has been added.  It displays the source code for a
  given object, if possible.

- The pdb command "longlist" has been added.  It displays the whole source code
  for the current function.

- Issue #1503502: Make pdb.Pdb easier to subclass by putting message and error
  output into methods.

- Issue #809887: Make the output of pdb's breakpoint deletions more consistent;
  emit a message when a breakpoint is enabled or disabled.

- Issue #5294: Fix the behavior of pdb's "continue" command when called in the
  top-level debugged frame.

- Issue #5727: Restore the ability to use readline when calling into pdb in
  doctests.

- Issue #6719: In pdb, do not stop somewhere in the encodings machinery if the
  source file to be debugged is in a non-builtin encoding.

- Issue #8048: Prevent doctests from failing when sys.displayhook has been
  reassigned.

- Issue #8015: In pdb, do not crash when an empty line is entered as a
  breakpoint command.

- In pdb, allow giving a line number to the "until" command.

- Issue #1437051: For pdb, allow "continue" and related commands in .pdbrc
  files.  Also, add a command-line option "-c" that runs a command as if given
  in .pdbrc.

- Issue #4179: In pdb, allow "list ." as a command to return to the currently
  debugged line.

- Issue #4108: In urllib.robotparser, if there are multiple ``User-agent: *``
  entries, consider the first one.

- Issue #6630: Allow customizing regex flags when subclassing the
  string.Template class.

- Issue #9411: Allow specifying an encoding for config files in the configparser
  module.

- Issue #1682942: Improvements to configparser: support alternate delimiters,
  alternate comment prefixes and empty lines in values.

- Issue #9354: Provide getsockopt() in asyncore's file_wrapper.

- Issue #8966: ctypes: Remove implicit bytes-unicode conversion.

- Issue #9378: python -m pickle <pickle file> will now load and display the
  first object in the pickle file.

- Issue #4770: Restrict binascii module to accept only bytes (as specified).
  And fix the email package to encode to ASCII instead of ``raw-unicode-escape``
  before ASCII-to-binary decoding.

- Issue #9384: ``python -m tkinter`` will now display a simple demo applet.

- The default size of the re module's compiled regular expression cache has been
  increased from 100 to 500 and the cache replacement policy has changed from
  simply clearing the entire cache on overflow to forgetting the least recently
  used cached compiled regular expressions.  This is a performance win for
  applications that use a lot of regular expressions and limits the impact of
  the performance hit anytime the cache is exceeded.

- Issue #7113: Speed up loading in configparser. Patch by Łukasz Langa.

- Issue #9032: XML-RPC client retries the request on EPIPE error.  The EPIPE
  error occurs when the server closes the socket and the client sends a big
  XML-RPC request.

- Issue #4629: getopt raises an error if an argument ends with "=", whereas
  getopt doesn't accept a value (eg. --help= is rejected if getopt uses
  ['help='] long options).

- Issue #7989: Added pure python implementation of the `datetime` module.  The C
  module is renamed to `_datetime` and if available, overrides all classes
  defined in datetime with fast C implementation.  Python implementation is based
  on the original python prototype for the datetime module by Tim Peters with
  minor modifications by the PyPy project.  The test suite now tests `datetime`
  module with and without `_datetime` acceleration using the same test cases.

- Issue #7895: platform.mac_ver() no longer crashes after calling os.fork().

- Issue #9323: Fixed a bug in trace.py that resulted in losing the name of the
  script being traced.  Patch by Eli Bendersky.

- Issue #9282: Fixed --listfuncs option of trace.py.  Thanks Eli Bendersky for
  the patch.

- Issue #3704: http.cookiejar was not properly handling URLs with a / in the
  parameters.

- Issue #9268: ``pickletools.dis()`` now has an optional *annotate* argument
  which controls printing of opcode descriptions in ``dis()`` output.

- Issue #1555570: email no longer inserts extra blank lines when a \r\n combo
  crosses an 8192 byte boundary.

- Issue #9243: Fix sndhdr module and add unit tests, contributed by James Lee.

- ``ast.literal_eval()`` now allows byte literals.

- Issue #9137: Fix issue in MutableMapping.update, which incorrectly treated
  keyword arguments called 'self' or 'other' specially.

- ``ast.literal_eval()`` now allows set literals.

- Issue #9164: Ensure that sysconfig handles duplicate -arch flags in CFLAGS.

- Issue #7646: The fnmatch pattern cache no longer grows without bound.

- Issue #9136: Fix 'dictionary changed size during iteration' RuntimeError
  produced when profiling the decimal module.  This was due to a dangerous
  iteration over 'locals()' in Context.__init__.

- Fix extreme speed issue in Decimal.pow when the base is an exact power of 10
  and the exponent is tiny (for example, ``Decimal(10) **
  Decimal('1e-999999999')``).

- Issue #9186: Fix math.log1p(-1.0) to raise ValueError, not OverflowError.

- Issue #9130: Fix validation of relative imports in parser module.

- Issue #9128: Fix validation of class decorators in parser module.

- Issue #9094: python -m pickletools will now disassemble pickle files listed in
  the command line arguments.  See output of python -m pickletools -h for more
  details.

- Issue #5468: urlencode to handle bytes type and other encodings in its query
  parameter. Patch by Dan Mahn.

- Issue #7673: Fix security vulnerability (CVE-2010-2089) in the audioop module,
  ensure that the input string length is a multiple of the frame size.

- Issue #6507: Accept source strings in dis.dis().  Original patch by Daniel
  Urban.

- Issue #7829: Clearly document that the dis module is exposing an
  implementation detail that is not stable between Python VMs or releases.

- Issue #6589: cleanup asyncore.socket_map in case smtpd.SMTPServer constructor
  raises an exception.

- Issue #9110: Addition of ContextDecorator to contextlib, for creating APIs
  that act as both context managers and decorators. contextmanager changes to
  use ContextDecorator.

- Implement importlib.abc.SourceLoader and deprecate PyLoader and PyPycLoader
  for removal in Python 3.4.

- Issue #9064: pdb's "up" and "down" commands now accept an optional argument
  giving the number of frames to go.

- Issue #9018: os.path.normcase() now raises a TypeError if the argument is not
  ``str`` or ``bytes``.

- Issue #9075: In the ssl module, remove the setting of a ``debug`` flag on an
  OpenSSL structure.

- Issue #8682: The ssl module now temporary increments the reference count of a
  socket object got through ``PyWeakref_GetObject``, so as to avoid possible
  deallocation while the object is still being used.

- Issue #1368368: FancyURLOpener class changed to throw an Exception on wrong
  password instead of presenting an interactive prompt.  Older behavior can be
  obtained by passing retry=True to http_error_xxx methods of FancyURLOpener.

- Issue #8720: Fix regression caused by fix for #4050 by making getsourcefile
  smart enough to find source files in the linecache.

- Issue #5610: feedparser no longer eats extra characters at the end of a body
  part if the body part ends with a ``\r\n``.

- Issue #8986: math.erfc was incorrectly raising OverflowError for values
  between -27.3 and -30.0 on some platforms.

- Issue #8784: Set tarfile default encoding to 'utf-8' on Windows.

- Issue #8966: If a ctypes structure field is an array of c_char, convert its
  value to bytes instead of str (as done for c_char and c_char_p).

- Issue #8188: Comparisons between Decimal and Fraction objects are now
  permitted, returning a result based on the exact numerical values of the
  operands.  This builds on issue #2531, which allowed Decimal-to-float
  comparisons; all comparisons involving numeric types (bool, int, float,
  complex, Decimal, Fraction) should now act as expected.

- Issue #8897: Fix sunau module, use bytes to write the header. Patch written by
  Thomas Jollans.

- Issue #8899: time.struct_time now has class and attribute docstrings.

- Issue #6470: Drop UNC prefix in FixTk.

- Issue #4768: base64 encoded email body parts were incorrectly stored as binary
  strings.  They are now correctly converted to strings.

- Issue #8833: tarfile created hard link entries with a size field != 0 by
  mistake.

- Charset.body_encode now correctly handles base64 encoding by encoding with the
  output_charset before calling base64mime.encode.  Passes the tests from 2.x
  issue #1368247.

- Issue #8845: sqlite3 Connection objects now have a read-only in_transaction
  attribute that is True iff there are uncommitted changes.

- Issue #1289118: datetime.timedelta objects can now be multiplied by float and
  divided by float and int objects.  Results are rounded to the nearest multiple
  of timedelta.resolution with ties resolved using round-half-to-even method.

- Issue #7150: Raise OverflowError if the result of adding or subtracting
  timedelta from date or datetime falls outside of the MINYEAR:MAXYEAR range.

- Issue #8806: add SSL contexts support to ftplib.

- Issue #4769: Fix main() function of the base64 module, use sys.stdin.buffer
  and sys.stdout.buffer (instead of sys.stdin and sys.stdout) to use the bytes
  API.

- Issue #8770: Now sysconfig displays information when it's called as a script.
  Initial idea by Sridhar Ratnakumar.

- Issue #6662: Fix parsing of malformatted charref (&#bad;), patch written by
  Fredrik Håård.

- Issue #8540: Decimal module: rename the Context._clamp attribute to
  Context.clamp and make it public.  This is useful in creating contexts that
  correspond to the decimal interchange formats specified in IEEE 754.

- Issue #6268: Fix seek() method of codecs.open(), don't read or write the BOM
  twice after seek(0). Fix also reset() method of codecs, UTF-16, UTF-32 and
  StreamWriter classes.

- Issue #3798: sys.exit(message) writes the message to sys.stderr file, instead
  of the C file stderr, to use stderr encoding and error handler.

- Issue #8782: Add a trailing newline in linecache.updatecache to the last line
  of files without one.

- Issue #8729: Return NotImplemented from collections.Mapping.__eq__ when
  comparing to a non-mapping.

- Issue #8774: tabnanny uses the encoding cookie (#coding:...) to use the
  correct encoding.

- Issue #4870: Add an `options` attribute to SSL contexts, as well as several
  ``OP_*`` constants to the `ssl` module.  This allows selectively disabling
  protocol versions, when used in combination with `PROTOCOL_SSLv23`.

- Issue #8759: Fixed user paths in sysconfig for posix and os2 schemes.

- Issue #8663: distutils.log emulates backslashreplace error handler. Fix
  compilation in a non-ASCII directory if stdout encoding is ASCII (eg. if
  stdout is not a TTY).

- Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.
  subprocess.Popen() and os._execvpe() support bytes program name. Add
  os.supports_bytes_environ flag: True if the native OS type of the environment
  is bytes (eg. False on Windows).

- Issue #8633: tarfile is now able to read and write archives with "raw" binary
  pax headers as described in POSIX.1-2008.

- Issue #1285086: Speed up urllib.parse functions: quote, quote_from_bytes,
  unquote, unquote_to_bytes.

- Issue #8688: Distutils now recalculates MANIFEST every time.

- Issue #8477: ssl.RAND_egd() and ssl._test_decode_cert() support str with
  surrogates and bytes for the filename.

- Issue #8550: Add first class ``SSLContext`` objects to the ssl module.

- Issue #8681: Make the zlib module's error messages more informative when the
  zlib itself doesn't give any detailed explanation.

- The audioop module now supports sound fragments of length greater than 2**31
  bytes on 64-bit machines, and is PY_SSIZE_T_CLEAN.

- Issue #4972: Add support for the context management protocol to the ftplib.FTP
  class.

- Issue #8664: In py_compile, create __pycache__ when the compiled path is
  given.

- Issue #8514: Add os.fsencode() function (Unix only): encode a string to bytes
  for use in the file system, environment variables or the command line.

- Issue #8571: Fix an internal error when compressing or decompressing a chunk
  larger than 1GB with the zlib module's compressor and decompressor objects.

- Issue #8603: Support bytes environmental variables on Unix: Add os.environb
  mapping and os.getenvb() function. os.unsetenv() encodes str argument to the
  file system encoding with the surrogateescape error handler (instead of
  utf8/strict) and accepts bytes. posix.environ keys and values are now bytes.

- Issue #8573: asyncore _strerror() function might throw ValueError.

- Issue #8483: asyncore.dispatcher's __getattr__ method produced confusing error
  messages when accessing undefined class attributes because of the cheap
  inheritance with the underlying socket object.  The cheap inheritance has been
  deprecated.

- Issue #4265: shutil.copyfile() was leaking file descriptors when disk fills.
  Patch by Tres Seaver.

- Issue #8390: tarfile uses surrogateescape as the default error handler
  (instead of replace in read mode or strict in write mode).

- Issue #7755: Use an unencumbered audio file for tests.

- Issue #8621: uuid.uuid4() returned the same sequence of values in the parent
  and any children created using ``os.fork`` on MacOS X 10.6.

- Issue #8567: Fix precedence of signals in Decimal module: when a Decimal
  operation raises multiple signals and more than one of those signals is
  trapped, the specification determines the order in which the signals should be
  handled.  In many cases this order wasn't being followed, leading to the wrong
  Python exception being raised.

- Issue #7865: The close() method of ``io`` objects should not swallow
  exceptions raised by the implicit flush().  Also qensure that calling close()
  several times is supported.  Patch by Pascal Chambon.

- Issue #4687: Fix accuracy of garbage collection runtimes displayed with
  gc.DEBUG_STATS.

- Issue #8354: The siginterrupt setting is now preserved for all signals, not
  just SIGCHLD.

- Issue #7192: webbrowser.get("firefox") now works on Mac OS X, as does
  webbrowser.get("safari").

- Issue #8464: tarfile no longer creates files with execute permissions set when
  mode="w|" is used.

- Issue #7834: Fix connect() of Bluetooth L2CAP sockets with recent versions of
  the Linux kernel.  Patch by Yaniv Aknin.

- Issue #8295: Added shutil.unpack_archive.

- Issue #6312: Fixed http HEAD request when the transfer encoding is chunked.
  It should correctly return an empty response now.

- Issue #8546: Reject None given as the buffering argument to _pyio.open.

- Issue #8549: Fix compiling the _ssl extension under AIX.  Patch by
  Sridhar Ratnakumar.

- Issue #6656: fix locale.format_string to handle escaped percents
  and mappings.

- Issue #2302: Fix a race condition in SocketServer.BaseServer.shutdown, where
  the method could block indefinitely if called just before the event loop
  started running.  This also fixes the occasional freezes witnessed in
  test_httpservers.

- Issue #8524: When creating an SSL socket, the timeout value of the original
  socket wasn't retained (instead, a socket with a positive timeout would be
  turned into a non-blocking SSL socket).

- Issue #5103: SSL handshake would ignore the socket timeout and block
  indefinitely if the other end didn't respond.

- The do_handshake() method of SSL objects now adjusts the blocking mode of the
  SSL structure if necessary (as other methods already do).

- Issue #8391: os.execvpe() and os.getenv() supports unicode with surrogates and
  bytes strings for environment keys and values.

- Issue #8467: Pure Python implementation of subprocess encodes the error
  message using surrogatepass error handler to support surrogates in the
  message.

- Issue #8468: bz2.BZ2File() accepts str with surrogates and bytes filenames.

- Issue #8451: Syslog module now uses basename(sys.argv[0]) instead of the
  string "python" as the *ident*.  openlog() arguments are all optional and
  keywords.

- Issue #8108: Fix the unwrap() method of SSL objects when the socket has a
  non-infinite timeout.  Also make that method friendlier with applications
  wanting to continue using the socket in clear-text mode, by disabling
  OpenSSL's internal readahead.  Thanks to Darryl Miles for guidance.

- Issue #8496: make mailcap.lookup() always return a list, rather than an
  iterator.  Patch by Gregory Nofi.

- Issue #8195: Fix a crash in sqlite Connection.create_collation() if the
  collation name contains a surrogate character.

- Issue #8484: Load all ciphers and digest algorithms when initializing the _ssl
  extension, such that verification of some SSL certificates doesn't fail
  because of an "unknown algorithm".

- Issue #6547: Added the ignore_dangling_symlinks option to shutil.copytree.

- Issue #1540112: Now allowing the choice of a copy function in shutil.copytree.

- Issue #4814: timeout parameter is now applied also for connections resulting
  from PORT/EPRT commands.

- Issue #8463: added missing reference to bztar in shutil's documentation.

- Issue #7154: urllib.request can now detect the proxy settings on OSX 10.6 (as
  long as the user didn't specify 'automatic proxy configuration').

- Issue #3817: ftplib.FTP.abort() method now considers 225 a valid response code
  as stated in RFC-959 at chapter 5.4.

- Issue #8394: _ctypes.dlopen() accepts bytes, bytearray and str with
  surrogates.

- Issue #850728: Add a *timeout* parameter to the `acquire()` method of
  `threading.Semaphore` objects.  Original patch by Torsten Landschoff.

- Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
  available cipher list.  Helps fix test_ssl with OpenSSL 1.0.0.

- Issue #8393: subprocess accepts bytes, bytearray and str with surrogates for
  the current working directory.

- Issue #7606: XML-RPC traceback stored in X-traceback is now encoded to ASCII
  using backslashreplace error handler.

- Issue #8412: os.system() now accepts bytes, bytearray and str with surrogates.

- Issue #2987: RFC2732 support for urlparse (IPv6 addresses). Patch by Tony
  Locke and Hans Ulrich Niedermann.

- Issue #5277: Fix quote counting when parsing RFC 2231 encoded parameters.

- Issue #7316: The acquire() method of lock objects in the ``threading``
  module now takes an optional timeout argument in seconds.  Timeout support
  relies on the system threading library, so as to avoid a semi-busy wait loop.

- Issue #8383: pickle and pickletools use surrogatepass error handler when
  encoding unicode as utf8 to support lone surrogates and stay compatible with
  Python 2.x and 3.x.

- Issue #7585: difflib context and unified diffs now place a tab between
  filename and date, conforming to the 'standards' they were originally designed
  to follow.  This improves compatibility with patch tools.

- Issue #7472: Fixed typo in email.encoders module; messages using ISO-2022
  character sets will now consistently use a Content-Transfer-Encoding of 7bit
  rather than sometimes being marked as 8bit.

- Issue #8375: test_distutils now checks if the temporary directory are still
  present before it cleans them.

- Issue #8374: Update the internal alias table in the ``locale`` module to
  cover recent locale changes and additions.

- Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
  using the new attributes `ssl.OPENSSL_VERSION`, `ssl.OPENSSL_VERSION_INFO` and
  `ssl.OPENSSL_VERSION_NUMBER`.

- Add functools.total_ordering() and functools.cmp_to_key().

- Issue #8257: The Decimal construct now accepts a float instance directly,
  converting that float to a Decimal of equal value:

     >>> Decimal(1.1)
     Decimal('1.100000000000000088817841970012523233890533447265625')

- Issue #8294: The Fraction constructor now accepts Decimal and float instances
  directly.

- Issue #7279: Comparisons involving a Decimal signaling NaN now signal
  InvalidOperation instead of returning False.  (Comparisons involving a quiet
  NaN are unchanged.)  Also, Decimal quiet NaNs are now hashable; Decimal
  signaling NaNs remain unhashable.

- Issue #2531: Comparison operations between floats and Decimal instances now
  return a result based on the numeric values of the operands; previously they
  returned an arbitrary result based on the relative ordering of id(float) and
  id(Decimal).  See also issue #8188, which adds Decimal-to-Fraction
  comparisons.

- Added a subtract() method to collections.Counter().

- Issue #8233: When run as a script, py_compile.py optionally takes a single
  argument `-` which tells it to read files to compile from stdin.  Each line is
  read on demand and the named file is compiled immediately.  (Original patch by
  Piotr Ożarowski).

- Backwards incompatible change: Unicode codepoints line tabulation (0x0B) and
  form feed (0x0C) are now considered linebreaks, as specified in Unicode
  Standard Annex #14.  See issue #7643.  http://www.unicode.org/reports/tr14/

- Comparisons using one of <, <=, >, >= between a complex instance and a
  Fractions instance now raise TypeError instead of returning True/False.  This
  makes Fraction <=> complex comparisons consistent with int <=> complex, float
  <=> complex, and complex <=> complex comparisons.

- Issue #8139: ossaudiodev didn't initialize its types properly, therefore some
  methods (such as oss_mixer_device.fileno()) were not available.  Initial patch
  by Bertrand Janin.

- Issue #8205: Remove the "Modules" directory from sys.path when Python is
  running from the build directory (POSIX only).

- Issue #7512: shutil.copystat() could raise an OSError when the filesystem
  didn't support chflags() (for example ZFS under FreeBSD).  The error is now
  silenced.

- Issue #7860: platform.uname now reports the correct 'machine' type when Python
  is running in WOW64 mode on 64 bit Windows.

- Issue #3890, #8222: Fix recv() and recv_into() on non-blocking SSL sockets.
  Also, enable the SSL_MODE_AUTO_RETRY flag on SSL sockets, so that blocking
  reads and writes are always retried by OpenSSL itself.

- Issue #4282: Fix the main function of the profile module for a non-ASCII
  script, open the file in binary mode and not in text mode with the default
  (utf8) encoding.

- Issue #8179: Fix macpath.realpath() on a non-existing path.

- Issue #8024: Update the Unicode database to 5.2.

- Issue #8168: py_compile now handles files with utf-8 BOMS.

- ``tokenize.detect_encoding`` now returns ``'utf-8-sig'`` when a UTF-8 BOM is
  detected.

- Issue #6716/2: Backslash-replace error output in compilall.

- Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox
  with Tcl/Tk-8.5.

- Issue #8140: extend compileall to compile single files.  Add -i option.

- Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the
  locale.

- The internals of the subprocess module on POSIX systems have been replaced by
  an extension module (_posixsubprocess) so that the fork()+exec() can be done
  safely without the possibility of deadlock in multithreaded applications.

- subprocess.Popen now has restore_signals and start_new_session features.  The
  default of restore_signals=True is a new behavior compared to earlier Python
  versions.  This means that signals such as SIGPIPE are not ignored by default
  in subprocesses launched by Python (Issue #1652).

- Issue #6472: The xml.etree package is updated to ElementTree 1.3.  The
  cElementTree module is updated too.

- Issue #7774: Set sys.executable to an empty string if argv[0] has been set to
  a non existent program name and Python is unable to retrieve the real program
  name.

- Issue #7880: Fix sysconfig when the python executable is a symbolic link.

- Issue #6509: fix re.sub to work properly when the pattern, the string, and the
  replacement were all bytes.  Patch by Antoine Pitrou.

- The sqlite3 module was updated to pysqlite 2.6.0. This fixes several obscure
  bugs and allows loading SQLite extensions from shared libraries.

- Issue #1054943: Fix ``unicodedata.normalize('NFC', text)`` for the Public
  Review Issue #29 (http://unicode.org/review/pr-29.html).

- Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler,
  reset also the pointer to the current pointer context.

- Issue #7232: Add support for the context management protocol to the TarFile
  class.

- Issue #7250: Fix info leak of os.environ across multi-run uses of
  wsgiref.handlers.CGIHandler.

- Issue #1729305: Fix doctest to handle encode error with "backslashreplace".

- Issue #691291: codecs.open() should not convert end of lines on reading and
  writing.

- Issue #7869: logging: improved diagnostic for format-time errors.

- Issue #7868: logging: added loggerClass attribute to Manager.

- logging: Implemented PEP 391.

- Issue #1537721: Add a writeheader() method to csv.DictWriter.

- Issue #7959: ctypes callback functions are now registered correctly with the
  cycle garbage collector.

- Issue #5801: removed spurious empty lines in wsgiref.

- Issue #6666: fix bug in trace.py that applied the list of directories to be
  ignored only to the first file.  Noted by Bogdan Opanchuk.

- Issue #7597: curses.use_env() can now be called before initscr().  Noted by
  Kan-Ru Chen.

- Issue #7310: fix the __repr__ of os.environ to show the environment variables.

- Issue #7970: email.Generator.flatten now correctly flattens message/rfc822
  messages parsed by email.Parser.HeaderParser.

- Issue #7361: Importlib was not properly checking the number of bytes in
  bytecode file when it was less than 8 bytes.

- Issue #7633: In the decimal module, Context class methods (with the exception
  of canonical and is_canonical) now accept instances of int and long wherever a
  Decimal instance is accepted, and implicitly convert that argument to Decimal.
  Previously only some arguments were converted.

- Issue #7835: shelve should no longer produce mysterious warnings during
  interpreter shutdown.

- Issue #2746: Don't escape ampersands and angle brackets ("&", "<", ">") in XML
  processing instructions and comments.  These raw characters are allowed by the
  XML specification, and are necessary when outputting e.g.  PHP code in a
  processing instruction.  Patch by Neil Muller.

- Issue #6233: ElementTree failed converting unicode characters to XML entities
  when they couldn't be represented in the requested output encoding.  Patch by
  Jerry Chen.

- Issue #6003: add an argument to ``zipfile.Zipfile.writestr`` to specify the
  compression type.

- Issue #4772: Raise a ValueError when an unknown Bluetooth protocol is
  specified, rather than fall through to AF_PACKET (in the `socket` module).
  Also, raise ValueError rather than TypeError when an unknown TIPC address type
  is specified.  Patch by Brian Curtin.

- Issue #6939: Fix file I/O objects in the `io` module to keep the original file
  position when calling `truncate()`.  It would previously change the file
  position to the given argument, which goes against the tradition of
  ftruncate() and other truncation APIs.  Patch by Pascal Chambon.

- Issue #7610: Reworked implementation of the internal
  ``zipfile.ZipExtFile`` class used to represent files stored inside an
  archive.  The new implementation is significantly faster and can be wrapped in
  an ``io.BufferedReader`` object for more speedups.  It also solves an
  issue where interleaved calls to `read()` and `readline()` give wrong results.
  Patch by Nir Aides.

- Issue #6963: Added "maxtasksperchild" argument to multiprocessing.Pool,
  allowing for a maximum number of tasks within the pool to be completed by the
  worker before that worker is terminated, and a new one created to replace it.

- Issue #7792: Registering non-classes to ABCs raised an obscure error.

- Issue #7785: Don't accept bytes in FileIO.write().

- Removed the functions 'verify' and 'vereq' from Lib/test/support.py.

- Issue #7773: Fix an UnboundLocalError in platform.linux_distribution() when
  the release file is empty.

- Issue #7561: Fix crashes when using bytearray objects with the posix
  module.

- Issue #1670765: Prevent email.generator.Generator from re-wrapping headers in
  multipart/signed MIME parts, which fixes one of the sources of invalid
  modifications to such parts by Generator.

- Issue #7703: Add support for the new buffer API to `binascii.a2bhqx`.  Patch
  by Florent Xicluna, along with some additional tests.

- Issue #7701: Fix crash in binascii.b2a_uu() in debug mode when given a 1-byte
  argument.  Patch by Victor Stinner.

- Issue #3299: Fix possible crash in the _sre module when given bad argument
  values in debug mode.  Patch by Victor Stinner.

- Issue #2846: Add support for gzip.GzipFile reading zero-padded files.  Patch
  by Brian Curtin.

- Issue #7681: Use floor division in appropriate places in the wave module.

- Issue #5372: Drop the reuse of .o files in Distutils' ccompiler (since
  Extension extra options may change the output without changing the .c
  file). Initial patch by Collin Winter.

- Issue #7617: Make sure distutils.unixccompiler.UnixCCompiler recognizes gcc
  when it has a fully qualified configuration prefix. Initial patch by Arfrever.

- Issue #7105: Make WeakKeyDictionary and WeakValueDictionary robust against the
  destruction of weakref'ed objects while iterating.

- Issue #7455: Fix possible crash in cPickle on invalid input.  Patch by Victor
  Stinner.

- Issue #1628205: Socket file objects returned by socket.socket.makefile() now
  properly handles EINTR within the read, readline, write & flush methods.  The
  socket.sendall() method now properly handles interrupted system calls.

- Issue #7471: Improve the performance of GzipFile's buffering mechanism, and
  make it implement the `io.BufferedIOBase` ABC to allow for further speedups by
  wrapping it in an `io.BufferedReader`.  Patch by Nir Aides.

- Issue #3972: http.client.HTTPConnection now accepts an optional source_address
  parameter to allow specifying where your connections come from.

- socket.create_connection now accepts an optional source_address parameter.

- Issue #5511: now zipfile.ZipFile can be used as a context manager.  Initial
  patch by Brian Curtin.

- Issue #7556: Make sure Distutils' msvc9compile reads and writes the MSVC XML
  Manifest file in text mode so string patterns can be used in regular
  expressions.

- Issue #7552: Removed line feed in the base64 Authorization header in the
  Distutils upload command to avoid an error when PyPI reads it.  This occurs on
  long passwords. Initial patch by JP St. Pierre.

- Issue #7231: urllib2 cannot handle https with proxy requiring auth.  Patch by
  Tatsuhiro Tsujikawa.

- Issue #4757: `zlib.compress` and other methods in the zlib module now raise a
  TypeError when given an `str` object (rather than a `bytes`-like object).
  Patch by Victor Stinner and Florent Xicluna.

- Issue #7349: Make methods of file objects in the io module accept None as an
  argument where file-like objects (ie StringIO and BytesIO) accept them to mean
  the same as passing no argument.

- Issue #7357: tarfile no longer suppresses fatal extraction errors by default.

- Issue #5949: added check for correct lineends in input from IMAP server in
  imaplib.

- Add count() and reverse() methods to collections.deque().

- Fix variations of extending deques:  d.extend(d)  d.extendleft(d)  d+=d

- Issue #6986: Fix crash in the JSON C accelerator when called with the wrong
  parameter types.  Patch by Victor Stinner.

- Issue #7457: added a read_pkg_file method to
  distutils.dist.DistributionMetadata.

- logging: Added optional `secure` parameter to SMTPHandler, to enable use of
  TLS with authentication credentials.

- Issue #1923: Fixed the removal of meaningful spaces when PKG-INFO is generated
  in Distutils.  Patch by Stephen Emslie.

- Issue #4120: Drop reference to CRT from manifest when building extensions with
  msvc9compiler.

- Issue #7333: The `posix` module gains an `initgroups()` function providing
  access to the initgroups(3) C library call on Unix systems which implement it.
  Patch by Jean-Paul Calderone.

- Issue #7408: Fixed distutils.tests.sdist so it doesn't check for group
  ownership when the group is not forced, because the group may be different
  from the user's group and inherit from its container when the test is run.

- Issue #4486: When an exception has an explicit cause, do not print its
  implicit context too.  This affects the `traceback` module as well as built-in
  exception printing.

- Issue #1515: Enable use of deepcopy() with instance methods.  Patch by Robert
  Collins.

- Issue #7403: logging: Fixed possible race condition in lock creation.

- Issue #6845: Add restart support for binary upload in ftplib.  The
  `storbinary()` method of FTP and FTP_TLS objects gains an optional `rest`
  argument.  Patch by Pablo Mouzo.

- Issue #5788: `datetime.timedelta` objects get a new `total_seconds()` method
  returning the total number of seconds in the duration.  Patch by Brian
  Quinlan.

- Issue #7133: SSL objects now support the new buffer API.

- Issue #1488943: difflib.Differ() doesn't always add hints for tab characters.

- Issue #6123: tarfile now opens empty archives correctly and consistently
  raises ReadError on empty files.

- Issue #7354: distutils.tests.test_msvc9compiler - dragfullwindows can be 2.

- Issue #5037: Proxy the __bytes__ special method instead to __bytes__ instead
  of __str__.

- Issue #7341: Close the internal file object in the TarFile constructor in case
  of an error.

- Issue #7293: distutils.test_msvc9compiler is fixed to work on any fresh
  Windows box. Help provided by David Bolen.

- Issue #2054: ftplib now provides an FTP_TLS class to do secure FTP using TLS
  or SSL.  Patch by Giampaolo Rodola'.

- Issue #7328: pydoc no longer corrupts sys.path when run with the '-m' switch.

- Issue #4969: The mimetypes module now reads the MIME database from the
  registry under Windows.  Patch by Gabriel Genellina.

- Issue #6816: runpy now provides a run_path function that allows Python code to
  execute file paths that refer to source or compiled Python files as well as
  zipfiles, directories and other valid sys.path entries that contain a
  __main__.py file.  This allows applications that run other Python scripts to
  support the same flexibility as the CPython command line itself.

- Issue #7318: multiprocessing now uses a timeout when it fails to establish a
  connection with another process, rather than looping endlessly.  The default
  timeout is 20 seconds, which should be amply sufficient for local connections.

- Issue #7197: Allow unittest.TextTestRunner objects to be pickled and
  unpickled.  This fixes crashes under Windows when trying to run
  test_multiprocessing in verbose mode.

- Issue #7893: ``unittest.TextTestResult`` is made public and a ``resultclass``
  argument added to the TextTestRunner constructor allowing a different result
  class to be used without having to subclass.

- Issue #7588: ``unittest.TextTestResult.getDescription`` now includes the test
  name in failure reports even if the test has a docstring.

- Issue #3001: Add a C implementation of recursive locks which is used by
  default when instantiating a `threading.RLock` object. This makes recursive
  locks as fast as regular non-recursive locks (previously, they were slower by
  10x to 15x).

- Issue #7282: Fix a memory leak when an RLock was used in a thread other than
  those started through `threading.Thread` (for example, using
  `_thread.start_new_thread()`).

- Issue #7187: Importlib would not silence the IOError raised when trying to
  write new bytecode when it was made read-only.

- Issue #7264: Fix a possible deadlock when deallocating thread-local objects
  which are part of a reference cycle.

- Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
  objects on 64-bit systems.  Patch by Michael Broghton.

- Issue #6896: mailbox.Maildir now invalidates its internal cache each time a
  modification is done through it.  This fixes inconsistencies and test failures
  on systems with slightly bogus mtime behaviour.

- Issue #7246 & Issue #7208: getpass now properly flushes input before reading
  from stdin so that existing input does not confuse it and lead to incorrect
  entry or an IOError.  It also properly flushes it afterwards to avoid the
  terminal echoing the input afterwards on OSes such as Solaris.

- Issue #7233: Fix a number of two-argument Decimal methods to make sure that
  they accept an int or long as the second argument.  Also fix buggy handling of
  large arguments (those with coefficient longer than the current precision) in
  shift and rotate.

- Issue #4750: Store the basename of the original filename in the gzip FNAME
  header as required by RFC 1952.

- Issue #1180: Added a new global option to ignore ~/.pydistutils.cfg in
  Distutils.

- Issue #7218: Fix test_site for win32, the directory comparison was done with
  an uppercase.

- Issue #7205: Fix a possible deadlock when using a BZ2File object from
  several threads at once.

- Issue #7077: logging: SysLogHandler now treats Unicode as per RFC 5424.

- Issue #7099: Decimal.is_normal now returns True for numbers with exponent
  larger than emax.

- Issue #7080: locale.strxfrm() raises a MemoryError on 64-bit non-Windows
  platforms, and assorted locale fixes by Derk Drukker.

- Issue #5833: Fix extra space character in readline completion with the GNU
  readline library version 6.0.

- Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment.

- Issue #7086: Added TCP support to SysLogHandler, and tidied up some
  anachronisms in the code which were a relic of 1.5.2 compatibility.

- Issue #7082: When falling back to the MIME 'name' parameter, the correct place
  to look for it is the Content-Type header.

- Make tokenize.detect_coding() normalize utf-8 and iso-8859-1 variants like the
  builtin tokenizer.

- Issue #7048: Force Decimal.logb to round its result when that result is too
  large to fit in the current precision.

- Issue #6236, #6348: Fix various failures in the I/O library under AIX and
  other platforms, when using a non-gcc compiler. Patch by Derk Drukker.

- Issue #4606: Passing 'None' if ctypes argtype is set to POINTER(...)  does now
  always result in NULL.

- Issue #5042: Structure sub-subclass does now initialize correctly with base
  class positional arguments.

- Issue #6882: Import uuid creates zombies processes.

- Issue #6635: Fix profiler printing usage message.

- Issue #6856: Add a filter keyword argument to TarFile.add().

- Issue #6888: pdb's alias command was broken when no arguments were given.

- Issue #6857: Default format() alignment should be '>' for Decimal instances.

- Issue #6795: int(Decimal('nan')) now raises ValueError instead of returning
  NaN or raising InvalidContext.  Also, fix infinite recursion in
  long(Decimal('nan')).

- Issue #6850: Fix bug in Decimal._parse_format_specifier for formats with no
  type specifier.

- Issue #6239: ctypes.c_char_p return value must return bytes.

- Issue #6838: Use a list to accumulate the value instead of repeatedly
  concatenating strings in http.client's HTTPResponse._read_chunked providing a
  significant speed increase when downloading large files servend with a
  Transfer-Encoding of 'chunked'.

- Trying to import a submodule from a module that is not a package, ImportError
  should be raised, not AttributeError.

- When the globals past to importlib.__import__() has __package__ set to None,
  fall back to computing what __package__ should be instead of giving up.

- Raise a TypeError when the name of a module to be imported for
  importlib.__import__ is not a string (was raising an AttributeError before).

- Allow the fromlist passed into importlib.__import__ to be any iterable.

- Have importlib raise ImportError if None is found in sys.modules.

- Issue #6054: Do not normalize stored pathnames in tarfile.

- Issue #6794: Fix Decimal.compare_total and Decimal.compare_total_mag: NaN
  payloads are now ordered by integer value rather than lexicographically.

- Issue #1356969: Add missing info methods in tix.HList.

- Issue #1522587: New constants and methods for the tix.Grid widget.

- Issue #1250469: Fix the return value of tix.PanedWindow.panes.

- Issue #1119673: Do not override tkinter.Text methods when creating a
  ScrolledText.

- Issue #6665: Fix fnmatch to properly match filenames with newlines in them.

- Issue #1135: Add the XView and YView mix-ins to avoid duplicating the xview*
  and yview* methods.

- Issue #6629: Fix a data corruption issue in the new I/O library, which could
  occur when writing to a BufferedRandom object (e.g. a file opened in "rb+" or
  "wb+" mode) after having buffered a certain amount of data for reading. This
  bug was not present in the pure Python implementation.

- Issue #6622: Fix "local variable 'secret' referenced before assignment" bug in
  POP3.apop.

- Issue #2715: Remove remnants of Carbon.File from binhex module.

- Issue #6595: The Decimal constructor now allows arbitrary Unicode decimal
  digits in input, as recommended by the standard.  Previously it was restricted
  to accepting [0-9].

- Issue #6106: telnetlib.Telnet.process_rawq doesn't handle default WILL/WONT
  DO/DONT correctly.

- Issue #1424152: Fix for http.client, urllib.request to support SSL while
  working through proxy.  Original patch by Christopher Li, changes made by
  Senthil Kumaran.

- Add importlib.abc.ExecutionLoader to represent the PEP 302 protocol for
  loaders that allow for modules to be executed. Both importlib.abc.PyLoader and
  PyPycLoader inherit from this class and provide implementations in relation to
  other methods required by the ABCs.

- importlib.abc.PyLoader did not inherit from importlib.abc.ResourceLoader like
  the documentation said it did even though the code in PyLoader relied on the
  abstract method required by ResourceLoader.

- Issue #6431: Make Fraction type return NotImplemented when it doesn't know how
  to handle a comparison without loss of precision.  Also add correct handling
  of infinities and nans for comparisons with float.

- Issue #6415: Fixed warnings.warn segfault on bad formatted string.

- Issue #6358: The exit status of a command started with os.popen() was reported
  differently than it did with python 2.x.

- Issue #6323: The pdb debugger did not exit when running a script with a syntax
  error.

- Issue #3392: The subprocess communicate() method no longer fails in select()
  when file descriptors are large; communicate() now uses poll() when possible.

- Issue #6369: Fix an RLE decompression bug in the binhex module.

- Issue #6344: Fixed a crash of mmap.read() when passed a negative argument.

- The deprecated function string.maketrans has been removed.

- Issue #4005: Fixed a crash of pydoc when there was a zip file present in
  sys.path.

- Issue #6218: io.StringIO and io.BytesIO instances are now picklable.

- The os.get_exec_path() function to return the list of directories that will be
  searched for an executable when launching a subprocess was added.

- Issue #7481: When a threading.Thread failed to start it would leave the
  instance stuck in initial state and present in threading.enumerate().

- Issue #1068268: The subprocess module now handles EINTR in internal os.waitpid
  and os.read system calls where appropriate.

- Issue #6729: Added ctypes.c_ssize_t to represent ssize_t.

- Issue #6247: The argparse module has been added to the standard library.

- Issue #8235: _socket: Add the constant ``SO_SETFIB``.  SO_SETFIB is a socket
  option available on FreeBSD 7.1 and newer.

- Issue #9315: Fix for the trace module to record correct class name
  for tracing methods.

Extension Modules
-----------------

- Issue #9959: Tweak formula used for computing math.log of an integer,
  making it marginally more accurate for exact powers of 2.

- Issue #9422: Fix memory leak when re-initializing a struct.Struct object.

- Issue #7900: The getgroups(2) system call on MacOSX behaves rather oddly
  compared to other unix systems. In particular, os.getgroups() does not reflect
  any changes made using os.setgroups() but basically always returns the same
  information as the id command. os.getgroups() can now return more than 16
  groups on MacOSX.

- Issue #6095: Make directory argument to os.listdir optional.

- Issue #9277: Fix bug in struct.pack for bools in standard mode (e.g.,
  struct.pack('>?')): if conversion to bool raised an exception then that
  exception wasn't properly propagated on machines where char is unsigned.

- Issue #5180: Fixed a bug that prevented loading 2.x pickles in 3.x python when
  they contain instances of old-style classes.

- Issue #9165: Add new functions math.isfinite and cmath.isfinite, to accompany
  existing isinf and isnan functions.

- Issue #1578269: Implement os.symlink for Windows 6.0+.  Patch by Jason
  R. Coombs.

- In struct.pack, correctly propagate exceptions from computing the truth of an
  object in the '?' format.

- Issue #9000: datetime.timezone objects now have eval-friendly repr.

- In the math module, correctly lookup __trunc__, __ceil__, and __floor__ as
  special methods.

- Issue #9005: Prevent utctimetuple() from producing year 0 or year 10,000.
  Prior to this change, timezone adjustment in utctimetuple() could produce
  tm_year value of 0 or 10,000.  Now an OverflowError is raised in these edge
  cases.

- Issue #6641: The ``datetime.strptime`` method now supports the ``%z``
  directive.  When the ``%z`` directive is present in the format string, an
  aware ``datetime`` object is returned with ``tzinfo`` bound to a
  ``datetime.timezone`` instance constructed from the parsed offset.  If both
  ``%z`` and ``%Z`` are present, the data in ``%Z`` field is used for timezone
  name, but ``%Z`` data without ``%z`` is discarded.

- Issue #5094: The ``datetime`` module now has a simple concrete class
  implementing ``datetime.tzinfo`` interface.  Instances of the new class,
  ``datetime.timezone``, return fixed name and UTC offset from their
  ``tzname(dt)`` and ``utcoffset(dt)`` methods.  The ``dst(dt)`` method always
  returns ``None``.  A class attribute, ``utc`` contains an instance
  representing the UTC timezone.  Original patch by Rafe Kaplan.

- Issue #8973: Add __all__ to struct module; this ensures that help(struct)
  includes documentation for the struct.Struct class.

- Issue #3129: Trailing digits in struct format string are no longer ignored.
  For example, "1" or "ilib123" are now invalid formats and cause
  ``struct.error`` to be raised.  Patch by Caleb Deveraux.

- Issue #7384: If the system readline library is linked against ncurses, the
  curses module must be linked against ncurses as well. Otherwise it is not safe
  to load both the readline and curses modules in an application.

- Issue #2810: Fix cases where the Windows registry API returns ERROR_MORE_DATA,
  requiring a re-try in order to get the complete result.

- Issue #8692: Optimize math.factorial: replace the previous naive algorithm
  with an improved 'binary-split' algorithm that uses fewer multiplications and
  allows many of the multiplications to be performed using plain C integer
  arithmetic instead of PyLong arithmetic.  Also uses a lookup table for small
  arguments.

- Issue #8674: Fixed a number of incorrect or undefined-behaviour-inducing
  overflow checks in the audioop module.

- Issue #8644: The accuracy of td.total_seconds() has been improved (by
  calculating with integer arithmetic instead of float arithmetic internally):
  the result is now always correctly rounded, and is equivalent to ``td /
  timedelta(seconds=1)``.

- Issue #2706: Allow division of a timedelta by another timedelta: timedelta /
  timedelta, timedelta % timedelta, timedelta // timedelta and divmod(timedelta,
  timedelta) are all supported.

- Issue #8314: Fix unsigned long long bug in libffi on Sparc v8.

- Issue #8300: When passing a non-integer argument to struct.pack with any
  integer format code, struct.pack first attempts to convert the non-integer
  using its __index__ method.  If that method is non-existent or raises
  TypeError it goes on to try the __int__ method, as described below.

- Issue #8142: Update libffi to the 3.0.9 release.

- Issue #6949: Allow the _dbm extension to be built with db 4.8.x.

- Issue #6544: Fix a reference leak in the kqueue implementation's error
  handling.

- Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as
  msvcr100.dll is not a platform assembly anymore.

- Issue #6508: Add posix.{getresuid,getresgid,setresuid,setresgid}.

- Issue #7078: Set struct.__doc__ from _struct.__doc__.

- Issue #3366: Add erf, erfc, expm1, gamma, lgamma functions to math module.

- Issue #6877: It is now possible to link the readline extension to the libedit
  readline emulation on OSX 10.5 or later.

- Issue #6848: Fix curses module build failure on OS X 10.6.

- Fix a segfault that could be triggered by expat with specially formed input.

- Issue #6561: '\d' in a regex now matches only characters with Unicode category
  'Nd' (Number, Decimal Digit).  Previously it also matched characters with
  category 'No'.

- Issue #4509: Array objects are no longer modified after an operation failing
  due to the resize restriction in-place when the object has exported buffers.

- Issue #2389: Array objects are now pickled in a portable manner.

- Expat: Fix DoS via XML document with malformed UTF-8 sequences
  (CVE_2009_3560).

- Issue #7242: On Solaris 9 and earlier calling os.fork() from within a thread
  could raise an incorrect RuntimeError about not holding the import lock.  The
  import lock is now reinitialized after fork.

- Issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1
  parameter on some platforms such as OS X.

- Build the ossaudio extension on GNU/kFreeBSD.

- Issue #7347: winreg: Add CreateKeyEx and DeleteKeyEx, as well as fix a bug in
  the return value of QueryReflectionKey.

- Issue #7567: PyCurses_setupterm: Don't call ``setupterm`` twice.

Build
-----

- Use OpenSSL 1.0.0a on Windows.

- Issue #9280: Make sharedinstall depend on sharedmods.

- Issue #9189: Make a user-specified CFLAGS, CPPFLAGS, or LDFLAGS setting
  override the configure and makefile defaults, without deleting options the
  user didn't intend to override.  Developers should no longer need to specify
  OPT or EXTRA_CFLAGS, although those variables are still present for
  backward-compatibility.

- Issue #8854: Fix finding Visual Studio 2008 on Windows x64.

- Issue #1759169, #8864: Drop _XOPEN_SOURCE on Solaris, define it for
  multiprocessing only.

- Issue #8625: Turn off optimization in --with-pydebug builds with gcc.
  (Optimization was unintentionally turned on in gcc --with-pydebug builds as a
  result of the issue #1628484 fix, combined with autoconf's strange choice of
  default CFLAGS produced by AC_PROG_CC for gcc.)

- Issue #3646: It is now easily possible to install a Python framework into your
  home directory on MacOSX, see Mac/README for more information.

- Issue #3928: os.mknod() now available in Solaris, also.

- Issue #3326: Build Python without -fno-strict-aliasing when the gcc does not
  give false warnings.

- Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable
  anymore.  It also forwards the LDFLAGS settings to the linker when building a
  shared library.

- Issue #6716: Quote -x arguments of compileall in MSI installer.  Exclude 2to3
  tests from compileall.

- Issue #3920, #7903: Define _BSD_SOURCE on OpenBSD 4.4 through 4.9.

- Issue #7632: When Py_USING_MEMORY_DEBUGGER is defined, disable the private
  memory allocation scheme in dtoa.c and use PyMem_Malloc and PyMem_Free
  instead.  Also disable caching of powers of 5.

- Issue #6491: Allow --with-dbmliborder to specify that no dbms will be built.

- Issue #6943: Use pkg-config to find the libffi headers when the
  --with-system-ffi flag is used.

- Issue #7609: Add a --with-system-expat option that causes the system's expat
  library to be used for the pyexpat module instead of the one included with
  Python.

- Issue #7589: Only build the nis module when the correct header files are
  found.

- Switch to OpenSSL 0.9.8l and sqlite 3.6.21 on Windows.

- Issue #5792: Extend the short float repr support to x86 systems using
  icc or suncc.

- Issue #6603: Change READ_TIMESTAMP macro in ceval.c so that it compiles
  correctly under gcc on x86-64.  This fixes a reported problem with the
  --with-tsc build on x86-64.

- Issue #6802: Fix build issues on MacOSX 10.6.

- Issue #6244: Allow detect_tkinter to look for Tcl/Tk 8.6.

- Issue #4601: 'make install' did not set the appropriate permissions on
  directories.

- Issue #5390: Add uninstall icon independent of whether file extensions are
  installed.

- Issue #7541: When using ``python-config`` with a framework install the
  compiler might use the wrong library.

- python-config now supports multiple options on the same command line.

- Issue #8509: Fix quoting in help strings and code snippets in configure.in.

- Issue #8510: Update to autoconf2.65.

Documentation
-------------

- Issue #9817: Add expat COPYING file; add expat, libffi and expat licenses
  to Doc/license.rst.

- Issue #9524: Document that two CTRL* signals are meant for use only
  with os.kill.

- Issue #9255: Document that the 'test' package is meant for internal Python use
  only.

- A small WSGI server was added as Tools/scripts/serve.py, and is used to
  implement a local documentation server via 'make serve' in the doc directory.

- Updating `Using Python` documentation to include description of CPython's -J
  and -X options.

- Document that importing a module that has None in sys.modules triggers an
  ImportError.

- Issue #6556: Fixed the Distutils configuration files location explanation for
  Windows.

- Update python manual page (options -B, -O0, -s, environment variables
  PYTHONDONTWRITEBYTECODE, PYTHONNOUSERSITE).

- Issue #8909: Added the size of the bitmap used in the installer created by
  distutils' bdist_wininst. Patch by Anatoly Techtonik.

Tests
-----

- Issue #9251: test_threaded_import didn't fail when run through regrtest if the
  import lock was disabled.

- Issue #8605: Skip test_gdb if Python is compiled with optimizations.

- Issue #7449: Skip test_socketserver if threading support is disabled.

- Issue #8672: Add a zlib test ensuring that an incomplete stream can be handled
  by a decompressor object without errors (it returns incomplete uncompressed
  data).

- Issue #8533: regrtest uses backslashreplace error handler for stdout to avoid
  UnicodeEncodeError (write non-ASCII character to stdout using ASCII encoding).

- Issue #8576: Remove use of find_unused_port() in test_smtplib and
  test_multiprocessing.  Patch by Paul Moore.

- Issue #7449: Fix many tests to support Python compiled without thread
  support. Patches written by Jerry Seutter.

- Issue #8108: test_ftplib's non-blocking SSL server now has proper handling of
  SSL shutdowns.

- Issues #8279, #8330, #8437, #8480, #8495: Fix test_gdb failures, patch written
  by Dave Malcolm.

- Issue #3864: Skip three test_signal tests on freebsd6 because they fail if any
  thread was previously started, most likely due to a platform bug.

- Issue #8193: Fix test_zlib failure with zlib 1.2.4.

- Issue #8248: Add some tests for the bool type.  Patch by Gregory Nofi.

- Issue #8263: Now regrtest.py will report a failure if it receives a
  KeyboardInterrupt (SIGINT).

- Issue #8180 and #8207: Fix test_pep277 on OS X and add more tests for special
  Unicode normalization cases.

- Issue #7783: test.support.open_urlresource invalidates the outdated files from
  the local cache.

- Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are
  effectively raised.

- The four path modules (genericpath, macpath, ntpath, posixpath) share a common
  TestCase for some tests: test_genericpath.CommonTest.

- Print platform information when running the whole test suite, or using the
  --verbose flag.

- Issue #767675: enable test_pep277 on POSIX platforms with Unicode-friendly
  filesystem encoding.

- Issue #6292: for the moment at least, the test suite runs cleanly if python is
  run with the -OO flag.  Tests requiring docstrings are skipped.

- Issue #7712: test.support gained a new `temp_cwd` context manager which is now
  also used by regrtest to run all the tests in a temporary directory.  The
  original CWD is saved in `support.SAVEDCWD`.  Thanks to Florent Xicluna who
  helped with the patch.

- Issue #7924: Fix an intermittent 'XXX undetected error' failure in test_capi
  (only seen so far on platforms where the curses module wasn't built), due to
  an uncleared exception.

- Issue #7728: test_timeout was changed to use support.bind_port instead of a
  hard coded port.

- Issue #7376: Instead of running a self-test (which was failing) when called
  with no arguments, doctest.py now gives a usage message.

- Issue #7396: fix regrtest -s, which was broken by the -j enhancement.

- Issue #7498: test_multiprocessing now uses test.support.find_unused_port
  instead of a hardcoded port number in test_rapid_restart.

- Issue #7431: Use TESTFN in test_linecache instead of trying to create a file
  in the Lib/test directory, which might be read-only for the user running the
  tests.

- Issue #7324: Add a sanity check to regrtest argument parsing to catch the case
  of an option with no handler.

- Issue #7312: Add a -F flag to run the selected tests in a loop until a test
  fails.  Can be combined with -j.

- Issue #6551: test_zipimport could import and then destroy some modules of the
  encodings package, which would make other tests fail further down the road
  because the internally cached encoders and decoders would point to empty
  global variables.

- Issue #7295: Do not use a hardcoded file name in test_tarfile.

- Issue #7270: Add some dedicated unit tests for multi-thread synchronization
  primitives such as Lock, RLock, Condition, Event and Semaphore.

- Issue #7248 (part 2): Use a unique temporary directory for importlib source
  tests instead of tempfile.tempdir. This prevents the tests from sharing state
  between concurrent executions on the same system.

- Issue #7248: In importlib.test.source.util a try/finally block did not make
  sure that some referenced objects actually were created in the block before
  calling methods on the object.

- Issue #7222: Make thread "reaping" more reliable so that reference
  leak-chasing test runs give sensible results.  The previous method of reaping
  threads could return successfully while some Thread objects were still
  referenced.  This also introduces a new private function:
  ``_thread._count()``.

- Issue #7151: Fixed regrtest -j so that output to stderr from a test no longer
  runs the risk of causing the worker thread to fail.

- Issue #7055: test___all__ now greedily detects all modules which have an
  __all__ attribute, rather than using a hardcoded and incomplete list.

- Issue #7058: Added save/restore for things like sys.argv and cwd to
  runtest_inner in regrtest, with warnings if the called test modifies them, and
  a new section in the summary report at the end.

- Issue #7042: Fix test_signal (test_itimer_virtual) failure on OS X 10.6.

- Fixed tests in importlib.test.source.test_abc_loader that were masking the
  proper exceptions that should be raised for missing or improper code object
  bytecode.

- Removed importlib's custom test discovery code and switched to
  unittest.TestLoader.discover().

Tools/Demos
-----------

- Issue #5464, #8974: Implement plural forms in msgfmt.py.

- iobench (a file I/O benchmark) and ccbench (a concurrency benchmark) were
  added to the `Tools/` directory.  They were previously living in the sandbox.


What's New in Python 3.1?
=========================

*Release date: 27-June-2009*

Core and Builtins
-----------------

- Issue #6334: Fix bug in range length calculation for ranges with
  large arguments.

- Issue #6329: Fixed iteration for memoryview objects (it was being blocked
  because it wasn't recognized as a sequence).

Library
-------

- Issue #6126: Fixed pdb command-line usage.

- Issue #6314: logging: performs extra checks on the "level" argument.

- Issue #6274: Fixed possible file descriptors leak in subprocess.py

- Accessing io.StringIO.buffer now raises an AttributeError instead of
  io.UnsupportedOperation.

- Issue #6271: mmap tried to close invalid file handle (-1) when anonymous.
  (On Unix)

- Issue #1202: zipfile module would cause a struct.error when attempting to
  store files with a CRC32 > 2**31-1.

Extension Modules
-----------------

- Issue #5590: Remove unused global variable in pyexpat extension.


What's New in Python 3.1 Release Candidate 2?
=============================================

*Release date: 13-June-2009*

Core and Builtins
-----------------

- Fixed SystemError triggered by "range([], 1, -1)".

- Issue #5924: On Windows, a large PYTHONPATH environment variable
  (more than 255 characters) would be completely ignored.

- Issue #4547: When debugging a very large function, it was not always
  possible to update the lineno attribute of the current frame.

- Issue #5330: C functions called with keyword arguments were not reported by
  the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau.

Library
-------

- Issue #6438: Fixed distutils.cygwinccompiler.get_versions : the regular
  expression string pattern was trying to match against a bytes returned by
  Popen. Tested under win32 to build the py-postgresql project.

- Issue #6258: Support AMD64 in bdist_msi.

- Issue #6195: fixed doctest to no longer try to read 'source' data from
  binary files.

- Issue #5262: Fixed bug in next rollover time computation in
  TimedRotatingFileHandler.

- Issue #6217: The C implementation of io.TextIOWrapper didn't include the
  errors property.  Additionally, the errors and encoding properties of StringIO
  are always None now.

- Issue #6137: The pickle module now translates module names when loading
  or dumping pickles with a 2.x-compatible protocol, in order to make data
  sharing and migration easier. This behaviour can be disabled using the
  new `fix_imports` optional argument.

- Removed the ipaddr module.

- Issue #3613: base64.{encode,decode}string are now called
  base64.{encode,decode}bytes which reflects what type they accept and return.
  The old names are still there as deprecated aliases.

- Issue #5767: Remove sgmlop support from xmlrpc.client.

- Issue #6150: Fix test_unicode on wide-unicode builds.

- Issue #6149: Fix initialization of WeakValueDictionary objects from non-empty
  parameters.

Windows
-------

- Issue #6221: Delete test registry key before running the test.

- Issue #6158: Package Sine-1000Hz-300ms.aif in MSI file.

C-API
-----

- Issue #5735: Python compiled with --with-pydebug should throw an
  ImportError when trying to import modules compiled without
  --with-pydebug, and vice-versa.


Build
-----

- Issue #6154: Make sure the intl library is added to LIBS if needed. Also
  added LIBS to OS X framework builds.

- Issue #5809: Specifying both --enable-framework and --enable-shared is
  an error. Configure now explicitly tells you about this.



What's New in Python 3.1 release candidate 1?
=============================================

*Release date: 2009-05-30*

Core and Builtins
-----------------

- Issue #6097: Escape UTF-8 surrogates resulting from mbstocs conversion
  of the command line.

- Issue #6012: Add cleanup support to O& argument parsing.

- Issue #6089: Fixed str.format with certain invalid field specifiers
  that would raise SystemError.

- Issue #5982: staticmethod and classmethod now expose the wrapped
  function with __func__.

- Added support for multiple context managers in the same with-statement.
  Deprecated contextlib.nested() which is no longer needed.

- Issue #5829: complex("1e500") no longer raises OverflowError.  This
  makes it consistent with float("1e500") and interpretation of real
  and imaginary literals.

- Issue #3527: Removed Py_WIN_WIDE_FILENAMES which is not used any more.

- Issue #5994: the marshal module now has docstrings.

- Issue #5981: Fix three minor inf/nan issues in float.fromhex:
  (1) inf and nan strings with trailing whitespace were incorrectly
  rejected;  (2) parsing of strings representing infinities and nans
  was locale aware; and (3) the interpretation of fromhex('-nan')
  didn't match that of float('-nan').

Library
-------

- Issue #4859: Implement PEP 383 for pwd, spwd, and grp.

- smtplib 'login' and 'cram-md5' login are also fixed (see Issue #5259).

- Issue #6121: pydoc now ignores leading and trailing spaces in the
  argument to the 'help' function.

- Issue #6118: urllib.parse.quote_plus ignored the encoding and errors
  arguments for strings with a space in them.

- collections.namedtuple() was not working with the following field
  names:  cls, self, tuple, itemgetter, and property.

- In unittest, using a skipping decorator on a class is now equivalent to
  skipping every test on the class.  The ClassTestSuite class has been removed.

- Issue #6050: Don't fail extracting a directory from a zipfile if
  the directory already exists.

- Issue #1309352: fcntl now converts its third arguments to a C `long` rather
  than an int, which makes some operations possible under 64-bit Linux (e.g.
  DN_MULTISHOT with F_NOTIFY).

- Issue #5761: Add the name of the underlying file to the repr() of various
  IO objects.

- Issue #5259: smtplib plain auth login no longer gives a traceback.  Fix
  by Musashi Tamura, tests by Marcin Bachry.

- Issue #1983: Fix functions taking or returning a process identifier to use
  the dedicated C type ``pid_t`` instead of a C ``int``. Some platforms have
  a process identifier type wider than the standard C integer type.

- Issue #4066: smtplib.SMTP_SSL._get_socket now correctly returns the socket.
  Patch by Farhan Ahmad, test by Marcin Bachry.

- Issue #2116: Weak references and weak dictionaries now support copy()ing and
  deepcopy()ing.

- Issue #1655: Make imaplib IPv6-capable. Patch by Derek Morr.

- Issue #5918: Fix a crash in the parser module.

- Issue #1664: Make nntplib IPv6-capable. Patch by Derek Morr.

- Issue #5006: Better handling of unicode byte-order marks (BOM) in the io
  library. This means, for example, that opening a UTF-16 text file in
  append mode doesn't add a BOM at the end of the file if the file isn't
  empty.

- Issue #4050: inspect.findsource/getsource now raise an IOError if the 'source'
  file is a binary.  Patch by Brodie Rao, tests by Daniel Diniz.  This fix
  corrects a pydoc regression.

- Issue #5955: aifc's close method did not close the file it wrapped,
  now it does.  This also means getfp method now returns the real fp.

Installation
------------

- Issue #6047: fullinstall has been removed because Python 3's executable will
  now be known as python3.

- Lib/smtpd.py is no longer installed as a script.

Extension Modules
-----------------

- Issue #3061: Use wcsftime for time.strftime where available.

- Issue #4873: Fix resource leaks in error cases of pwd and grp.

- Issue #6093: Fix off-by-one error in locale.strxfrm.

- The _functools and _locale modules are now built into the libpython shared
  library instead of as extension modules.

Build
-----

- Issue #3585: Add pkg-config support. It creates a python-2.7.pc file
  and a python3.pc symlink in the $(LIBDIR)/pkgconfig directory. Patch by
  Clinton Roy.

Tests
-----

- Issue #5442: Tests for importlib were not properly skipping case-sensitivity
  tests on darwin even when the OS was installed on a case-sensitive
  filesystem. Also fixed tests that should not be run when
  sys.dont_write_bytecode is true.


What's New in Python 3.1 beta 1?
================================

*Release date: 2009-05-06*

Core and Builtins
-----------------

- Issue #5914: Add new C API function PyOS_string_to_double, and
  deprecate PyOS_ascii_strtod and PyOS_ascii_atof.

- Issue #3382: float.__format__, complex.__format__, and %-formatting
  no longer map 'F' to 'f'. Because of issue #5859 (below), this only
  affects nan -> NAN and inf -> INF.

- Issue #5799: ntpath (ie, os.path on Windows) fully supports UNC pathnames
  in all operations, including splitdrive, split, etc.  splitunc() now issues
  a PendingDeprecation warning.

- Issue #5920: For float.__format__, change the behavior with the
  empty presentation type (that is, not one of 'e', 'f', 'g', or 'n')
  to be like 'g' but with at least one decimal point and with a
  default precision of 12. Previously, the behavior the same but with
  a default precision of 6.  This more closely matches str(), and
  reduces surprises when adding alignment flags to the empty
  presentation type. This also affects the new complex.__format__ in
  the same way.

- Implement PEP 383, Non-decodable Bytes in System Character Interfaces.

- Issue #5890: in subclasses of 'property' the __doc__ attribute was
  shadowed by classtype's, even if it was None.  property now
  inserts the __doc__ into the subclass instance __dict__.

- Issue #4426: The UTF-7 decoder was too strict and didn't accept some legal
  sequences. Patch by Nick Barnes and Victor Stinner.

- Issue #3672: Reject surrogates in utf-8 codec; add surrogatepass error handler.

- Issue #5883: In the io module, the BufferedIOBase and TextIOBase ABCs have
  received a new method, detach().  detach() disconnects the underlying stream
  from the buffer or text IO and returns it.

- Issue #5859: Remove switch from '%f' to '%g'-style formatting for
  floats with absolute value over 1e50.  Also remove length
  restrictions for float formatting: '%.67f' % 12.34 and '%.120e' %
  12.34 no longer raise an exception.

- Issue #1588: Add complex.__format__. For example,
  format(complex(1, 2./3), '.5') now produces a sensible result.

- Issue #5864: Fix empty format code formatting for floats so that it
  never gives more than the requested number of significant digits.

- Issue #5793: Rationalize isdigit / isalpha / tolower, etc. Includes
  new Py_ISDIGIT / Py_ISALPHA / Py_TOLOWER, etc. in pctypes.h.

- Issue #5835: Deprecate PyOS_ascii_formatd.

- Issue #4971: Fix titlecase for characters that are their own
  titlecase, but not their own uppercase.

- Issue #5283: Setting __class__ in __del__ caused a segfault.

- Issue #5816: complex(repr(z)) now recovers z exactly, even when
  z involves nans, infs or negative zeros.

- Issue #3166: Make int -> float conversions correctly rounded.

- Issue #1869 (and many duplicates): make round(x, n) correctly
  rounded for a float x, by using the decimal <-> binary conversions
  from Python/dtoa.c.  As a consequence, (e.g.) round(x, 2) now
  consistently agrees with format(x, '.2f').

- Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on
  some builtin types.

- Issue #5772: format(1e100, '<') produces '1e+100', not '1.0e+100'.

- Issue #5515: str.format() type 'n' combined with commas and leading
  zeros no longer gives odd results with ints and floats.

- Implement PEP 378, Format Specifier for Thousands Separator, for
  floats.

- The str function switches to exponential notation at
  1e11, not 1e12.  This avoids printing 13 significant digits in
  situations where only 12 of them are correct.  Example problem
  value: str(1e11 + 0.5).  (This minor issue has existed in 2.x for a
  long time.)

- Issue #1580: On most platforms, use a 'short' float repr: for a
  finite float x, repr(x) now outputs a string based on the shortest
  sequence of decimal digits that rounds to x.  Previous behaviour was
  to output 17 significant digits and then strip trailing zeros.
  Another minor difference is that the new repr switches to
  exponential notation at 1e16 instead of the previous 1e17; this
  avoids misleading output in some cases.

  There's a new sys attribute sys.float_repr_style, which takes
  the value 'short' to indicate that we're using short float repr,
  and 'legacy' if the short float repr isn't available for one
  reason or another.

  The float repr change involves incorporating David Gay's 'perfect
  rounding' code into the Python core (it's in Python/dtoa.c).  As a
  secondary consequence, all string-to-float and float-to-string
  conversions (including all float formatting operations) will be
  correctly rounded on these platforms.

  See issue #1580 discussions for details of platforms for which
  this change does not apply.

- Issue #5759: float() didn't call __float__ on str subclasses.

- The string.maketrans() function is deprecated; there is a new static method
  maketrans() on the bytes and bytearray classes.  This removes confusion about
  the types string.maketrans() is supposed to work with, and mirrors the
  methods available on the str class.

- Issue #2170: refactored xml.dom.minidom.normalize, increasing both
  its clarity and its speed.

- Issue #1113244: Py_XINCREF, Py_DECREF, Py_XDECREF: Add ``do { ... } while (0)``
  to avoid compiler warnings.

- Issue #3739: The unicode-internal encoder now reports the number of characters
  consumed like any other encoder (instead of the number of bytes).

Installation
------------

- Issue #5756: Install idle and pydoc with a 3 suffix.

Library
-------

- Issue #8203: Fix IDLE Credits dialog: view_file() uses its encoding argument.

- Issue #5311: bdist_msi can now build packages that do not depend on a
  specific Python version.

- Issue #5150: IDLE's format menu now has an option to strip trailing
  whitespace.

- Issue #5940: distutils.command.build_clib.check_library_list was not doing
  the right type checkings anymore.

- Issue #4875: On win32, ctypes.util.find_library does no longer
  return directories.

- Issue #5142: Add the ability to skip modules while stepping to pdb.

- Issue #1309567: Fix linecache behavior of stripping subdirectories when
  looking for files given by a relative filename.

- Issue #5923: Update the ``turtle`` module to version 1.1, add two new
  turtle demos in Demo/turtle.

- Issue #5692: In ``zipfile.Zipfile``, fix wrong path calculation when
  extracting a file to the root directory.

- Issue #5913: os.listdir() should fail for empty path on windows.

- Issue #5084: unpickling now interns the attribute names of pickled objects,
  saving memory and avoiding growth in size of subsequent pickles. Proposal
  and original patch by Jake McGuire.

- The json module now works exclusively with str and not bytes.

- Issue #3959: The ipaddr module has been added to the standard library.
  Contributed by Google.

- Issue #3002: ``shutil.copyfile()`` and ``shutil.copytree()`` now raise an
  error when a named pipe is encountered, rather than blocking infinitely.

- Issue #5857: tokenize.tokenize() now returns named tuples.

- Issue #4305: ctypes should now build again on mipsel-linux-gnu

- Issue #1734234: Massively speedup ``unicodedata.normalize()`` when the
  string is already in normalized form, by performing a quick check beforehand.
  Original patch by Rauli Ruohonen.

- Issue #5853: calling a function of the mimetypes module from several threads
  at once could hit the recursion limit if the mimetypes database hadn't been
  initialized before.

- Issue #5854: Updated __all__ to include some missing names and remove some
  names which should not be exported.

- Issue #3102:  All global symbols that the _ctypes extension defines
  are now prefixed with 'Py' or '_ctypes'.

- Issue #5041: ctypes does now allow pickling wide character.

- Issue #5812: For the two-argument form of the Fraction constructor,
  Fraction(m, n), m and n are permitted to be arbitrary Rational
  instances.

- Issue #5812: Fraction('1e6') is valid: more generally, any string
  that's valid for float() is now valid for Fraction(), with the
  exception of strings representing NaNs and infinities.

- Issue #5734: BufferedRWPair was poorly tested and had several glaring
  bugs. Patch by Brian Quinlan.

- Issue #1161031: fix readwrite select flag handling: POLLPRI now
  results in a handle_expt_event call, not handle_read_event, and POLLERR
  and POLLNVAL now call handle_close, not handle_expt_event.  Also,
  dispatcher now has an 'ignore_log_types' attribute for suppressing
  log messages, which is set to 'warning' by default.

- Issue #2703: SimpleXMLRPCDispatcher.__init__: Provide default values for
  new arguments introduced in 2.5.

- Issue #5828 (Invalid behavior of unicode.lower): Fixed bogus logic in
  makeunicodedata.py and regenerated the Unicode database (This fixes
  u'\u1d79'.lower() == '\x00').

Extension Modules
-----------------

- Issue #5881: Remove old undocumented compatibility interfaces in hashlib and
  pwd.

- Issue #5463: In struct module, remove deprecated float coercion
  for integer type codes: struct.pack('L', 0.3) should now raise
  an error.  The _PY_STRUCT_FLOAT_COERCE constant has been removed.
  The version number has been bumped to 0.3.

- Issue #5359: Re-add the Berkeley DB detection code to allow _dbm be built
  using Berkeley DB.

Tests
-----

- Issue #5354: New test support function import_fresh_module() makes
  it easy to import both normal and optimised versions of modules.
  test_heapq and test_warnings have been adjusted to use it, tests for
  other modules with both C and Python implementations in the stdlib
  can be adjusted to use it over time.

- Issue #5837: Certain sequences of calls to set() and unset() for
  support.EnvironmentVarGuard objects restored the environment variables
  incorrectly on __exit__.

C-API
-----

- Issue #5630: A replacement PyCObject API, PyCapsule, has been added.


What's New in Python 3.1 alpha 2?
=================================

*Release date: 2009-4-4*

Core and Builtins
-----------------

- Implement PEP 378, Format Specifier for Thousands Separator, for
  integers.

- Issue #5666: Py_BuildValue's 'c' code should create byte strings.

- Issue #5499: The 'c' code for argument parsing functions now only accepts a
  byte, and the 'C' code only accepts a unicode character.

- Fix a problem in PyErr_NormalizeException that leads to "undetected errors"
  when hitting the recursion limit under certain circumstances.

- Issue #1665206: Remove the last eager import in _warnings.c and make it lazy.

- Fix a segfault when running test_exceptions with coverage, caused by
  insufficient checks in accessors of Exception.__context__.

- Issue #5604: non-ASCII characters in module name passed to
  imp.find_module() were converted to UTF-8 while the path is
  converted to the default filesystem encoding, causing nonsense.

- Issue #5126: str.isprintable() returned False for space characters.

- Issue #4865: On MacOSX /Library/Python/2.7/site-packages is added to
  the end sys.path, for compatibility with the system install of Python.

- Issue #4688: Add a heuristic so that tuples and dicts containing only
  untrackable objects are not tracked by the garbage collector. This can
  reduce the size of collections and therefore the garbage collection overhead
  on long-running programs, depending on their particular use of datatypes.

- Issue #5512: Rewrite PyLong long division algorithm (x_divrem) to
  improve its performance.  Long divisions and remainder operations
  are now between 50% and 150% faster.

- Issue #4258: Make it possible to use base 2**30 instead of base
  2**15 for the internal representation of integers, for performance
  reasons.  Base 2**30 is enabled by default on 64-bit machines.  Add
  --enable-big-digits option to configure, which overrides the
  default.  Add sys.int_info structseq to provide information about
  the internal format.

- Issue #4474: PyUnicode_FromWideChar now converts characters outside
  the BMP to surrogate pairs, on systems with sizeof(wchar_t) == 4
  and sizeof(Py_UNICODE) == 2.

- Issue #5237: Allow auto-numbered fields in str.format(). For
  example: '{} {}'.format(1, 2) == '1 2'.

- Issue #5392: when a very low recursion limit was set, the interpreter would
  abort with a fatal error after the recursion limit was hit twice.

- Issue #3845: In PyRun_SimpleFileExFlags avoid invalid memory access with
  short file names.

Library
-------

- Issue #2625: added missing items() call to the for loop in
  mailbox.MH.get_message().

- Issue #5640: Fix _multibytecodec so that CJK codecs don't repeat
  error substitutions from non-strict codec error callbacks in
  incrementalencoder and StreamWriter.

- Issue #5656: Fix the coverage reporting when running the test suite with
  the -T argument.

- Issue #5647: MutableSet.__iand__() no longer mutates self during iteration.

- Issue #5624: Fix the _winreg module name still used in several modules.

- Issue #5628: Fix io.TextIOWrapper.read() with an unreadable buffer.

- Issue #5619: Multiprocessing children disobey the debug flag and causes
  popups on windows buildbots. Patch applied to work around this issue.

- Issue #5400: Added patch for multiprocessing on netbsd compilation/support

- Issue #5387: Fixed mmap.move crash by integer overflow.

- Issue #5261: Patch multiprocessing's semaphore.c to support context
  manager use: "with multiprocessing.Lock()" works now.

- Issue #5236: Change time.strptime() to only take strings. Didn't work with
  bytes already but the failure was non-obvious.

- Issue #5177: Multiprocessing's SocketListener class now uses
  socket.SO_REUSEADDR on all connections so that the user no longer needs
  to wait 120 seconds for the socket to expire.

- Issue #5595: Fix UnboundedLocalError in ntpath.ismount().

- Issue #1174606: Calling read() without arguments of an unbounded file
  (typically /dev/zero under Unix) could crash the interpreter.

- The max_buffer_size arguments of io.BufferedWriter, io.BufferedRWPair, and
  io.BufferedRandom have been deprecated for removal in Python 3.2.

- Issue #5068: Fixed the tarfile._BZ2Proxy.read() method that would loop
  forever on incomplete input. That caused tarfile.open() to hang when used
  with mode 'r' or 'r:bz2' and a fileobj argument that contained no data or
  partial bzip2 compressed data.

- Issue #2110: Add support for thousands separator and 'n' type
  specifier to Decimal.__format__

- Fix Decimal.__format__ bug that swapped the meanings of the '<' and
  '>' alignment characters.

- The error detection code in FileIO.close() could fail to reflect the `errno`
  value, and report it as -1 instead.

- Issue #5016: FileIO.seekable() could return False if the file position
  was negative when truncated to a C int. Patch by Victor Stinner.

Extension Modules
-----------------

- Issue #5391: mmap now deals exclusively with bytes.

- Issue #5463: In struct module, remove deprecated overflow wrapping
  when packing an integer: struct.pack('=L', -1) now raises
  struct.error instead of returning b'\xff\xff\xff\xff'.  The
  _PY_STRUCT_RANGE_CHECKING and _PY_STRUCT_OVERFLOW_MASKING constants
  have been removed from the struct module.


What's New in Python 3.1 alpha 1
================================

*Release date: 2009-03-07*

Core and Builtins
-----------------

- The io module has been reimplemented in C for speed.

- Give dict views an informative __repr__.

- Issue #5247: Improve error message when unknown format codes are
  used when using str.format() with str, int, and float arguments.

- Issue #5249: time.strftime returned malformed string when format string
  contained non ascii character on windows.

- Issue #4626: compile(), exec(), and eval() ignore the coding cookie if the
  source has already been decoded into str.

- Issue #5186: Reduce hash collisions for objects with no __hash__ method by
  rotating the object pointer by 4 bits to the right.

- Issue #4575: Fix Py_IS_INFINITY macro to work correctly on x87 FPUs:
  it now forces its argument to double before testing for infinity.

- Issue #5137: Make len() correctly raise a TypeError when a __len__ method
  returns a non-number type.

- Issue #5182: Removed memoryview.__str__.

- Issue #1717: Removed builtin cmp() function, dropped tp_compare
  slot, the C API functions PyObject_Compare and PyUnicode_Compare and
  the type definition cmpfunc.  The tp_compare slot has been renamed
  to tp_reserved, and is reserved for future usage.

- Issue #1242657: the __len__() and __length_hint__() calls in several tools
  were suppressing all exceptions.  These include list() and bytearray().

- Issue #4707: round(x, n) now returns an integer if x is an integer.
  Previously it returned a float.

- Issue #4753: By enabling a configure option named '--with-computed-gotos'
  on compilers that support it (notably: gcc, SunPro, icc), the bytecode
  evaluation loop is compiled with a new dispatch mechanism which gives
  speedups of up to 20%, depending on the system, on various benchmarks.

- Issue #4874: Most builtin decoders now reject unicode input.

- Issue #4842: Don't allow trailing 'L' when constructing an integer
  from a string.

- Issue #4991: os.fdopen now raises an OSError for invalid file descriptors.

- Issue #4838: When a module is deallocated, free the memory backing the
  optional module state data.

- Issue #4910: Rename nb_long slot to nb_reserved, and change its
  type to ``(void *)``.

- Issue #4935: The overflow checking code in the expandtabs() method common
  to str, bytes and bytearray could be optimized away by the compiler, letting
  the interpreter segfault instead of raising an error.

- Issue #3720: Fix a crash when an iterator modifies its class and removes its
  __next__ method.

- Issue #4910: Builtin int() function and PyNumber_Long/PyNumber_Int API
  function no longer attempt to call the __long__ slot to convert an object
  to an integer.  Only the __int__ and __trunc__ slots are examined.

- Issue #4893: Use NT threading on CE.

- Issue #4915: Port sysmodule to Windows CE.

- Issue #4868: utf-8, utf-16 and latin1 decoding are now 2x to 4x faster. The
  common cases are optimized thanks to a dedicated fast path and a moderate
  amount of loop unrolling.

- Issue #4074: Change the criteria for doing a full garbage collection (i.e.
  collecting the oldest generation) so that allocating lots of objects without
  destroying them does not show quadratic performance. Based on a proposal by
  Martin von Löwis at
  http://mail.python.org/pipermail/python-dev/2008-June/080579.html.

- Issue #4604: Some objects of the I/O library could still be used after
  having been closed (for instance, a read() call could return some
  previously buffered data). Patch by Dmitry Vasiliev.

- Issue #4705: Fix the -u ("unbuffered binary stdout and stderr") command-line
  flag to work properly. Furthermore, when specifying -u, the text stdout
  and stderr streams have line-by-line buffering enabled (the default being
  to buffer arbitrary chunks of data).

- The internal table, _PyLong_DigitValue, is now an array of unsigned chars
  instead of ints (reducing its size from 4 to 8 times thereby reducing
  Python's overall memory).

- Issue #1180193: When importing a module from a .pyc (or .pyo) file with
  an existing .py counterpart, override the co_filename attributes of all
  code objects if the original filename is obsolete (which can happen if the
  file has been renamed, moved, or if it is accessed through different paths).
  Patch by Ziga Seilnacht and Jean-Paul Calderone.

- Issue #4580: Fix slicing of memoryviews when the item size is greater than
  one byte. Also fixes the meaning of len() so that it returns the number of
  items, rather than the size in bytes.

- Issue #4075: Use OutputDebugStringW in Py_FatalError.

- Issue #4747: When the terminal does not use utf-8, executing a script with
  non-ascii characters in its name could fail with a "SyntaxError: None" error.

- Issue #4797: IOError.filename was not set when ``_fileio.FileIO`` failed
  to open file with a bytes filename on Windows.

- Issue #3680: Reference cycles created through a dict, set or deque iterator
  did not get collected.

- Issue #4701: PyObject_Hash now implicitly calls PyType_Ready on types
  where the tp_hash and tp_dict slots are both NULL.

- Issue #4759: None is now allowed as the first argument of
  bytearray.translate().  It was always allowed for bytes.translate().

- Added test case to ensure attempts to read from a file opened for writing
  fail.

- Issue #3106: Speedup some comparisons (str/str and int/int).

- Issue #2183: Simplify and optimize bytecode for list, dict and set
  comprehensions. Original patch for list comprehensions by Neal Norwitz.

- Issue #2467: gc.DEBUG_STATS reported invalid elapsed times. Also, always
  print elapsed times, not only when some objects are uncollectable /
  unreachable. Original patch by Neil Schemenauer.

- Issue #3439: Add a bit_length method to int.

- Issue #2173: When getting device encoding, check that return value of
  nl_langinfo is not the empty string.  This was causing silent build
  failures on OS X.

- Issue #4597: Fixed several opcodes that weren't always propagating
  exceptions.

- Issue #4589: Fixed exception handling when the __exit__ function of a
  context manager returns a value that cannot be converted to a bool.

- Issue #4445: Replace "sizeof(PyBytesObject)" with
  "offsetof(PyBytesObject, ob_sval) + 1" when allocating memory for
  bytes instances.  On a typical machine this saves 3 bytes of memory
  (on average) per allocation of a bytes instance.

- Issue #4533: File read operation was dreadfully slow due to a slowly
  growing read buffer. Fixed by using the same growth rate algorithm as
  Python 2.x.

- Issue #4509: Various issues surrounding resize of bytearray objects to
  which there are buffer exports (e.g. memoryview instances).

- Issue #4233: Changed semantic of ``_fileio.FileIO``'s ``close()``
  method on file objects with closefd=False. The file descriptor is still
  kept open but the file object behaves like a closed file. The ``FileIO``
  object also got a new readonly attribute ``closefd``.

- Issue #4569: Interpreter crash when mutating a memoryview with an item size
  larger than 1.

- Issue #4748: Lambda generators no longer return a value.

- The re.sub(), re.subn() and re.split() functions now accept a flags parameter.

- Issue #5108: Handle %s like %S, %R and %A in PyUnicode_FromFormatV(): Call
  PyUnicode_DecodeUTF8() once, remember the result and output it in a second
  step. This avoids problems with counting UTF-8 bytes that ignores the effect
  of using the replace error handler in PyUnicode_DecodeUTF8().

Library
-------

- Issue #7071: byte-compilation in Distutils is now done with respect to
  sys.dont_write_bytecode.

- Issue #7066: archive_util.make_archive now restores the cwd if an error is
  raised. Initial patch by Ezio Melotti.

- Issue #6516: Added owner/group support when creating tar archives in
  Distutils.

- Issue #6954: Fixed crash when using DISTUTILS_DEBUG flag in Distutils.

- Issue #6163: Fixed HP-UX runtime library dir options in
  distutils.unixcompiler. Initial patch by Sridhar Ratnakumar and
  Michael Haubenwallner.

- Issue #6693: New functions in site.py to get user/global site packages paths.

- Issue #6511: ZipFile now raises BadZipfile (instead of an IOError) when
  opening an empty or very small file.

- Issue #6545: Removed assert statements in distutils.Extension, so the
  behavior is similar when used with -O.

- unittest has been split up into a package.  All old names should still work.

- Issue #6466: now distutils.cygwinccompiler and distutils.emxccompiler
  uses the same refactored function to get gcc/ld/dllwrap versions numbers.
  It's `distutils.util.get_compiler_versions`. Added deprecation warnings
  for the obsolete get_versions() functions.

- Issue #6433: fixed issues with multiprocessing.pool.map hanging on empty list

- Issue #6314: logging: Extra checks on the "level" argument in more places.

- Issue #2622: Fixed an ImportError when importing email.message from a
  standalone application built with py2exe or py2app.

- Issue #6455: Fixed test_build_ext under win32.

- Issue #6377: Enabled the compiler option, and deprecate its usage as an
  attribute.

- Issue #6413: Fixed the log level in distutils.dist for announce.

- Issue #6403: Fixed package path usage in build_ext.

- Issues #5155, 5313, 5331: multiprocessing.Process._bootstrap was
  unconditionally calling "os.close(sys.stdin.fileno())" resulting in file
  descriptor errors

- Issue #6365: Distutils build_ext inplace mode was copying the compiled
  extension in a subdirectory if the extension name had dots.

- Issue #6164: Added an AIX specific linker argument in Distutils
  unixcompiler. Original patch by Sridhar Ratnakumar.

- Issue #6286: Now Distutils upload command is based on urllib2 instead of
  httplib, allowing the usage of http_proxy.

- Issue #6287: Added the license field in Distutils documentation.

- Issue #6263: Fixed syntax error in distutils.cygwincompiler.

- Issue #5201: distutils.sysconfig.parse_makefile() now understands `$$`
  in Makefiles. This prevents compile errors when using syntax like:
  `LDFLAGS='-rpath=\$$LIB:/some/other/path'`. Patch by Floris Bruynooghe.

- Issue #6131: test_modulefinder leaked when run after test_distutils.
  Patch by Hirokazu Yamamoto.

- Issue #6048: Now Distutils uses the tarfile module in archive_util.

- Issue #6062: In distutils, fixed the package option of build_ext. Feedback
  and tests on pywin32 by Tim Golden.

- Issue #6053: Fixed distutils tests on win32. patch by Hirokazu Yamamoto.

- Issue #6046: Fixed the library extension when distutils build_ext is used
  inplace. Initial patch by Roumen Petrov.

- Issue #6041: Now distutils `sdist` and `register` commands use `check` as a
  subcommand.

- Issue #6022: a test file was created in the current working directory by
  test_get_outputs in Distutils.

- Issue #5977: distutils build_ext.get_outputs was not taking into account the
  inplace option. Initial patch by kxroberto.

- Issue #5984: distutils.command.build_ext.check_extensions_list checks were broken
  for old-style extensions.

- Issue #5976: Fixed Distutils test_check_environ.

- Issue #5941: Distutils build_clib command was not working anymore because
  of an incomplete customization of the archiver command. Added ARFLAGS in the
  Makefile besides AR and make Distutils use it. Original patch by David
  Cournapeau.

- Issue #2245: aifc now skips chunk types it doesn't recognize, per spec.

- Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive
  anymore.

- Issue #5810: Fixed Distutils test_build_scripts so it uses
  sysconfig.get_config_vars.

- Issue #4951: Fixed failure in test_httpservers.

- Issue #5795: Fixed test_distutils failure on Debian ppc.

- Issue #5607: fixed Distutils test_get_platform for Mac OS X fat binaries.

- Issue #5741: don't disallow "%%" (which is an escape for "%") when setting
  a value in SafeConfigParser.

- Issue #5732: added a new command in Distutils: check.

- Issue #5731: Distutils bdist_wininst no longer worked on non-Windows
  platforms. Initial patch by Paul Moore.

- Issue #5095: Added bdist_msi to the list of bdist supported formats.
  Initial fix by Steven Bethard.

- Issue #1491431: Fixed distutils.filelist.glob_to_re for edge cases.
  Initial fix by Wayne Davison.

- Issue #5694: removed spurious test output in Distutils (test_clean).

- Issue #1326077: fix the formatting of SyntaxErrors by the traceback module.

- Issue #1665206 (partially): Move imports in cgitb to the top of the module
  instead of performing them in functions. Helps prevent import deadlocking in
  threads.

- Issue #2522: locale.format now checks its first argument to ensure it has
  been passed only one pattern, avoiding mysterious errors where it appeared
  that it was failing to do localization.

- Issue #5583: Added optional Extensions in Distutils. Initial patch by Georg
  Brandl.

- Issue #1222: locale.format() bug when the thousands separator is a space
  character.

- Issue #5472: Fixed distutils.test_util tear down. Original patch by
  Tim Golden.

- collections.deque() objects now have a read-only attribute called maxlen.

- Issue #2638: Show a window constructed with tkSimpleDialog.Dialog only after
  it is has been populated and properly configured in order to prevent
  window flashing.

- Issue #4792: Prevent a segfault in _tkinter by using the
  guaranteed to be safe interp argument given to the PythonCmd in place of
  the Tcl interpreter taken from a PythonCmd_ClientData.

- Issue #5193: Guarantee that tkinter.Text.search returns a string.

- Issue #5394: removed > 2.3 syntax from distutils.msvc9compiler.
  Original patch by Akira Kitada.

- Issue #5334: array.fromfile() failed to insert values when EOFError was raised.

- Issue #5385: Fixed mmap crash after resize failure on windows.

- Issue #5179: Fixed subprocess handle leak on failure on windows.

- PEP 372:  Added collections.OrderedDict().

- The _asdict() for method for namedtuples now returns an OrderedDict().

- configparser now defaults to using an ordered dictionary.

- Issue #5401: Fixed a performance problem in mimetypes when ``from mimetypes
  import guess_extension`` was used.

- Issue #1733986: Fixed mmap crash in accessing elements of second map object
  with same tagname but larger size than first map. (Windows)

- Issue #5386: mmap.write_byte didn't check map size, so it could cause buffer
  overrun.

- Issue #1533164: Installed but not listed ``*.pyo`` was breaking Distutils
  bdist_rpm command.

- Issue #5378: added --quiet option to Distutils bdist_rpm command.

- Issue #5052: make Distutils compatible with 2.3 again.

- Issue #5316: Fixed buildbot failures introduced by multiple inheritance
  in Distutils tests.

- Issue #5287: Add exception handling around findCaller() call to help out
  IronPython.

- Issue #5282: Fixed mmap resize on 32bit windows and unix. When offset > 0,
  The file was resized to wrong size.

- Issue #5292: Fixed mmap crash on its boundary access m[len(m)].

- Issue #2279: distutils.sdist.add_defaults now add files
  from the package_data and the data_files metadata.

- Issue #5257: refactored all tests in distutils, so they use
  support.TempdirManager, to avoid writing in the tests directory.

- Issue #4524: distutils build_script command failed with --with-suffix=3.
  Initial patch by Amaury Forgeot d'Arc.

- Issue #2461: added tests for distutils.util

- Issue #4998: The memory saving effect of __slots__ had been lost on Fractions
  which inherited from numbers.py which did not have __slots__ defined.  The
  numbers hierarchy now has its own __slots__ declarations.

- Issue #4631: Fix urlopen() result when an HTTP response uses chunked
  encoding.

- Issue #5203: Fixed ctypes segfaults when passing a unicode string to a
  function without argtypes (only occurs if HAVE_USABLE_WCHAR_T is false).

- Issue #3386: distutils.sysconfig.get_python_lib prefix argument was ignored
  under NT and OS2. Patch by Philip Jenvey.

- Issue #5128: Make compileall properly inspect bytecode to determine if needs
  to be recreated. This avoids a timing hole thanks to the old reliance on the
  ctime of the files involved.

- Issue #5122: Synchronize tk load failure check to prevent a potential
  deadlock.

- Issue #1818: collections.namedtuple() now supports a keyword argument
  'rename' which lets invalid fieldnames be automatically converted to
  positional names in the form, _1, _2, ...

- Issue #4890: Handle empty text search pattern in Tkinter.Text.search.

- Issue #4512 (part 2): Promote ``ZipImporter._get_filename()`` to be a
  public documented method ``ZipImporter.get_filename()``.

- Issue #4195: The ``runpy`` module (and the ``-m`` switch) now support
  the execution of packages by looking for and executing a ``__main__``
  submodule when a package name is supplied. Initial patch by Andi
  Vajda.

- Issue #1731706: Call Tcl_ConditionFinalize for Tcl_Conditions that will
  not be used again (this requires Tcl/Tk 8.3.1), also fix a memory leak in
  Tkapp_Call when calling from a thread different than the one that created
  the Tcl interpreter. Patch by Robert Hancock.

- Issue #4285: Change sys.version_info to be a named tuple. Patch by
  Ross Light.

- Issue #1520877: Now distutils.sysconfig reads $AR from the
  environment/Makefile. Patch by Douglas Greiman.

- Issue #1276768: The verbose option was not used in the code of
  distutils.file_util and distutils.dir_util.

- Issue #5132: Fixed trouble building extensions under Solaris with
  --enabled-shared activated. Initial patch by Dave Peterson.

- Issue #1581476: Always use the Tcl global namespace when calling into Tcl.

- The shelve module now defaults to pickle protocol 3.

- Fix a bug in the trace module where a bytes object from co_lnotab had its
  items being passed through ord().

- Issue #2047: shutil.move() could believe that its destination path was
  inside its source path if it began with the same letters (e.g. "src" vs.
  "src.new").

- Added the ttk module. See issue #2983: Ttk support for Tkinter.

- Removed isSequenceType(), isMappingType, and isNumberType() from the
  operator module; use the abstract base classes instead.  Also removed
  the repeat() function; use mul() instead.

- Issue #5021:  doctest.testfile() did not create __name__ and
  collections.namedtuple() relied on __name__ being defined.

- Backport importlib from Python 3.1. Only the import_module() function has
  been backported to help facilitate transitions from 2.7 to 3.1.

- Issue #1885: distutils. When running sdist with --formats=tar,gztar
  the tar file was overridden by the gztar one.

- Issue #4863: distutils.mwerkscompiler has been removed.

- Added a new itertools functions:  combinations_with_replacement()
  and compress().

- Issue #5032:  added a step argument to itertools.count() and
  allowed non-integer arguments.

- Fix and properly document the multiprocessing module's logging
  support, expose the internal levels and provide proper usage
  examples.

- Issue #1672332: fix unpickling of subnormal floats, which was
  producing a ValueError on some platforms.

- Issue #3881: Help Tcl to load even when started through the
  unreadable local symlink to "Program Files" on Vista.

- Issue #4710: Extract directories properly in the zipfile module;
  allow adding directories to a zipfile.

- Issue #3807: _multiprocessing build fails when configure is passed
  --without-threads argument. When this occurs, _multiprocessing will
  be disabled, and not compiled.

- Issue #5008: When a file is opened in append mode with the new IO library,
  do an explicit seek to the end of file (so that e.g. tell() returns the
  file size rather than 0). This is consistent with the behaviour of the
  traditional 2.x file object.

- Issue #5013: Fixed a bug in FileHandler which occurred when the delay
  parameter was set.

- Issue #4842: Always append a trailing 'L' when pickling longs using
  pickle protocol 0.  When reading, the 'L' is optional.

- Add the importlib package.

- Issue #4301: Patch the logging module to add processName support, remove
  _check_logger_class from multiprocessing.

- Issue #3325: Remove python2.x try: except: imports for old cPickle from
  multiprocessing.

- Issue #4959: inspect.formatargspec now works for keyword only arguments
  without defaults.

- Issue #3321: ``_multiprocessing.Connection()`` doesn't check handle; added checks
  for Unix machines for negative handles and large int handles. Without this check
  it is possible to segfault the interpreter.

- Issue #4449: AssertionError in mp_benchmarks.py, caused by an underlying issue
  in sharedctypes.py.

- Issue #1225107: inspect.isclass() returned True for instances with a custom
  __getattr__.

- Issue #3826 and #4791: The socket module now closes the underlying socket
  appropriately when it is being used via socket.makefile() objects
  rather than delaying the close by waiting for garbage collection to do it.

- Issue #1696199:  Add collections.Counter() for rapid and convenient
  counting.

- Issue #3860: GzipFile and BZ2File now support the context management protocol.

- Issue #4867: Fixed a crash in ctypes when passing a string to a
  function without defining argtypes.

- Issue #4272: Add an optional argument to the GzipFile constructor to override
  the timestamp in the gzip stream. The default value remains the current time.
  The information can be used by e.g. gunzip when decompressing. Patch by
  Jacques Frechet.

- Restore Python 2.3 compatibility for decimal.py.

- Issue #3638: Remove functions from _tkinter module level that depend on
  TkappObject to work with multiple threads.

- Issue #4718: Adapt the wsgiref package so that it actually works with
  Python 3.x, in accordance with the `official amendments of the spec
  <http://www.wsgi.org/wsgi/Amendments_1.0>`_.

- Issue #4796: Added Decimal.from_float() and Context.create_decimal_from_float()
  to the decimal module.

- Fractions.from_float() no longer loses precision for integers too big to
  cast as floats.

- Issue #4812: add missing underscore prefix to some internal-use-only
  constants in the decimal module.  (Dec_0 becomes _Dec_0, etc.)

- Issue #4790: The nsmallest() and nlargest() functions in the heapq module
  did unnecessary work in the common case where no key function was specified.

- Issue #4795: inspect.isgeneratorfunction() returns False instead of None when
  the function is not a generator.

- Issue #4702: Throwing a DistutilsPlatformError instead of IOError in case
  no MSVC compiler is found under Windows. Original patch by Philip Jenvey.

- Issue #4646: distutils was choking on empty options arg in the setup
  function. Original patch by Thomas Heller.

- Issue #3767: Convert Tk object to string in tkColorChooser.

- Issue #3248: Allow placing ScrolledText in a PanedWindow.

- Issue #4444: Allow assertRaises() to be used as a context handler, so that
  the code under test can be written inline if more practical.

- Issue #4739: Add pydoc help topics for symbols, so that e.g. help('@')
  works as expected in the interactive environment.

- Issue #4756: zipfile.is_zipfile() now supports file-like objects. Patch by
  Gabriel Genellina.

- Issue #4574: reading a UTF16-encoded text file crashes if \r on 64-char
  boundary.

- Issue #4223: inspect.getsource() will now correctly display source code
  for packages loaded via zipimport (or any other conformant PEP 302
  loader). Original patch by Alexander Belopolsky.

- Issue #4201: pdb can now access and display source code loaded via
  zipimport (or any other conformant PEP 302 loader). Original patch by
  Alexander Belopolsky.

- Issue #4197: doctests in modules loaded via zipimport (or any other PEP
  302 conformant loader) will now work correctly in most cases (they
  are still subject to the constraints that exist for all code running
  from inside a module loaded via a PEP 302 loader and attempting to
  perform IO operations based on __file__). Original patch by
  Alexander Belopolsky.

- Issues #4082 and #4512: Add runpy support to zipimport in a manner that
  allows backporting to maintenance branches. Original patch by
  Alexander Belopolsky.

- Issue #4163: textwrap module: allow word splitting on a hyphen preceded by
  a non-ASCII letter.

- Issue #4616: TarFile.utime(): Restore directory times on Windows.

- Issue #4021: tokenize.detect_encoding() now raises a SyntaxError when the
  codec cannot be found.  This is for compatibility with the builtin behavior.

- Issue #4084: Fix max, min, max_mag and min_mag Decimal methods to
  give correct results in the case where one argument is a quiet NaN
  and the other is a finite number that requires rounding.

- Issue #4483: _dbm module now builds on systems with gdbm & gdbm_compat
  libs.

- Added the subprocess.check_call_output() convenience function to get output
  from a subprocess on success or raise an exception on error.

- Issue #1055234: cgi.parse_header(): Fixed parsing of header parameters to
  support unusual filenames (such as those containing semi-colons) in
  Content-Disposition headers.

- Issue #4384: Added logging integration with warnings module using
  captureWarnings(). This change includes a NullHandler which does nothing;
  it will be of use to library developers who want to avoid the "No handlers
  could be found for logger XXX" message which can appear if the library user
  doesn't configure logging.

- Issue #3741: DISTUTILS_USE_SDK set causes msvc9compiler.py to raise an
  exception.

- Issue #4529: fix the parser module's validation of try-except-finally
  statements.

- Issue #4458: getopt.gnu_getopt() now recognizes a single "-" as an argument,
  not a malformed option.

- Added the subprocess.check_output() convenience function to get output
  from a subprocess on success or raise an exception on error.

- Issue #4542: On Windows, binascii.crc32 still accepted str as binary input;
  the corresponding tests now pass.

- Issue #4537: webbrowser.UnixBrowser would fail to open the browser because
  it was calling the wrong open() function.

- Issue #1055234: cgi.parse_header(): Fixed parsing of header parameters to
  support unusual filenames (such as those containing semi-colons) in
  Content-Disposition headers.

- Issue #4861: ctypes.util.find_library(): Robustify. Fix library detection on
  biarch systems. Try to rely on ldconfig only, without using objdump and gcc.

- Issue #5104: The socket module now raises OverflowError when 16-bit port and
  protocol numbers are supplied outside the allowed 0-65536 range on bind()
  and getservbyport().

- Windows locale mapping updated to Vista.

Tools/Demos
-----------

- Issue #4704: remove use of cmp() in pybench, bump its version number to 2.1,
  and make it 2.6-compatible.

- Ttk demos added in Demo/tkinter/ttk/

- Issue #4677: add two list comprehension tests to pybench.


Build
-----

- Issue #6094: Build correctly with Subversion 1.7.

- Issue #5847: Remove -n switch on "Edit with IDLE" menu item.

- Issue #5726: Make Modules/ld_so_aix return the actual exit code of the
  linker, rather than always exit successfully. Patch by Floris Bruynooghe.

- Issue #4587: Add configure option --with-dbmliborder=db1:db2:... to specify
  the order that backends for the dbm extension are checked.

- Link the shared python library with $(MODLIBS).

- Issue #5134: Silence compiler warnings when compiling sqlite with VC++.

- Issue #4494: Fix build with Py_NO_ENABLE_SHARED on Windows.

- Issue #4895: Use _strdup on Windows CE.

- Issue #4472: "configure --enable-shared" now works on OSX

- Issues #4728 and #4060: WORDS_BIGEDIAN is now correct in Universal builds.

- Issue #4389: Add icon to the uninstall entry in "add-and-remove-programs".

- Issue #4289: Remove Cancel button from AdvancedDlg.

- Issue #1656675: Register a drop handler for .py* files on Windows.

- Issue #4120: Exclude manifest from extension modules in VS2008.

- Issue #4091: Install pythonxy.dll in system32 again.

- Issue #4018: Disable "for me" installations on Vista.

- Issue #3758: Add ``patchcheck`` build target to .PHONY.

- Issue #4204: Fixed module build errors on FreeBSD 4.


C-API
-----

- Issue #6624: yArg_ParseTuple with "s" format when parsing argument with
  NUL: Bogus TypeError detail string.

- Issue #5175: PyLong_AsUnsignedLongLong now raises OverflowError
  for negative arguments.  Previously, it raised TypeError.

- Issue #4720: The format for PyArg_ParseTupleAndKeywords can begin with '|'.

- Issue #3632: from the gdb debugger, the 'pyo' macro can now be called when
  the GIL is released, or owned by another thread.

- Issue #4122: On Windows, fix a compilation error when using the
  Py_UNICODE_ISSPACE macro in an extension module.


Extension Modules
-----------------

- Issue #3745: Fix hashlib to always reject unicode and non buffer-api
  supporting objects as input no matter how it was compiled (built in
  implementations or external openssl library).

- Issue #4397: Fix occasional test_socket failure on OS X.

- Issue #4279: Fix build of parsermodule under Cygwin.

- Issue #4751: hashlib now releases the GIL when hashing large buffers
  (with a hardwired threshold of 2048 bytes), allowing better parallelization
  on multi-CPU systems. Contributed by Lukas Lueg (ebfe) and Victor Stinner.

- Issue #4051: Prevent conflict of UNICODE macros in cPickle.

- Issue #4738: Each zlib object now has a separate lock, allowing several streams
  to be compressed or decompressed at once on multi-CPU systems. Also, the GIL
  is now released when computing the CRC of a large buffer. Patch by ebfe.

- Issue #4228: Pack negative values the same way as 2.4 in struct's L format.

- Issue #1040026: Fix os.times result on systems where HZ is incorrect.

- Issues #3167, #3682: Fix test_math failures for log, log10 on Solaris,
  OpenBSD.

- Issue #4583: array.array would not always prohibit resizing when a buffer
  has been exported, resulting in an interpreter crash when accessing the
  buffer.


- Issue #5228: Make functools.partial objects can now be pickled.

Tests
-----

- Issue #6152: New option '-j'/'--multiprocess' for regrtest allows running
  regression tests in parallel, shortening the total runtime.

- Issue #5450: Moved tests involving loading tk from Lib/test/test_tcl to
  Lib/tkinter/test/test_tkinter/test_loadtk. With this, these tests demonstrate
  the same behaviour as test_ttkguionly (and now also test_tk) which is to
  skip the tests if DISPLAY is defined but can't be used.

- regrtest no longer treats ImportError as equivalent to SkipTest.  Imports
  that should cause a test to be skipped are now done using import_module
  from test support, which does the conversion.

- Issue #5083: New 'gui' resource for regrtest.


Docs
----


What's New in Python 3.0 final
==============================

*Release date: 03-Dec-2008*

Core and Builtins
-----------------

- Issue #3996: On Windows, the PyOS_CheckStack function would cause the
  interpreter to abort ("Fatal Python error: Could not reset the stack!")
  instead of throwing a MemoryError.

- Issue #3689: The list reversed iterator now supports __length_hint__
  instead of __len__.  Behavior now matches other reversed iterators.

- Issue #4367: Python would segfault during compiling when the unicodedata
  module couldn't be imported and \N escapes were present.

- Fix build failure of _cursesmodule.c building with -D_FORTIFY_SOURCE=2.

Library
-------

- Issue #4387: binascii now refuses to accept str as binary input.

- Issue #4073: Add 2to3 support to build_scripts, refactor that support
  in build_py.

- IDLE would print a "Unhandled server exception!" message when internal
  debugging is enabled.

- Issue #4455: IDLE failed to display the windows list when two windows have
  the same title.

- Issue #3741: DISTUTILS_USE_SDK set causes msvc9compiler.py to raise an
  exception.

- Issue #4433: Fixed an access violation when garbage collecting
  _ctypes.COMError instances.

- Issue #4429: Fixed UnicodeDecodeError in ctypes.

- Issue #4373: Corrected a potential reference leak in the pickle module and
  silenced a false positive ref leak in distutils.tests.test_build_ext.

- Issue #4382: dbm.dumb did not specify the expected file encoding for opened
  files.

- Issue #4383: When IDLE cannot make the connection to its subprocess, it would
  fail to properly display the error message.

Build
-----

- Issue #4407: Fix source file that caused the compileall step in Windows installer
  to fail.

Docs
----

- Issue #4449: Fixed multiprocessing examples

- Issue #3799: Document that dbm.gnu and dbm.ndbm will accept string arguments
  for keys and values which will be converted to bytes before committal.


What's New in Python 3.0 release candidate 3?
=============================================

*Release date: 20-Nov-2008*


Core and Builtins
-----------------

- Issue #4349: sys.path included a non-existent platform directory because of a
  faulty Makefile.

- Issue #3327: Don't overallocate in the modules_by_index list.

- Issue #1721812:  Binary set operations and copy() returned the input type
  instead of the appropriate base type.  This was incorrect because set
  subclasses would be created without their __init__() method being called.
  The corrected behavior brings sets into line with lists and dicts.

- Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to
  True, even when x doesn't compare equal to itself.  This was a regression
  from 2.6.

- Issue #3705: Command-line arguments were not correctly decoded when the
  terminal does not use UTF8.

Library
-------

- Issue #4363: The uuid.uuid1() and uuid.uuid4() functions now work even if
  the ctypes module is not present.

- FileIO's mode attribute now always includes ``"b"``.

- Issue #3799: Fix dbm.dumb to accept strings as well as bytes for keys. String
  keys are now written out in UTF-8.

- Issue #4338: Fix distutils upload command.

- Issue #4354: Fix distutils register command.

- Issue #4116: Resolve member name conflict in ScrolledCanvas.__init__.

- Issue #4307: The named tuple that ``inspect.getfullargspec()`` returns now
  uses ``kwonlydefaults`` instead of ``kwdefaults``.

- Issue #4298: Fix a segfault when pickle.loads is passed ill-formed input.

- Issue #4283: Fix a left-over "iteritems" call in distutils.

Build
-----

- Issue #4389: Add icon to the uninstall entry in "add-and-remove-programs".

- Issue #4289: Remove Cancel button from AdvancedDlg.

- Issue #1656675: Register a drop handler for .py* files on Windows.

Tools/Demos
-----------

- Demos of the socketserver module now work with Python 3.


What's New in Python 3.0 release candidate 2
============================================

*Release date: 05-Nov-2008*

Core and Builtins
-----------------

- Issue #4211: The __path__ attribute of frozen packages is now a list instead
  of a string as required by PEP 302.

- Issue #3727: Fixed poplib.

- Issue #3714: Fixed nntplib by using bytes where appropriate.

- Issue #1210: Fixed imaplib and its documentation.

- Issue #4233: Changed semantic of ``_fileio.FileIO``'s ``close()``
  method on file objects with closefd=False. The file descriptor is still
  kept open but the file object behaves like a closed file. The ``FileIO``
  object also got a new readonly attribute ``closefd``.

- Issue #3626: On cygwin, starting python with a non-existent script name
  would not display anything if the file name is only 1 character long.

- Issue #4176: Fixed a crash when pickling an object which ``__reduce__``
  method does not return iterators for the 4th and 5th items.

- Issue #3723: Fixed initialization of subinterpreters.

- Issue #4213: The file system encoding is now normalized by the
  codec subsystem, for example UTF-8 is turned into utf-8.

- Issue #4200: Changed the atexit module to store its state in its
  PyModuleDef atexitmodule. This fixes a bug with multiple subinterpreters.

- Issue #4237: io.FileIO() was raising invalid warnings caused by
  insufficient initialization of PyFileIOObject struct members.

- Issue #4170: Pickling a collections.defaultdict object would crash the
  interpreter.

- Issue #4146: Compilation on OpenBSD has been restored.

- Issue #3574: compile() incorrectly handled source code encoded as Latin-1.

- Issues #2384 and #3975: Tracebacks were not correctly printed when the
  source file contains a ``coding:`` header: the wrong line was displayed, and
  the encoding was not respected.

- Issue #3740: Null-initialize module state.

- Issue #3946: PyObject_CheckReadBuffer crashed on a memoryview object.

- Issue #1688: On Windows, the input() prompt was not correctly displayed if it
  contains non-ascii characters.

- Bug #3951: Py_USING_MEMORY_DEBUGGER should not be enabled by default.

Library
-------

- Issue #3664: The pickle module could segfault if a subclass of Pickler fails
  to call the base __init__ method.

- Issue #3725: telnetlib now works completely in bytes.

- Issue #4072: Restore build_py_2to3.

- Issue #4014: Don't claim that Python has an Alpha release status, in addition
  to claiming it is Mature.

- Issue #3187: Add sys.setfilesystemencoding.

- Issue #3187: Better support for "undecodable" filenames.  Code by Victor
  Stinner, with small tweaks by GvR.

- Issue #3965: Allow repeated calls to turtle.Screen, by making it a
  true singleton object.

- Issue #3911: ftplib.FTP.makeport() could give invalid port numbers.

- Issue #3929: When the database cannot be opened, dbm.open() would incorrectly
  raise a TypeError: "'tuple' object is not callable" instead of the expected
  dbm.error.

- Bug #3884: Make the turtle module toplevel again.

- Issue #3547: Fixed ctypes structures bitfields of varying integer
  sizes.

Extension Modules
-----------------

- Issue #3659: Subclasses of str didn't work as SQL parameters.

Build
-----

- Issue #4120: Exclude manifest from extension modules in VS2008.

- Issue #4091: Install pythonxy.dll in system32 again.

- Issue #4018: Disable "for me" installations on Vista.

- Issue #4204: Fixed module build errors on FreeBSD 4.

Tools/Demos
-----------

- Issue #3717: Fix Demo/embed/demo.c.

- Issue #4072: Add a distutils demo for build_py_2to3.


What's New in Python 3.0 release candidate 1
============================================

*Release date: 17-Sep-2008*

Core and Builtins
-----------------

- Issue #3827: memoryview lost its size attribute in favor of using len(view).

- Issue #3813: could not lanch python.exe via symbolic link on cygwin.

- Issue #3705: fix crash when given a non-ascii value on the command line for
  the "-c" and "-m" parameters. Now the behaviour is as expected under Linux,
  although under Windows it fails at a later point.

- Issue #3279: Importing site at interpreter was failing silently because the
  site module uses the open builtin which was not initialized at the time.

- Issue #3660: Corrected a reference leak in str.encode() when the encoder
  does not return a bytes object.

- Issue #3774: Added a few more checks in PyTokenizer_FindEncoding to handle
  error conditions.

- Issue #3594: Fix Parser/tokenizer.c:fp_setreadl() to open the file being
  tokenized by either a file path or file pointer for the benefit of
  PyTokenizer_FindEncoding().

- Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin. On
  these systems, the mbstowcs() function is slightly buggy and must be
  replaced with strlen() for the purpose of counting of number of wide
  characters needed to represent the multi-byte character string.

- Issue #3697: "Fatal Python error: Cannot recover from stack overflow"
  could be easily encountered under Windows in debug mode when exercising
  the recursion limit checking code, due to bogus handling of recursion
  limit when USE_STACKCHEK was enabled.

- Issue #3639: The _warnings module could segfault the interpreter when
  unexpected types were passed in as arguments.

- Issue #3712: The memoryview object had a reference leak and didn't support
  cyclic garbage collection.

- Issue #3668: Fix a memory leak with the "s*" argument parser in
  PyArg_ParseTuple and friends, which occurred when the argument for "s*"
  was correctly parsed but parsing of subsequent arguments failed.

- Issue #3611: An exception __context__ could be cleared in a complex pattern
  involving a __del__ method re-raising an exception.

- Issue #2534: speed up isinstance() and issubclass() by 50-70%, so as to
  match Python 2.5 speed despite the __instancecheck__ / __subclasscheck__
  mechanism. In the process, fix a bug where isinstance() and issubclass(),
  when given a tuple of classes as second argument, were looking up
  __instancecheck__ / __subclasscheck__ on the tuple rather than on each
  type object.

- Issue #3663: Py_None was decref'd when printing SyntaxErrors.

- Issue #3651: Fix various memory leaks when using the buffer
  interface, or when the "s#" code of PyArg_ParseTuple is given a
  bytes object.

- Issue #3657: Fix uninitialized memory read when pickling longs.
  Found by valgrind.

- Apply security patches from Apple.

- Fix crashes on memory allocation failure found with failmalloc.

- Fix memory leaks found with valgrind and update suppressions file.

- Fix compiler warnings in opt mode which would lead to invalid memory reads.

- Fix problem using wrong name in decimal module reported by pychecker.

- Issue #3650: Fixed a reference leak in bytes.split('x').

- bytes(o) now tries to use o.__bytes__() before using fallbacks.

- Issue #1204: The configure script now tests for additional libraries
  that may be required when linking against readline.  This fixes issues
  with x86_64 builds on some platforms (a few Linux flavors and OpenBSD).

C API
-----

- PyObject_Bytes and PyBytes_FromObject were added.

Library
-------

- Issue #3756: make re.escape() handle bytes as well as str.

- Issue #3800: fix filter() related bug in formatter.py.

- Issue #874900: fix behaviour of threading module after a fork.

- Issue #3535: zipfile couldn't read some zip files larger than 2GB.

- Issue #3776: Deprecate the bsddb package for removal in 3.0.

- Issue #3762: platform.architecture() fails if python is lanched via
  its symbolic link.

- Issue #3660: fix a memory leak in the C accelerator of the pickle module.

- Issue #3160: the "bdist_wininst" distutils command didn't work.

- Issue #1658: tkinter changes dict size during iteration in both
    tkinter.BaseWidget and tkinter.scrolledtext.ScrolledText.

- The bsddb module (and therefore the dbm.bsd module) has been removed.
  It is now maintained outside of the standard library at
  http://www.jcea.es/programacion/pybsddb.htm.

- Issue #600362:  Relocated parse_qs() and parse_qsl(), from the cgi module
  to the urlparse one.  Added a DeprecationWarning in the old module, it
  will be deprecated in the future.

- Issue #3719: platform.architecture() fails if there are spaces in the
  path to the Python binary.

- Issue #3602: As part of the merge of r66135, make the parameters on
  warnings.catch_warnings() keyword-only. Also remove a DeprecationWarning.

- The deprecation warnings for the camelCase threading API names were removed.

- Issue #3110: multiprocessing fails to compiel on solaris 10 due to missing
  SEM_VALUE_MAX.

Extension Modules
-----------------

- Issue #3782: os.write() must not accept unicode strings.

- Issue #2975: When compiling several extension modules with Visual Studio 2008
  from the same python interpreter, some environment variables would grow
  without limit.

- Issue #3643: Added a few more checks to _testcapi to prevent segfaults by
  exploitation of poor argument checking.

- bsddb code updated to version 4.7.3pre2. This code is the same than
  Python 2.6 one, since the intention is to keep a unified 2.x/3.x codebase.
  The Python code is automatically translated using "2to3". Please, do not
  update this code in Python 3.0 by hand. Update the 2.6 one and then
  do "2to3".

- The _bytesio and _stringio modules are now compiled into the python binary.

- Issue #3492 and #3790: Fixed the zlib module and zipimport module uses of
  mutable bytearray objects where they should have been using immutable bytes.

- Issue #3797: Fixed the dbm, marshal, mmap, ossaudiodev, & winreg modules to
  return bytes objects instead of bytearray objects.


Tools/Demos
-----------

- Fix Misc/gdbinit so it works.


Build
-----

- Issue #3812: Failed to build python if configure --without-threads.

- Issue #3791: Remove the bsddb module from the Windows installer, and the
  core bsddb library from the Windows build files.


What's new in Python 3.0b3?
===========================

*Release date: 20-Aug-2008*

Core and Builtins
-----------------

- Issue #3653: Fix a segfault when sys.excepthook was called with invalid
  arguments.

- Issue #2394: implement more of the memoryview API, with the caveat that
  only one-dimensional contiguous buffers are supported and exercised right
  now. Slicing, slice assignment and comparison (equality and inequality)
  have been added. Also, the tolist() method has been implemented, but only
  for byte buffers. Finally, the API has been updated to return bytes objects
  wherever it used to return bytearrays.

- Issue #3560: clean up the new C PyMemoryView API so that naming is
  internally consistent; add macros PyMemoryView_GET_BASE() and
  PyMemoryView_GET_BUFFER() to access useful properties of a memory views
  without relying on a particular implementation; remove the ill-named
  PyMemoryView() function (PyMemoryView_GET_BUFFER() can be used instead).

- ctypes function pointers that are COM methods have a boolean True
  value again.

- Issue #1819: function calls with several named parameters are now on
  average 35% faster (as measured by pybench).

- The undocumented C APIs PyUnicode_AsString() and
  PyUnicode_AsStringAndSize() were made private to the interpreter, in
  order to be able to refine their interfaces for Python 3.1.

  If you need to access the UTF-8 representation of a Unicode object
  as bytes string, please use PyUnicode_AsUTF8String() instead.

- Issue #3460: PyUnicode_Join() implementation is 10% to 80% faster thanks
  to Python 3.0's stricter semantics which allow avoiding successive
  reallocations of the result string (this also affects str.join()).


Library
-------

- Issue #1276: Added temporary aliases for CJK Mac encodings to resolve
  a build problem on MacOS with CJK locales.  It adds four temporary
  mappings to existing legacy codecs that are virtually compatible
  with Mac encodings.  They will be replaced by codecs correctly
  implemented in 3.1.

- Issue #3614: Corrected a typo in xmlrpc.client, leading to a NameError
  "global name 'header' is not defined".

- Issue #2834: update the regular expression library to match the unicode
  standards of py3k. In other words, mixing bytes and unicode strings
  (be it as pattern, search string or replacement string) raises a TypeError.
  Moreover, the re.UNICODE flag is enabled automatically for unicode patterns,
  and can be disabled by specifying a new re.ASCII flag; as for bytes
  patterns, ASCII matching is the only option and trying to specify re.UNICODE
  for such patterns raises a ValueError.

- Issue #3300: make urllib.parse.[un]quote() default to UTF-8.
  Code contributed by Matt Giuca.  quote() now encodes the input
  before quoting, unquote() decodes after unquoting.  There are
  new arguments to change the encoding and errors settings.
  There are also new APIs to skip the encode/decode steps.
  [un]quote_plus() are also affected.

- Issue #2235: numbers.Number now blocks inheritance of the default id()
  based hash because that hash mechanism is not correct for numeric types.
  All concrete numeric types that inherit from Number (rather than just
  registering with it) must explicitly provide a hash implementation in
  order for their instances to be hashable.

- Issue #2676: in the email package, content-type parsing was hanging on
  pathological input because of quadratic or exponential behaviour of a
  regular expression.

- Issue #3476: binary buffered reading through the new "io" library is now
  thread-safe.

- Issue #1342811: Fix leak in Tkinter.Menu.delete. Commands associated to
  menu entries were not deleted.

- Remove the TarFileCompat class from tarfile.py.

- Issue #2491: os.fdopen is now almost an alias for the built-in open(), and
  accepts the same parameters.  It just checks that its first argument is an
  integer.

- Issue #3394: zipfile.writestr sets external attributes when passed a
  file name rather than a ZipInfo instance, so files are extracted with
  mode 0600 rather than 000 under Unix.

- Issue #2523: Fix quadratic behaviour when read()ing a binary file without
  asking for a specific length.

Extension Modules
-----------------

- Bug #3542: Support Unicode strings in _msi module.

What's new in Python 3.0b2?
===========================

*Release date: 17-Jul-2008*

Core and Builtins
-----------------

- Issue #3008: the float type has a new instance method 'float.hex'
  and a new class method 'float.fromhex' to convert floating-point
  numbers to and from hexadecimal strings, respectively.

- Issue #3083: Add alternate (#) formatting for bin, oct, hex output
  for str.format().  This adds the prefix 0b, 0o, or 0x, respectively.

- Issue #3280: like chr(), the "%c" format now accepts unicode code points
  beyond the Basic Multilingual Plane (above 0xffff) on all configurations. On
  "narrow Unicode" builds, the result is a string of 2 code units, forming a
  UTF-16 surrogate pair.

- Issue #3282: str.isprintable() should return False for undefined
  Unicode characters.

- Issue #3236: Return small longs from PyLong_FromString.

- Exception tracebacks now support exception chaining.

Library
-------

- Removed the sunaudio module. Use sunau instead.

- Issue #3554: ctypes.string_at and ctypes.wstring_at did call Python
  api functions without holding the GIL, which could lead to a fatal
  error when they failed.

- Issue #799428: Fix Tkinter.Misc._nametowidget to unwrap Tcl command objects.

- Removed "ast" function aliases from the parser module.

- Issue #3313: Fixed a crash when a failed dlopen() call does not set
  a valid dlerror() message.

- Issue #3258: Fixed a crash when a ctypes POINTER type to an
  incomplete structure was created.

- Issue #2683: Fix inconsistency in subprocess.Popen.communicate(): the
  argument now must be a bytes object in any case.

- Issue #3145: help("modules whatever") failed when trying to load the source
  code of every single module of the standard library, including invalid files
  used in the test suite.

- The gettext library now consistently uses Unicode strings for message ids
  and message strings, and ``ugettext()`` and the like don't exist anymore.

- The traceback module has been expanded to handle chained exceptions.

C API
-----

- Issue #3247: the function Py_FindMethod was removed. Modern types should
  use the tp_methods slot instead.

Tools/Demos
-----------

- The Mac/Demos directory has been removed.

- All of the Mac scripts have been removed (including BuildApplet.py).


What's new in Python 3.0b1?
===========================

*Release date: 18-Jun-2008*

Core and Builtins
-----------------

- Issue #3211: warnings.warn_explicit() did not guard against its 'registry'
  argument being anything other than a dict or None. Also fixed a bug in error
  handling when 'message' and 'category' were both set to None, triggering a
  bus error.

- Issue #3100: Corrected a crash on deallocation of a subclassed weakref which
  holds the last (strong) reference to its referent.

- Issue #2630: implement PEP 3138. repr() now returns printable
  Unicode characters unescaped, to get an ASCII-only representation
  of an object use ascii().

- Issue #1342: On windows, Python could not start when installed in a
  directory with non-ascii characters.

- Implement PEP 3121: new module initialization and finalization API.

- Removed the already-defunct ``-t`` option.

- Issue #2957: Corrected a ValueError "recursion limit exceeded", when
  unmarshalling many code objects, which happens when importing a
  large .pyc file (~1000 functions).

- Issue #2963: fix merging oversight that disabled method cache for
  all types.

- Issue #2964: fix a missing INCREF in instancemethod_descr_get.

- Issue #2895: Don't crash when given bytes objects as keyword names.

- Issue #2798: When parsing arguments with PyArg_ParseTuple, the "s"
  code now allows any unicode string and returns a utf-8 encoded
  buffer, just like the "s#" code already does.  The "z" code was
  corrected as well.

- Issue #2863: generators now have a ``gen.__name__`` attribute that
  equals ``gen.gi_code.co_name``, like ``func.__name___`` that equals
  ``func.func_code.co_name``.  The repr() of a generator now also
  contains this name.

- Issue #2831: enumerate() now has a ``start`` argument.

- Issue #2801: fix bug in the float.is_integer method where a
  ValueError was sometimes incorrectly raised.

- The ``--with-toolbox-glue`` option (and the associated
  pymactoolbox.h) have been removed.

- Issue #2196: hasattr() now lets exceptions which do not inherit
  Exception (KeyboardInterrupt, and SystemExit) propagate instead of
  ignoring them.

- #3021 Exception reraising semantics have been significantly improved.  However,
  f_exc_type, f_exc_value, and f_exc_traceback cannot be accessed from Python
  code anymore.

- Three of PyNumberMethods' members, nb_coerce, nb_hex, and nb_oct, have been
  removed.

Extension Modules
-----------------

- Renamed ``_winreg`` module to ``winreg``.

- Support os.O_ASYNC and fcntl.FASYNC if the constants exist on the
  platform.

- Support for Windows 9x has been removed from the winsound module.

- Issue #2870: cmathmodule.c compile error.

Library
-------

- The methods ``is_in_tuple()``, ``is_vararg()``, and ``is_keywordarg()`` of
  symtable.Symbol have been removed.

- Patch #3133: http.server.CGIHTTPRequestHandler did not work on windows.

- a new ``urllib`` package was created.  It consists of code from
  ``urllib``, ``urllib2``, ``urlparse``, and ``robotparser``.  The old
  modules have all been removed.  The new package has five submodules:
  ``urllib.parse``, ``urllib.request``, ``urllib.response``,
  ``urllib.error``, and ``urllib.robotparser``.  The
  ``urllib.request.urlopen()`` function uses the url opener from
  ``urllib2``.  (Note that the unittests have not been renamed for the
  beta, but they will be renamed in the future.)

- rfc822 has been removed in favor of the email package.

- mimetools has been removed in favor of the email package.

- Patch #2849: Remove use of rfc822 module from standard library.

- Added C optimized implementation of io.StringIO.

- The ``pickle`` module is now automatically use an optimized C
  implementation of Pickler and Unpickler when available. The
  ``cPickle`` module is no longer needed.

- Removed the ``htmllib`` and ``sgmllib`` modules.

- The deprecated ``SmartCookie`` and ``SimpleCookie`` classes have
  been removed from ``http.cookies``.

- The ``commands`` module has been removed. Its getoutput() and
  getstatusoutput() functions have been moved to the ``subprocess`` module.

- The ``http`` package was created; it contains the old ``httplib``
  as ``http.client``, ``Cookie`` as ``http.cookies``, ``cookielib``
  as ``http.cookiejar``, and the content of the three ``HTTPServer``
  modules as ``http.server``.

- The ``xmlrpc`` package was created; it contains the old
  ``xmlrpclib`` module as ``xmlrpc.client`` and the content of
  the old ``SimpleXMLRPCServer`` and ``DocXMLRPCServer`` modules
  as ``xmlrpc.server``.

- The ``dbm`` package was created, containing the old modules
  ``anydbm`` and ``whichdb`` in its ``__init__.py``, and having
  ``dbm.gnu`` (was ``gdbm``), ``dbm.bsd`` (was ``dbhash``),
  ``dbm.ndbm`` (was ``dbm``) and ``dbm.dumb`` (was ``dumbdbm``)
  as submodules.

- The ``repr`` module has been renamed to ``reprlib``.

- The ``statvfs`` module has been removed.

- Issue #1713041: fix pprint's handling of maximum depth.

- Issue #2250: Exceptions raised during evaluation of names in
  rlcompleter's ``Completer.complete()`` method are now caught and
  ignored.

- Patch #2659: Added ``break_on_hyphens`` option to textwrap's
  ``TextWrapper`` class.

- Issue #2487: change the semantics of math.ldexp(x, n) when n is too
  large to fit in a C long.  ldexp(x, n) now returns a zero (with
  suitable sign) if n is large and negative; previously, it raised
  OverflowError.

- The ``ConfigParser`` module has been renamed to ``configparser``.

- Issue #2865: webbrowser.open() works again in a KDE environment.

- The ``multifile`` module has been removed.

- The ``SocketServer`` module has been renamed to ``socketserver``.

- Fixed the ``__all__`` setting on ``collections`` to include
  ``UserList`` and ``UserString``.

- The sre module has been removed.

- The Queue module has been renamed to queue.

- The copy_reg module has been renamed to copyreg.

- The mhlib module has been removed.

- The ihooks module has been removed.

- The fpformat module has been removed.

- The dircache module has been removed.

- The Canvas module has been removed.

- The Decimal module gained the magic methods __round__, __ceil__,
  __floor__ and __trunc__, to give support for round, math.ceil,
  math.floor and math.trunc.

- The user module has been removed.

- The mutex module has been removed.

- The imputil module has been removed.

- os.path.walk has been removed in favor of os.walk.

- pdb gained the "until" command.

- The test.test_support module has been renamed to test.support.

- The threading module API was renamed to be PEP 8 compliant.  The
  old names are still present, but will be removed in the near future.

Tools/Demos
-----------

- The bgen tool has been removed.

Build
-----


What's New in Python 3.0a5?
===========================

*Release date: 08-May-2008*

Core and Builtins
-----------------

- Fixed misbehaviour of PyLong_FromSsize_t on systems where
  sizeof(size_t) > sizeof(long).

- Issue #2221: Corrected a SystemError "error return without exception
  set", when the code executed by exec() raises an exception, and
  sys.stdout.flush() also raises an error.

- Bug #2565: The repr() of type objects now calls them 'class', not
  'type' - whether they are builtin types or not.

- The command line processing was converted to pass Unicode strings
  through as unmodified as possible; as a consequence, the C API
  related to command line arguments was changed to use wchar_t.

- All backslashes in raw strings are interpreted literally.  This
  means that '\u' and '\U' escapes are not treated specially.

Extension Modules
-----------------

Library
-------

- ctypes objects now support the PEP3118 buffer interface.

- Issue #2682: ctypes callback functions now longer contain a cyclic
  reference to themselves.

- Issue #2058: Remove the buf attribute and add __slots__ to the
  TarInfo class in order to reduce tarfile's memory usage.

- Bug #2606: Avoid calling .sort() on a dict_keys object.

- The bundled libffi copy is now in sync with the recently released
  libffi3.0.5 version, apart from some small changes to
  Modules/_ctypes/libffi/configure.ac.

Build
-----

- Issue #1496032: On alpha, use -mieee when gcc is the compiler.

- "make install" is now an alias for "make altinstall", to prevent
  accidentally overwriting a Python 2.x installation.  Use "make
  fullinstall" to force Python 3.0 to be installed as "python".

- Issue #2544: On HP-UX systems, use 'gcc -shared' for linking when
  gcc is used as compiler.


What's New in Python 3.0a4?
===========================

*Release date: 02-Apr-2008*

Core and Builtins
-----------------

- Bug #2301: Don't try decoding the source code into the original
  encoding for syntax errors.

Extension Modules
-----------------

- The dl module was removed, use the ctypes module instead.

- Use wchar_t functions in _locale module.

Library
-------

- The class distutils.commands.build_py.build_py_2to3 can be used as a
  build_py replacement to automatically run 2to3 on modules that are
  going to be installed.

- A new pickle protocol (protocol 3) is added with explicit support
  for bytes.  This is the default protocol.  It intentionally cannot
  be unpickled by Python 2.x.

- When a pickle written by Python 2.x contains an (8-bit) str
  instance, this is now decoded to a (Unicode) str instance.  The
  encoding used to do this defaults to ASCII, but can be overridden
  via two new keyword arguments to the Unpickler class.  Previously
  this would create bytes instances, which is usually wrong: str
  instances are often used to pickle attribute names etc., and text is
  more common than binary data anyway.

- Default to ASCII as the locale.getpreferredencoding, if the POSIX
  system doesn't support CODESET and LANG isn't set or doesn't allow
  deduction of an encoding.

- Issue #1202: zlib.crc32 and zlib.adler32 now return an unsigned
  value.

- Issue #719888: Updated tokenize to use a bytes API.  generate_tokens
  has been renamed tokenize and now works with bytes rather than
  strings.  A new detect_encoding function has been added for
  determining source file encoding according to PEP-0263.  Token
  sequences returned by tokenize always start with an ENCODING token
  which specifies the encoding used to decode the file.  This token is
  used to encode the output of untokenize back to bytes.


What's New in Python 3.0a3?
===========================

*Release date: 29-Feb-2008*

Core and Builtins
-----------------

- Issue #2282: io.TextIOWrapper was not overriding seekable() from
  io.IOBase.

- Issue #2115: Important speedup in setting __slot__ attributes.  Also
  prevent a possible crash: an Abstract Base Class would try to access
  a slot on a registered virtual subclass.

- Fixed repr() and str() of complex numbers with infinity or nan as
  real or imaginary part.

- Clear all free list during a gc.collect() of the highest generation
  in order to allow pymalloc to free more arenas. Python may give back
  memory to the OS earlier.

- Issue #2045: Fix an infinite recursion triggered when printing a
  subclass of collections.defaultdict, if its default_factory is set
  to a bound method.

- Fixed a minor memory leak in dictobject.c. The content of the free
  list was not freed on interpreter shutdown.

- Limit free list of method and builtin function objects to 256
  entries each.

- Patch #1953: Added ``sys._compact_freelists()`` and the C API
  functions ``PyInt_CompactFreeList`` and ``PyFloat_CompactFreeList``
  to compact the internal free lists of pre-allocted ints and floats.

- Bug #1983: Fixed return type of fork(), fork1() and forkpty() calls.
  Python expected the return type int but the fork familie returns
  pi_t.

- Issue #1678380: Fix a bug that identifies 0j and -0j when they
  appear in the same code unit.

- Issue #2025: Added tuple.count() and tuple.index() methods to comply
  with the collections.Sequence API.

- Fixed multiple reinitialization of the Python interpreter. The small
  int list in longobject.c has caused a seg fault during the third
  finalization.

- Issue #1973: bytes.fromhex('') raised SystemError.

- Issue #1771: remove cmp parameter from sorted() and list.sort().

- Issue #1969: split and rsplit in bytearray are inconsistent.

- map() no longer accepts None for the first argument.  Use zip()
  instead.

- Issue #1769: Now int("- 1") is not allowed any more.

- Object/longobject.c: long(float('nan')) raises an OverflowError
  instead of returning 0.

- Issue #1762972: __file__ points to the source file instead of the
  pyc/pyo file if the py file exists.

- Issue #1393: object_richcompare() returns NotImplemented instead of
  False if the objects aren't equal, to give the other side a chance.

- Issue #1692: Interpreter was not displaying location of SyntaxError.

- Improve some exception messages when Windows fails to load an
  extension module.  Now we get for example '%1 is not a valid Win32
  application' instead of 'error code 193'.  Also use Unicode strings
  to deal with non-English locales.

- Issue #1587: Added instancemethod wrapper for PyCFunctions. The
  Python C API has gained a new type *PyInstanceMethod_Type* and the
  functions *PyInstanceMethod_Check(o)*, *PyInstanceMethod_New(func)*
  and *PyInstanceMethod_Function(im)*.

- Constants gc.DEBUG_OBJECT and gc.DEBUG_INSTANCE have been removed
  from the gc module; gc.DEBUG_COLLECTABLE or gc.DEBUG_UNCOLLECTABLE
  are now enough to print the corresponding list of objects considered
  by the garbage collector.

- Issue #1573: Improper use of the keyword-only syntax makes the
  parser crash.

- Issue #1564: The set implementation should special-case PyUnicode
  instead of PyString.

- Patch #1031213: Decode source line in SyntaxErrors back to its
  original source encoding.

- inspect.getsource() includes the decorators again.

- Bug #1713: posixpath.ismount() claims symlink to a mountpoint is a
  mountpoint.

- Fix utf-8-sig incremental decoder, which didn't recognise a BOM when
  the first chunk fed to the decoder started with a BOM, but was
  longer than 3 bytes.

Extension Modules
-----------------

- Code for itertools ifilter(), imap(), and izip() moved to bultins
  and renamed to filter(), map(), and zip().  Also, renamed
  izip_longest() to zip_longest() and ifilterfalse() to filterfalse().

- Issue #1762972: Re-added the reload() function as imp.reload().

- Bug #2111: mmap segfaults when trying to write a block opened with
  PROT_READ.

- Issue #2063: correct order of utime and stime in os.times() result
  on Windows.

Library
-------

- Weakref dictionaries now inherit from MutableMapping.

- Created new UserDict class in collections module.  This one inherits
  from and complies with the MutableMapping ABC.  Also, moved
  UserString and UserList to the collections module.  The
  MutableUserString class was removed.

- Removed UserDict.DictMixin.  Replaced all its uses with
  collections.MutableMapping.

- Issue #1703: getpass() should flush after writing prompt.

- Issue #1585: IDLE uses non-existent xrange() function.

- Issue #1578: Problems in win_getpass.

Build
-----

- Renamed --enable-unicode configure flag to --with-wide-unicode,
  since Unicode strings can't be disabled anymore.

C API
-----

- Issue #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE,
  Py_TYPE and Py_REFCNT.

- New API PyImport_ImportModuleNoBlock(), works like
  PyImport_ImportModule() but won't block on the import lock
  (returning an error instead).


What's New in Python 3.0a2?
===========================

*Release date: 07-Dec-2007*

(Note: this list is incomplete.)

Core and Builtins
-----------------

- str8 now has the same construction signature as bytes.

- Comparisons between str and str8 now return False/True for ==/!=.
  sqlite3 returns str8 when recreating on object from it's __conform__
  value.  The struct module returns str8 for all string-related
  formats.  This was true before this change, but becomes more
  apparent thanks to string comparisons always being False.

- Replaced `PyFile_FromFile()` with `PyFile_FromFd(fd, name. mode,
  buffer, encoding, newline)`.

- Fixed `imp.find_module()` to obey the -*- coding: -*- header.

- Changed `__file__` and `co_filename` to unicode. The path names are decoded
  with `Py_FileSystemDefaultEncoding` and a new API method
  `PyUnicode_DecodeFSDefault(char*)` was added.

- io.open() and _fileio.FileIO have grown a new argument closefd. A
  false value disables the closing of the file descriptor.

- Added a new option -b to issues warnings (-bb for errors) about
  certain operations between bytes/buffer and str like str(b'') and
  comparison.

- The standard streams sys.stdin, stdout and stderr may be None
  when the C runtime library returns an invalid file descriptor
  for the streams (fileno(stdin) < 0). For now this happens only for
  Windows GUI apps and scripts started with `pythonw.exe`.

- Added PCbuild9 directory for VS 2008.

- Renamed structmember.h WRITE_RESTRICTED to PY_WRITE_RESTRICTED to
  work around a name clash with VS 2008 on Windows.

- Unbound methods are gone for good. ClassObject.method returns an
  ordinary function object, instance.method still returns a bound
  method object.  The API of bound methods is cleaned up, too. The
  im_class attribute is removed and im_func + im_self are renamed to
  __func__ and __self__. The factory PyMethod_New takes only func and
  instance as argument.

- intobject.h is no longer included by Python.h. The remains were
  moved to longobject.h. It still exists to define several aliases
  from PyInt to PyLong functions.

- Removed sys.maxint, use sys.maxsize instead.

Extension Modules
-----------------

- The `hotshot` profiler has been removed; use `cProfile` instead.

Library
-------

- When loading an external file using testfile(), the passed-in
  encoding argument was being ignored if __loader__ is defined and
  forcing the source to be UTF-8.

- The methods `os.tmpnam()`, `os.tempnam()` and `os.tmpfile()` have
  been removed in favor of the tempfile module.

- Removed the 'new' module.

- Removed all types from the 'types' module that are easily accessible
  through builtins.


What's New in Python 3.0a1?
===========================

*Release date: 31-Aug-2007*

Core and Builtins
-----------------

- PEP 3131: Support non-ASCII identifiers.

- PEP 3120: Change default encoding to UTF-8.

- PEP 3123: Use proper C inheritance for PyObject.

- Removed the __oct__ and __hex__ special methods and added a bin()
  builtin function.

- PEP 3127: octal literals now start with "0o". Old-style octal
  literals are invalid. There are binary literals with a prefix of
  "0b".  This also affects int(x, 0).

- None, True, False are now keywords.

- PEP 3119: isinstance() and issubclass() can be overridden.

- Remove BaseException.message.

- Remove tuple parameter unpacking (PEP 3113).

- Remove the f_restricted attribute from frames.  This naturally leads
  to the removal of PyEval_GetRestricted() and PyFrame_IsRestricted().

- PEP 3132 was accepted. That means that you can do ``a, *b =
  range(5)`` to assign 0 to a and [1, 2, 3, 4] to b.

- range() now returns an iterator rather than a list.  Floats are not
  allowed.  xrange() is no longer defined.

- Patch #1660500: hide iteration variable in list comps, add set comps
  and use common code to handle compilation of iterative expressions.

- By default, != returns the opposite of ==, unless the latter returns
  NotImplemented.

- Patch #1680961: sys.exitfunc has been removed and replaced with a
  private C-level API.

- PEP 3115: new metaclasses: the metaclass is now specified as a
  keyword arg in the class statement, which can now use the full
  syntax of a parameter list. Also, the metaclass can implement a
  __prepare__ function which will be called to create the dictionary
  for the new class namespace.

- The long-deprecated argument "pend" of PyFloat_FromString() has been
  removed.

- The dir() function has been extended to call the __dir__() method on
  its argument, if it exists. If not, it will work like before. This
  allows customizing the output of dir() in the presence of a
  __getattr__().

- Removed support for __members__ and __methods__.

- Removed indexing/slicing on BaseException.

- input() became raw_input(): the name input() now implements the
  functionality formerly known as raw_input(); the name raw_input() is
  no longer defined.

- Classes listed in an 'except' clause must inherit from
  BaseException.

- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
  and .keys(), .items(), .values() return dict views, which behave
  like sets.

- PEP 3105: print is now a function.  Also (not in the PEP) the
  'softspace' attribute of files is now gone (since print() doesn't
  use it).  A side effect of this change is that you can get
  incomplete output lines in interactive sessions:

  >>> print(42, end="")
  42>>>

  We may be able to fix this after the I/O library rewrite.

- PEP 3102: keyword-only arguments.

- Int/Long unification is complete.  The 'long' built-in type and
  literals with trailing 'L' or 'l' have been removed.  Performance
  may be sub-optimal (haven't really benchmarked).

- 'except E, V' must now be spelled as 'except E as V' and deletes V
  at the end of the except clause; V must be a simple name.

- Added function annotations per PEP 3107.

- Added nonlocal declaration from PEP 3104:

  >>> def f(x):
  ...     def inc():
  ...         nonlocal x
  ...         x += 1
  ...         return x
  ...     return inc
  ...
  >>> inc = f(0)
  >>> inc()
  1
  >>> inc()
  2

- Moved intern() to sys.intern().

- exec is now a function.

- Renamed nb_nonzero to nb_bool and __nonzero__ to __bool__.

- Classic classes are a thing of the past.  All classes are new style.

- Exceptions *must* derive from BaseException.

- Integer division always returns a float.  The -Q option is no more.
  All the following are gone:

  * PyNumber_Divide and PyNumber_InPlaceDivide
  * __div__, __rdiv__, and __idiv__
  * nb_divide, nb_inplace_divide
  * operator.div, operator.idiv, operator.__div__, operator.__idiv__
    (Only __truediv__ and __floordiv__ remain, not sure how to handle
    them if we want to re-use __div__ and friends.  If we do, it will
    make it harder to write code for both 2.x and 3.x.)

- 'as' and 'with' are keywords.

- Absolute import is the default behavior for 'import foo' etc.

- Removed support for syntax: backticks (ie, `x`), <>.

- Removed these Python builtins: apply(), callable(), coerce(),
  execfile(), file(), reduce(), reload().

- Removed these Python methods: {}.has_key.

- Removed these opcodes: BINARY_DIVIDE, INPLACE_DIVIDE, UNARY_CONVERT.

- Remove C API support for restricted execution.

- zip(), map() and filter() now return iterators, behaving like their
  itertools counterparts.  This also affect map()'s behavior on
  sequences of unequal length -- it now stops after the shortest one
  is exhausted.

- Additions: set literals, set comprehensions, ellipsis literal.

- Added class decorators per PEP 3129.


Extension Modules
-----------------

- Removed the imageop module.  Obsolete long with its unit tests
  becoming useless from the removal of rgbimg and imgfile.

- Removed these attributes from the operator module: div, idiv,
  __div__, __idiv__, isCallable, sequenceIncludes.

- Removed these attributes from the sys module: exc_clear(), exc_type,
  exc_value, exc_traceback.


Library
-------

- Removed the compiler package.  Use of the _ast module and (an
  eventual) AST -> bytecode mechanism.

- Removed these modules: audiodev, Bastion, bsddb185, exceptions,
  linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha,
  stringold, strop, sunaudiodev, timing, xmllib.

- Moved the toaiff module to Tools/Demos.

- Removed obsolete IRIX modules: al/AL, cd/CD, cddb, cdplayer, cl/CL,
  DEVICE, ERRNO, FILE, fl/FL, flp, fm, GET, gl/GL, GLWS, IN, imgfile,
  IOCTL, jpeg, panel, panelparser, readcd, sgi, sv/SV, torgb, WAIT.

- Removed obsolete functions: commands.getstatus(), os.popen*().

- Removed functions in the string module that are also string methods;
  Remove string.{letters, lowercase, uppercase}.

- Removed support for long obsolete platforms: plat-aix3, plat-irix5.

- Removed xmlrpclib.SlowParser.  It was based on xmllib.

- Patch #1680961: atexit has been reimplemented in C.

- Add new codecs for UTF-32, UTF-32-LE and UTF-32-BE.

Build
-----

C API
-----

- Removed these Python slots: __coerce__, __div__, __idiv__, __rdiv__.

- Removed these C APIs: PyNumber_Coerce(), PyNumber_CoerceEx(),
  PyMember_Get, PyMember_Set.

- Removed these C slots/fields: nb_divide, nb_inplace_divide.

- Removed these macros: staticforward, statichere, PyArg_GetInt,
  PyArg_NoArgs, _PyObject_Del.

- Removed these typedefs: intargfunc, intintargfunc, intobjargproc,
  intintobjargproc, getreadbufferproc, getwritebufferproc,
  getsegcountproc, getcharbufferproc, memberlist.

Tests
-----

- Removed test.testall as test.regrtest replaces it.

Documentation
-------------

Mac
---

- The cfmfile module was removed.

Platforms
---------

- Support for BeOS and AtheOS was removed (according to PEP 11).

- Support for RiscOS, Irix, Tru64 was removed (allegedly).

Tools/Demos
-----------


What's New in Python 2.5 release candidate 1?
=============================================

*Release date: 17-AUG-2006*

Core and builtins
-----------------

- Unicode objects will no longer raise an exception when being
  compared equal or unequal to a string and a UnicodeDecodeError
  exception occurs, e.g. as result of a decoding failure.

  Instead, the equal (==) and unequal (!=) comparison operators will
  now issue a UnicodeWarning and interpret the two objects as
  unequal. The UnicodeWarning can be filtered as desired using
  the warning framework, e.g. silenced completely, turned into an
  exception, logged, etc.

  Note that compare operators other than equal and unequal will still
  raise UnicodeDecodeError exceptions as they've always done.

- Fix segfault when doing string formatting on subclasses of long.

- Fix bug related to __len__ functions using values > 2**32 on 64-bit machines
  with new-style classes.

- Fix bug related to __len__ functions returning negative values with
  classic classes.

- Patch #1538606, Fix __index__() clipping.  There were some problems
  discovered with the API and how integers that didn't fit into Py_ssize_t
  were handled.  This patch attempts to provide enough alternatives
  to effectively use __index__.

- Bug #1536021: __hash__ may now return long int; the final hash
  value is obtained by invoking hash on the long int.

- Bug #1536786: buffer comparison could emit a RuntimeWarning.

- Bug #1535165: fixed a segfault in input() and raw_input() when
  sys.stdin is closed.

- On Windows, the PyErr_Warn function is now exported from
  the Python dll again.

- Bug #1191458: tracing over for loops now produces a line event
  on each iteration.  Fixing this problem required changing the .pyc
  magic number.  This means that .pyc files generated before 2.5c1
  will be regenerated.

- Bug #1333982: string/number constants were inappropriately stored
  in the byte code and co_consts even if they were not used, ie
  immediately popped off the stack.

- Fixed a reference-counting problem in property().


Library
-------

- Fix a bug in the ``compiler`` package that caused invalid code to be
  generated for generator expressions.

- The distutils version has been changed to 2.5.0. The change to
  keep it programmatically in sync with the Python version running
  the code (introduced in 2.5b3) has been reverted. It will continue
  to be maintained manually as static string literal.

- If the Python part of a ctypes callback function returns None,
  and this cannot be converted to the required C type, an exception is
  printed with PyErr_WriteUnraisable.  Before this change, the C
  callback returned arbitrary values to the calling code.

- The __repr__ method of a NULL ctypes.py_object() no longer raises
  an exception.

- uuid.UUID now has a bytes_le attribute. This returns the UUID in
  little-endian byte order for Windows. In addition, uuid.py gained some
  workarounds for clocks with low resolution, to stop the code yielding
  duplicate UUIDs.

- Patch #1540892: site.py Quitter() class attempts to close sys.stdin
  before raising SystemExit, allowing IDLE to honor quit() and exit().

- Bug #1224621: make tabnanny recognize IndentationErrors raised by tokenize.

- Patch #1536071: trace.py should now find the full module name of a
  file correctly even on Windows.

- logging's atexit hook now runs even if the rest of the module has
  already been cleaned up.

- Bug #1112549, fix DoS attack on cgi.FieldStorage.

- Bug #1531405, format_exception no longer raises an exception if
  str(exception) raised an exception.

- Fix a bug in the ``compiler`` package that caused invalid code to be
  generated for nested functions.


Extension Modules
-----------------

- Patch #1511317: don't crash on invalid hostname (alias) info.

- Patch #1535500: fix segfault in BZ2File.writelines and make sure it
  raises the correct exceptions.

- Patch # 1536908: enable building ctypes on OpenBSD/AMD64.  The
  '-no-stack-protector' compiler flag for OpenBSD has been removed.

- Patch #1532975 was applied, which fixes Bug #1533481: ctypes now
  uses the _as_parameter_ attribute when objects are passed to foreign
  function calls.  The ctypes version number was changed to 1.0.1.

- Bug #1530559, struct.pack raises TypeError where it used to convert.
  Passing float arguments to struct.pack when integers are expected
  now triggers a DeprecationWarning.


Tests
-----

- test_socketserver should now work on cygwin and not fail sporadically
  on other platforms.

- test_mailbox should now work on cygwin versions 2006-08-10 and later.

- Bug #1535182: really test the xreadlines() method of bz2 objects.

- test_threading now skips testing alternate thread stack sizes on
  platforms that don't support changing thread stack size.


Documentation
-------------

- Patch #1534922: unittest docs were corrected and enhanced.


Build
-----

- Bug #1535502, build _hashlib on Windows, and use masm assembler
  code in OpenSSL.

- Bug #1534738, win32 debug version of _msi should be _msi_d.pyd.

- Bug #1530448, ctypes build failure on Solaris 10 was fixed.


C API
-----

- New API for Unicode rich comparisons: PyUnicode_RichCompare()

- Bug #1069160.  Internal correctness changes were made to
  ``PyThreadState_SetAsyncExc()``.  A test case was added, and
  the documentation was changed to state that the return value
  is always 1 (normal) or 0 (if the specified thread wasn't found).


What's New in Python 2.5 beta 3?
================================

*Release date: 03-AUG-2006*

Core and builtins
-----------------

- _PyWeakref_GetWeakrefCount() now returns a Py_ssize_t; it previously
  returned a long (see PEP 353).

- Bug #1515471: string.replace() accepts character buffers again.

- Add PyErr_WarnEx() so C code can pass the stacklevel to warnings.warn().
  This provides the proper warning for struct.pack().
  PyErr_Warn() is now deprecated in favor of PyErr_WarnEx().

- Patch #1531113: Fix augmented assignment with yield expressions.
  Also fix a SystemError when trying to assign to yield expressions.

- Bug #1529871: The speed enhancement patch #921466 broke Python's compliance
  with PEP 302.  This was fixed by adding an ``imp.NullImporter`` type that is
  used in ``sys.path_importer_cache`` to cache non-directory paths and avoid
  excessive filesystem operations during imports.

- Bug #1521947: When checking for overflow, ``PyOS_strtol()`` used some
  operations on signed longs that are formally undefined by C.
  Unfortunately, at least one compiler now cares about that, so complicated
  the code to make that compiler happy again.

- Bug #1524310: Properly report errors from FindNextFile in os.listdir.

- Patch #1232023: Stop including current directory in search
  path on Windows.

- Fix some potential crashes found with failmalloc.

- Fix warnings reported by Klocwork's static analysis tool.

- Bug #1512814, Fix incorrect lineno's when code within a function
  had more than 255 blank lines.

- Patch #1521179: Python now accepts the standard options ``--help`` and
  ``--version`` as well as ``/?`` on Windows.

- Bug #1520864: unpacking singleton tuples in a 'for' loop (for x, in) works
  again.  Fixing this problem required changing the .pyc magic number.
  This means that .pyc files generated before 2.5b3 will be regenerated.

- Bug #1524317:  Compiling Python ``--without-threads`` failed.
  The Python core compiles again, and, in a build without threads, the
  new ``sys._current_frames()`` returns a dictionary with one entry,
  mapping the faux "thread id" 0 to the current frame.

- Bug #1525447: build on MacOS X on a case-sensitive filesystem.


Library
-------

- Fix #1693149.  Now you can pass several modules separated by
  comma to trace.py in the same --ignore-module option.

- Correction of patch #1455898: In the mbcs decoder, set final=False
  for stream decoder, but final=True for the decode function.

- os.urandom no longer masks unrelated exceptions like SystemExit or
  KeyboardInterrupt.

- Bug #1525866: Don't copy directory stat times in
  shutil.copytree on Windows

- Bug #1002398: The documentation for os.path.sameopenfile now correctly
  refers to file descriptors, not file objects.

- The renaming of the xml package to xmlcore, and the import hackery done
  to make it appear at both names, has been removed.  Bug #1511497,
  #1513611, and probably others.

- Bug #1441397: The compiler module now recognizes module and function
  docstrings correctly as it did in Python 2.4.

- Bug #1529297:  The rewrite of doctest for Python 2.4 unintentionally
  lost that tests are sorted by name before being run.  This rarely
  matters for well-written tests, but can create baffling symptoms if
  side effects from one test to the next affect outcomes.  ``DocTestFinder``
  has been changed to sort the list of tests it returns.

- The distutils version has been changed to 2.5.0, and is now kept
  in sync with sys.version_info[:3].

- Bug #978833: Really close underlying socket in _socketobject.close.

- Bug #1459963: urllib and urllib2 now normalize HTTP header names with
  title().

- Patch #1525766: In pkgutil.walk_packages, correctly pass the onerror callback
  to recursive calls and call it with the failing package name.

- Bug #1525817: Don't truncate short lines in IDLE's tool tips.

- Patch #1515343: Fix printing of deprecated string exceptions with a
  value in the traceback module.

- Resync optparse with Optik 1.5.3: minor tweaks for/to tests.

- Patch #1524429: Use repr() instead of backticks in Tkinter again.

- Bug #1520914: Change time.strftime() to accept a zero for any position in its
  argument tuple.  For arguments where zero is illegal, the value is forced to
  the minimum value that is correct.  This is to support an undocumented but
  common way people used  to fill in inconsequential information in the time
  tuple pre-2.4.

- Patch #1220874: Update the binhex module for Mach-O.

- The email package has improved RFC 2231 support, specifically for
  recognizing the difference between encoded (name*0*=<blah>) and non-encoded
  (name*0=<blah>) parameter continuations.  This may change the types of
  values returned from email.message.Message.get_param() and friends.
  Specifically in some cases where non-encoded continuations were used,
  get_param() used to return a 3-tuple of (None, None, string) whereas now it
  will just return the string (since non-encoded continuations don't have
  charset and language parts).

  Also, whereas % values were decoded in all parameter continuations, they are
  now only decoded in encoded parameter parts.

- Bug #1517990: IDLE keybindings on MacOS X now work correctly

- Bug #1517996: IDLE now longer shows the default Tk menu when a
  path browser, class browser or debugger is the frontmost window on MacOS X

- Patch #1520294: Support for getset and member descriptors in types.py,
  inspect.py, and pydoc.py.  Specifically, this allows for querying the type
  of an object against these built-in types and more importantly, for getting
  their docstrings printed in the interactive interpreter's help() function.


Extension Modules
-----------------

- Patch #1519025 and bug #926423: If a KeyboardInterrupt occurs during
  a socket operation on a socket with a timeout, the exception will be
  caught correctly.  Previously, the exception was not caught.

- Patch #1529514: The _ctypes extension is now compiled on more
  openbsd target platforms.

- The ``__reduce__()`` method of the new ``collections.defaultdict`` had
  a memory leak, affecting pickles and deep copies.

- Bug #1471938: Fix curses module build problem on Solaris 8; patch by
  Paul Eggert.

- Patch #1448199: Release interpreter lock in _winreg.ConnectRegistry.

- Patch #1521817: Index range checking on ctypes arrays containing
  exactly one element enabled again.  This allows iterating over these
  arrays, without the need to check the array size before.

- Bug #1521375: When the code in ctypes.util.find_library was
  run with root privileges, it could overwrite or delete
  /dev/null in certain cases; this is now fixed.

- Bug #1467450: On Mac OS X 10.3, RTLD_GLOBAL is now used as the
  default mode for loading shared libraries in ctypes.

- Because of a misspelled preprocessor symbol, ctypes was always
  compiled without thread support; this is now fixed.

- pybsddb Bug #1527939: bsddb module DBEnv dbremove and dbrename
  methods now allow their database parameter to be None as the
  sleepycat API allows.

- Bug #1526460: Fix socketmodule compile on NetBSD as it has a different
  bluetooth API compared with Linux and FreeBSD.

Tests
-----

- Bug #1501330: Change test_ossaudiodev to be much more tolerant in terms of
  how long the test file should take to play.  Now accepts taking 2.93 secs
  (exact time) +/- 10% instead of the hard-coded 3.1 sec.

- Patch #1529686: The standard tests ``test_defaultdict``, ``test_iterlen``,
  ``test_uuid`` and ``test_email_codecs`` didn't actually run any tests when
  run via ``regrtest.py``. Now they do.

Build
-----

- Bug #1439538: Drop usage of test -e in configure as it is not portable.

Mac
---

- PythonLauncher now works correctly when the path to the script contains
  characters that are treated specially by the shell (such as quotes).

- Bug #1527397: PythonLauncher now launches scripts with the working directory
  set to the directory that contains the script instead of the user home
  directory. That latter was an implementation accident and not what users
  expect.


What's New in Python 2.5 beta 2?
================================

*Release date: 11-JUL-2006*

Core and builtins
-----------------

- Bug #1441486: The literal representation of -(sys.maxint - 1)
  again evaluates to an int object, not a long.

- Bug #1501934: The scope of global variables that are locally assigned
  using augmented assignment is now correctly determined.

- Bug #927248: Recursive method-wrapper objects can now safely
  be released.

- Bug #1417699: Reject locale-specific decimal point in float()
  and atof().

- Bug #1511381: codec_getstreamcodec() in codec.c is corrected to
  omit a default "error" argument for NULL pointer.  This allows
  the parser to take a codec from cjkcodecs again.

- Bug #1519018: 'as' is now validated properly in import statements.

- On 64 bit systems, int literals that use less than 64 bits are
  now ints rather than longs.

- Bug #1512814, Fix incorrect lineno's when code at module scope
  started after line 256.

- New function ``sys._current_frames()`` returns a dict mapping thread
  id to topmost thread stack frame.  This is for expert use, and is
  especially useful for debugging application deadlocks.  The functionality
  was previously available in Fazal Majid's ``threadframe`` extension
  module, but it wasn't possible to do this in a wholly threadsafe way from
  an extension.

Library
-------

- Bug #1257728: Mention Cygwin in distutils error message about a missing
  VS 2003.

- Patch #1519566: Update turtle demo, make begin_fill idempotent.

- Bug #1508010: msvccompiler now requires the DISTUTILS_USE_SDK
  environment variable to be set in order to the SDK environment
  for finding the compiler, include files, etc.

- Bug #1515998: Properly generate logical ids for files in bdist_msi.

- warnings.py now ignores ImportWarning by default

- string.Template() now correctly handles tuple-values. Previously,
  multi-value tuples would raise an exception and single-value tuples would
  be treated as the value they contain, instead.

- Bug #822974: Honor timeout in telnetlib.{expect,read_until}
  even if some data are received.

- Bug #1267547: Put proper recursive setup.py call into the
  spec file generated by bdist_rpm.

- Bug #1514693: Update turtle's heading when switching between
  degrees and radians.

- Reimplement turtle.circle using a polyline, to allow correct
  filling of arcs.

- Bug #1514703: Only setup canvas window in turtle when the canvas
  is created.

- Bug #1513223: .close() of a _socketobj now releases the underlying
  socket again, which then gets closed as it becomes unreferenced.

- Bug #1504333: Make sgmllib support angle brackets in quoted
  attribute values.

- Bug #853506: Fix IPv6 address parsing in unquoted attributes in
  sgmllib ('[' and ']' were not accepted).

- Fix a bug in the turtle module's end_fill function.

- Bug #1510580: The 'warnings' module improperly required that a Warning
  category be either a types.ClassType and a subclass of Warning.  The proper
  check is just that it is a subclass with Warning as the documentation states.

- The compiler module now correctly compiles the new try-except-finally
  statement (bug #1509132).

- The wsgiref package is now installed properly on Unix.

- A bug was fixed in logging.config.fileConfig() which caused a crash on
  shutdown when fileConfig() was called multiple times.

- The sqlite3 module did cut off data from the SQLite database at the first
  null character before sending it to a custom converter. This has been fixed
  now.

Extension Modules
-----------------

- #1494314: Fix a regression with high-numbered sockets in 2.4.3. This
  means that select() on sockets > FD_SETSIZE (typically 1024) work again.
  The patch makes sockets use poll() internally where available.

- Assigning None to pointer type fields in ctypes structures possible
  overwrote the wrong fields, this is fixed now.

- Fixed a segfault in _ctypes when ctypes.wintypes were imported
  on non-Windows platforms.

- Bug #1518190: The ctypes.c_void_p constructor now accepts any
  integer or long, without range checking.

- Patch #1517790: It is now possible to use custom objects in the ctypes
  foreign function argtypes sequence as long as they provide a from_param
  method, no longer is it required that the object is a ctypes type.

- The '_ctypes' extension module now works when Python is configured
  with the --without-threads option.

- Bug #1513646: os.access on Windows now correctly determines write
  access, again.

- Bug #1512695: cPickle.loads could crash if it was interrupted with
  a KeyboardInterrupt.

- Bug #1296433: parsing XML with a non-default encoding and
  a CharacterDataHandler could crash the interpreter in pyexpat.

- Patch #1516912: improve Modules support for OpenVMS.

Build
-----

- Automate Windows build process for the Win64 SSL module.

- 'configure' now detects the zlib library the same way as distutils.
  Previously, the slight difference could cause compilation errors of the
  'zlib' module on systems with more than one version of zlib.

- The MSI compileall step was fixed to also support a TARGETDIR
  with spaces in it.

- Bug #1517388: sqlite3.dll is now installed on Windows independent
  of Tcl/Tk.

- Bug #1513032: 'make install' failed on FreeBSD 5.3 due to lib-old
  trying to be installed even though it's empty.

Tests
-----

- Call os.waitpid() at the end of tests that spawn child processes in order
  to minimize resources (zombies).

Documentation
-------------

- Cover ImportWarning, PendingDeprecationWarning and simplefilter() in the
  documentation for the warnings module.

- Patch #1509163: MS Toolkit Compiler no longer available.

- Patch #1504046: Add documentation for xml.etree.


What's New in Python 2.5 beta 1?
================================

*Release date: 20-JUN-2006*

Core and builtins
-----------------

- Patch #1507676: Error messages returned by invalid abstract object operations
  (such as iterating over an integer) have been improved and now include the
  type of the offending object to help with debugging.

- Bug #992017: A classic class that defined a __coerce__() method that returned
  its arguments swapped would infinitely recurse and segfault the interpreter.

- Fix the socket tests so they can be run concurrently.

- Removed 5 integers from C frame objects (PyFrameObject).
  f_nlocals, f_ncells, f_nfreevars, f_stack_size, f_restricted.

- Bug #532646: object.__call__() will continue looking for the __call__
  attribute on objects until one without one is found.  This leads to recursion
  when you take a class and set its __call__ attribute to an instance of the
  class.  Originally fixed for classic classes, but this fix is for new-style.
  Removes the infinite_rec_3 crasher.

- The string and unicode methods startswith() and endswith() now accept
  a tuple of prefixes/suffixes to look for. Implements RFE #1491485.

- Buffer objects, at the C level, never used the char buffer
  implementation even when the char buffer for the wrapped object was
  explicitly requested (originally returned the read or write buffer).
  Now a TypeError is raised if the char buffer is not present but is
  requested.

- Patch #1346214: Statements like "if 0: suite" are now again optimized
  away like they were in Python 2.4.

- Builtin exceptions are now full-blown new-style classes instead of
  instances pretending to be classes, which speeds up exception handling
  by about 80% in comparison to 2.5a2.

- Patch #1494554: Update unicodedata.numeric and unicode.isnumeric to
  Unicode 4.1.

- Patch #921466: sys.path_importer_cache is now used to cache valid and
  invalid file paths for the built-in import machinery which leads to
  fewer open calls on startup.

- Patch #1442927: ``long(str, base)`` is now up to 6x faster for non-power-
  of-2 bases.  The largest speedup is for inputs with about 1000 decimal
  digits.  Conversion from non-power-of-2 bases remains quadratic-time in
  the number of input digits (it was and remains linear-time for bases
  2, 4, 8, 16 and 32).

- Bug #1334662: ``int(string, base)`` could deliver a wrong answer
  when ``base`` was not 2, 4, 8, 10, 16 or 32, and ``string`` represented
  an integer close to ``sys.maxint``.  This was repaired by patch
  #1335972, which also gives a nice speedup.

- Patch #1337051: reduced size of frame objects.

- PyErr_NewException now accepts a tuple of base classes as its
  "base" parameter.

- Patch #876206: function call speedup by retaining allocated frame
  objects.

- Bug #1462152: file() now checks more thoroughly for invalid mode
  strings and removes a possible "U" before passing the mode to the
  C library function.

- Patch #1488312, Fix memory alignment problem on SPARC in unicode

- Bug #1487966: Fix SystemError with conditional expression in assignment

- WindowsError now has two error code attributes: errno, which carries
  the error values from errno.h, and winerror, which carries the error
  values from winerror.h. Previous versions put the winerror.h values
  (from GetLastError()) into the errno attribute.

- Patch #1475845: Raise IndentationError for unexpected indent.

- Patch #1479181: split open() and file() from being aliases for each other.

- Patch #1497053 & bug #1275608: Exceptions occurring in ``__eq__()``
  methods were always silently ignored by dictionaries when comparing keys.
  They are now passed through (except when using the C API function
  ``PyDict_GetItem()``, whose semantics did not change).

- Bug #1456209: In some obscure cases it was possible for a class with a
  custom ``__eq__()`` method to confuse dict internals when class instances
  were used as a dict's keys and the ``__eq__()`` method mutated the dict.
  No, you don't have any code that did this ;-)

Extension Modules
-----------------

- Bug #1295808: expat symbols should be namespaced in pyexpat

- Patch #1462338: Upgrade pyexpat to expat 2.0.0

- Change binascii.hexlify to accept a read-only buffer instead of only a char
  buffer and actually follow its documentation.

- Fixed a potentially invalid memory access of CJKCodecs' shift-jis decoder.

- Patch #1478788 (modified version): The functional extension module has
  been renamed to _functools and a functools Python wrapper module added.
  This provides a home for additional function related utilities that are
  not specifically about functional programming. See PEP 309.

- Patch #1493701: performance enhancements for struct module.

- Patch #1490224: time.altzone is now set correctly on Cygwin.

- Patch #1435422: zlib's compress and decompress objects now have a
  copy() method.

- Patch #1454481: thread stack size is now tunable at runtime for thread
  enabled builds on Windows and systems with Posix threads support.

- On Win32, os.listdir now supports arbitrarily-long Unicode path names
  (up to the system limit of 32K characters).

- Use Win32 API to implement os.{access,chdir,chmod,mkdir,remove,rename,rmdir,utime}.
  As a result, these functions now raise WindowsError instead of OSError.

- ``time.clock()`` on Win64 should use the high-performance Windows
  ``QueryPerformanceCounter()`` now (as was already the case on 32-bit
  Windows platforms).

- Calling Tk_Init twice is refused if the first call failed as that
  may deadlock.

- bsddb: added the DB_ARCH_REMOVE flag and fixed db.DBEnv.log_archive() to
  accept it without potentially using an uninitialized pointer.

- bsddb: added support for the DBEnv.log_stat() and DBEnv.lsn_reset() methods
  assuming BerkeleyDB >= 4.0 and 4.4 respectively.  [pybsddb project SF
  patch numbers 1494885 and 1494902]

- bsddb: added an interface for the BerkeleyDB >= 4.3 DBSequence class.
  [pybsddb project SF patch number 1466734]

- bsddb: fix DBCursor.pget() bug with keyword argument names when no data
  parameter is supplied.  [SF pybsddb bug #1477863]

- bsddb: the __len__ method of a DB object has been fixed to return correct
  results.  It could previously incorrectly return 0 in some cases.
  Fixes SF bug 1493322 (pybsddb bug 1184012).

- bsddb: the bsddb.dbtables Modify method now raises the proper error and
  aborts the db transaction safely when a modifier callback fails.
  Fixes SF python patch/bug #1408584.

- bsddb: multithreaded DB access using the simple bsddb module interface
  now works reliably.  It has been updated to use automatic BerkeleyDB
  deadlock detection and the bsddb.dbutils.DeadlockWrap wrapper to retry
  database calls that would previously deadlock. [SF python bug #775414]

- Patch #1446489: add support for the ZIP64 extensions to zipfile.

- Patch #1506645: add Python wrappers for the curses functions
  is_term_resized, resize_term and resizeterm.

Library
-------

- Patch #815924: Restore ability to pass type= and icon= in tkMessageBox
  functions.

- Patch #812986: Update turtle output even if not tracing.

- Patch #1494750: Destroy master after deleting children in
  Tkinter.BaseWidget.

- Patch #1096231: Add ``default`` argument to Tkinter.Wm.wm_iconbitmap.

- Patch #763580: Add name and value arguments to Tkinter variable
  classes.

- Bug #1117556: SimpleHTTPServer now tries to find and use the system's
  mime.types file for determining MIME types.

- Bug #1339007: Shelf objects now don't raise an exception in their
  __del__ method when initialization failed.

- Patch #1455898: The MBCS codec now supports the incremental mode for
  double-byte encodings.

- ``difflib``'s ``SequenceMatcher.get_matching_blocks()`` was changed to
  guarantee that adjacent triples in the return list always describe
  non-adjacent blocks.  Previously, a pair of matching blocks could end
  up being described by multiple adjacent triples that formed a partition
  of the matching pair.

- Bug #1498146: fix optparse to handle Unicode strings in option help,
  description, and epilog.

- Bug #1366250: minor optparse documentation error.

- Bug #1361643: fix textwrap.dedent() so it handles tabs appropriately;
  clarify docs.

- The wsgiref package has been added to the standard library.

- The functions update_wrapper() and wraps() have been added to the functools
  module. These make it easier to copy relevant metadata from the original
  function when writing wrapper functions.

- The optional ``isprivate`` argument to ``doctest.testmod()``, and the
  ``doctest.is_private()`` function, both deprecated in 2.4, were removed.

- Patch #1359618: Speed up charmap encoder by using a trie structure
  for lookup.

- The functions in the ``pprint`` module now sort dictionaries by key
  before computing the display.  Before 2.5, ``pprint`` sorted a dictionary
  if and only if its display required more than one line, although that
  wasn't documented.  The new behavior increases predictability; e.g.,
  using ``pprint.pprint(a_dict)`` in a doctest is now reliable.

- Patch #1497027: try HTTP digest auth before basic auth in urllib2
  (thanks for J. J. Lee).

- Patch #1496206: improve urllib2 handling of passwords with respect to
  default HTTP and HTTPS ports.

- Patch #1080727: add "encoding" parameter to doctest.DocFileSuite.

- Patch #1281707: speed up gzip.readline.

- Patch #1180296: Two new functions were added to the locale module:
  format_string() to get the effect of  "format % items" but locale-aware,
  and currency() to format a monetary number with currency sign.

- Patch #1486962: Several bugs in the turtle Tk demo module were fixed
  and several features added, such as speed and geometry control.

- Patch #1488881: add support for external file objects in bz2 compressed
  tarfiles.

- Patch #721464: pdb.Pdb instances can now be given explicit stdin and
  stdout arguments, making it possible to redirect input and output
  for remote debugging.

- Patch #1484695: Update the tarfile module to version 0.8. This fixes
  a couple of issues, notably handling of long file names using the
  GNU LONGNAME extension.

- Patch #1478292. ``doctest.register_optionflag(name)`` shouldn't create a
  new flag when ``name`` is already the name of an option flag.

- Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler
  package.

- Patch #1472854: make the rlcompleter.Completer class usable on non-
  UNIX platforms.

- Patch #1470846: fix urllib2 ProxyBasicAuthHandler.

- Bug #1472827: correctly escape newlines and tabs in attribute values in
  the saxutils.XMLGenerator class.


Build
-----

- Bug #1502728: Correctly link against librt library on HP-UX.

- OpenBSD 3.9 is supported now.

- Patch #1492356: Port to Windows CE.

- Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64.

- Patch #1471883: Add --enable-universalsdk.

C API
-----

Tests
-----

Tools
-----

Documentation
-------------



What's New in Python 2.5 alpha 2?
=================================

*Release date: 27-APR-2006*

Core and builtins
-----------------

- Bug #1465834: 'bdist_wininst preinstall script support' was fixed
  by converting these apis from macros into exported functions again:

    PyParser_SimpleParseFile PyParser_SimpleParseString PyRun_AnyFile
    PyRun_AnyFileEx PyRun_AnyFileFlags PyRun_File PyRun_FileEx
    PyRun_FileFlags PyRun_InteractiveLoop PyRun_InteractiveOne
    PyRun_SimpleFile PyRun_SimpleFileEx PyRun_SimpleString
    PyRun_String Py_CompileString

- Under COUNT_ALLOCS, types are not necessarily immortal anymore.

- All uses of PyStructSequence_InitType have been changed to initialize
  the type objects only once, even if the interpreter is initialized
  multiple times.

- Bug #1454485, array.array('u') could crash the interpreter.  This was
  due to PyArgs_ParseTuple(args, 'u#', ...) trying to convert buffers (strings)
  to unicode when it didn't make sense.  'u#' now requires a unicode string.

- Py_UNICODE is unsigned.  It was always documented as unsigned, but
  due to a bug had a signed value in previous versions.

- Patch #837242: ``id()`` of any Python object always gives a positive
  number now, which might be a long integer. ``PyLong_FromVoidPtr`` and
  ``PyLong_AsVoidPtr`` have been changed accordingly.  Note that it has
  never been correct to implement a ``__hash()__`` method that returns the
  ``id()`` of an object:

      def __hash__(self):
          return id(self)  # WRONG

  because a hash result must be a (short) Python int but it was always
  possible for ``id()`` to return a Python long.  However, because ``id()``
  could return negative values before, on a 32-bit box an ``id()`` result
  was always usable as a hash value before this patch.  That's no longer
  necessarily so.

- Python on OS X 10.3 and above now uses dlopen() (via dynload_shlib.c)
  to load extension modules and now provides the dl module. As a result,
  sys.setdlopenflags() now works correctly on these systems. (SF patch
  #1454844)

- Patch #1463867: enhanced garbage collection to allow cleanup of cycles
  involving generators that have paused outside of any ``try`` or ``with``
  blocks.  (In 2.5a1, a paused generator that was part of a reference
  cycle could not be garbage collected, regardless of whether it was
  paused in a ``try`` or ``with`` block.)

Extension Modules
-----------------

- Patch #1191065: Fix preprocessor problems on systems where recvfrom
  is a macro.

- Bug #1467952: os.listdir() now correctly raises an error if readdir()
  fails with an error condition.

- Fixed bsddb.db.DBError derived exceptions so they can be unpickled.

- Bug #1117761: bsddb.*open() no longer raises an exception when using
  the cachesize parameter.

- Bug #1149413: bsddb.*open() no longer raises an exception when using
  a temporary db (file=None) with the 'n' flag to truncate on open.

- Bug #1332852: bsddb module minimum BerkeleyDB version raised to 3.3
  as older versions cause excessive test failures.

- Patch #1062014: AF_UNIX sockets under Linux have a special
  abstract namespace that is now fully supported.

Library
-------

- Bug #1223937: subprocess.CalledProcessError reports the exit status
  of the process using the returncode attribute, instead of
  abusing errno.

- Patch #1475231: ``doctest`` has a new ``SKIP`` option, which causes
  a doctest to be skipped (the code is not run, and the expected output
  or exception is ignored).

- Fixed contextlib.nested to cope with exceptions being raised and
  caught inside exit handlers.

- Updated optparse module to Optik 1.5.1 (allow numeric constants in
  hex, octal, or binary; add ``append_const`` action; keep going if
  gettext cannot be imported; added ``OptionParser.destroy()`` method;
  added ``epilog`` for better help generation).

- Bug #1473760: ``tempfile.TemporaryFile()`` could hang on Windows, when
  called from a thread spawned as a side effect of importing a module.

- The pydoc module now supports documenting packages contained in
  .zip or .egg files.

- The pkgutil module now has several new utility functions, such
  as ``walk_packages()`` to support working with packages that are either
  in the filesystem or zip files.

- The mailbox module can now modify and delete messages from
  mailboxes, in addition to simply reading them.  Thanks to Gregory
  K. Johnson for writing the code, and to the 2005 Google Summer of
  Code for funding his work.

- The ``__del__`` method of class ``local`` in module ``_threading_local``
  returned before accomplishing any of its intended cleanup.

- Patch #790710: Add breakpoint command lists in pdb.

- Patch #1063914: Add Tkinter.Misc.clipboard_get().

- Patch #1191700: Adjust column alignment in bdb breakpoint lists.

- SimpleXMLRPCServer relied on the fcntl module, which is unavailable on
  Windows. Bug #1469163.

- The warnings, linecache, inspect, traceback, site, and doctest modules
  were updated to work correctly with modules imported from zipfiles or
  via other PEP 302 __loader__ objects.

- Patch #1467770: Reduce usage of subprocess._active to processes which
  the application hasn't waited on.

- Patch #1462222: Fix Tix.Grid.

- Fix exception when doing glob.glob('anything*/')

- The pstats.Stats class accepts an optional stream keyword argument to
  direct output to an alternate file-like object.

Build
-----

- The Makefile now has a reindent target, which runs reindent.py on
  the library.

- Patch #1470875: Building Python with MS Free Compiler

- Patch #1161914: Add a python-config script.

- Patch #1324762:Remove ccpython.cc; replace --with-cxx with
  --with-cxx-main. Link with C++ compiler only if --with-cxx-main was
  specified. (Can be overridden by explicitly setting LINKCC.) Decouple
  CXX from --with-cxx-main, see description in README.

- Patch #1429775: Link extension modules with the shared libpython.

- Fixed a libffi build problem on MIPS systems.

- ``PyString_FromFormat``, ``PyErr_Format``, and ``PyString_FromFormatV``
  now accept formats "%u" for unsigned ints, "%lu" for unsigned longs,
  and "%zu" for unsigned integers of type ``size_t``.

Tests
-----

- test_contextlib now checks contextlib.nested can cope with exceptions
  being raised and caught inside exit handlers.

- test_cmd_line now checks operation of the -m and -c command switches

- The test_contextlib test in 2.5a1 wasn't actually run unless you ran
  it separately and by hand.  It also wasn't cleaning up its changes to
  the current Decimal context.

- regrtest.py now has a -M option to run tests that test the new limits of
  containers, on 64-bit architectures. Running these tests is only sensible
  on 64-bit machines with more than two gigabytes of memory. The argument
  passed is the maximum amount of memory for the tests to use.

Tools
-----

- Added the Python benchmark suite pybench to the Tools/ directory;
  contributed by Marc-Andre Lemburg.

Documentation
-------------

- Patch #1473132: Improve docs for ``tp_clear`` and ``tp_traverse``.

- PEP 343: Added Context Types section to the library reference
  and attempted to bring other PEP 343 related documentation into
  line with the implementation and/or python-dev discussions.

- Bug #1337990: clarified that ``doctest`` does not support examples
  requiring both expected output and an exception.


What's New in Python 2.5 alpha 1?
=================================

*Release date: 05-APR-2006*

Core and builtins
-----------------

- PEP 338: -m command line switch now delegates to runpy.run_module
  allowing it to support modules in packages and zipfiles

- On Windows, .DLL is not an accepted file name extension for
  extension modules anymore; extensions are only found if they
  end in .PYD.

- Bug #1421664: sys.stderr.encoding is now set to the same value as
  sys.stdout.encoding.

- __import__ accepts keyword arguments.

- Patch #1460496: round() now accepts keyword arguments.

- Fixed bug #1459029 - unicode reprs were double-escaped.

- Patch #1396919: The system scope threads are re-enabled on FreeBSD
  5.4 and later versions.

- Bug #1115379: Compiling a Unicode string with an encoding declaration
  now gives a SyntaxError.

- Previously, Python code had no easy way to access the contents of a
  cell object. Now, a ``cell_contents`` attribute has been added
  (closes patch #1170323).

- Patch #1123430: Python's small-object allocator now returns an arena to
  the system ``free()`` when all memory within an arena becomes unused
  again.  Prior to Python 2.5, arenas (256KB chunks of memory) were never
  freed.  Some applications will see a drop in virtual memory size now,
  especially long-running applications that, from time to time, temporarily
  use a large number of small objects.  Note that when Python returns an
  arena to the platform C's ``free()``, there's no guarantee that the
  platform C library will in turn return that memory to the operating system.
  The effect of the patch is to stop making that impossible, and in tests it
  appears to be effective at least on Microsoft C and gcc-based systems.
  Thanks to Evan Jones for hard work and patience.

- Patch #1434038: property() now uses the getter's docstring if there is
  no "doc" argument given. This makes it possible to legitimately use
  property() as a decorator to produce a read-only property.

- PEP 357, patch 1436368: add an __index__ method to int/long and a matching
  nb_index slot to the PyNumberMethods struct.  The slot is consulted instead
  of requiring an int or long in slicing and a few other contexts, enabling
  other objects (e.g. Numeric Python's integers) to be used as slice indices.

- Fixed various bugs reported by Coverity's Prevent tool.

- PEP 352, patch #1104669: Make exceptions new-style objects.  Introduced the
  new exception base class, BaseException, which has a new message attribute.
  KeyboardInterrupt and SystemExit to directly inherit from BaseException now.
  Raising a string exception now raises a DeprecationWarning.

- Patch #1438387, PEP 328: relative and absolute imports. Imports can now be
  explicitly relative, using 'from .module import name' to mean 'from the same
  package as this module is in. Imports without dots still default to the
  old relative-then-absolute, unless 'from __future__ import
  absolute_import' is used.

- Properly check if 'warnings' raises an exception (usually when a filter set
  to "error" is triggered) when raising a warning for raising string
  exceptions.

- CO_GENERATOR_ALLOWED is no longer defined. This behavior is the default.
  The name was removed from Include/code.h.

- PEP 308: conditional expressions were added: (x if cond else y).

- Patch 1433928:
  - The copy module now "copies" function objects (as atomic objects).
  - dict.__getitem__ now looks for a __missing__ hook before raising
    KeyError.

- PEP 343: with statement implemented. Needs ``from __future__ import
  with_statement``. Use of 'with' as a variable will generate a warning.
  Use of 'as' as a variable will also generate a warning (unless it's
  part of an import statement).
  The following objects have __context__ methods:
  - The built-in file type.
  - The thread.LockType type.
  - The following types defined by the threading module:
    Lock, RLock, Condition, Semaphore, BoundedSemaphore.
  - The decimal.Context class.

- Fix the encodings package codec search function to only search
  inside its own package. Fixes problem reported in patch #1433198.

  Note: Codec packages should implement and register their own
  codec search function. PEP 100 has the details.

- PEP 353: Using ``Py_ssize_t`` as the index type.

- ``PYMALLOC_DEBUG`` builds now add ``4*sizeof(size_t)`` bytes of debugging
  info to each allocated block, since the ``Py_ssize_t`` changes (PEP 353)
  now allow Python to make use of memory blocks exceeding 2**32 bytes for
  some purposes on 64-bit boxes.  A ``PYMALLOC_DEBUG`` build was limited
  to 4-byte allocations before.

- Patch #1400181, fix unicode string formatting to not use the locale.
  This is how string objects work.  u'%f' could use , instead of .
  for the decimal point.  Now both strings and unicode always use periods.

- Bug #1244610, #1392915, fix build problem on OpenBSD 3.7 and 3.8.
  configure would break checking curses.h.

- Bug #959576: The pwd module is now built in. This allows Python to be
  built on UNIX platforms without $HOME set.

- Bug #1072182, fix some potential problems if characters are signed.

- Bug #889500, fix line number on SyntaxWarning for global declarations.

- Bug #1378022, UTF-8 files with a leading BOM crashed the interpreter.

- Support for converting hex strings to floats no longer works.
  This was not portable.  float('0x3') now raises a ValueError.

- Patch #1382163: Expose Subversion revision number to Python.  New C API
  function Py_GetBuildNumber().  New attribute sys.subversion.  Build number
  is now displayed in interactive prompt banner.

- Implementation of PEP 341 - Unification of try/except and try/finally.
  "except" clauses can now be written together with a "finally" clause in
  one try statement instead of two nested ones.  Patch #1355913.

- Bug #1379994: Builtin unicode_escape and raw_unicode_escape codec
  now encodes backslash correctly.

- Patch #1350409: Work around signal handling bug in Visual Studio 2005.

- Bug #1281408: Py_BuildValue now works correctly even with unsigned longs
  and long longs.

- SF Bug #1350188, "setdlopenflags" leads to crash upon "import"
  It was possible for dlerror() to return a NULL pointer, so
  it will now use a default error message in this case.

- Replaced most Unicode charmap codecs with new ones using the
  new Unicode translate string feature in the built-in charmap
  codec; the codecs were created from the mapping tables available
  at ftp.unicode.org and contain a few updates (e.g. the Mac OS
  encodings now include a mapping for the Apple logo)

- Added a few more codecs for Mac OS encodings

- Sped up some Unicode operations.

- A new AST parser implementation was completed. The abstract
  syntax tree is available for read-only (non-compile) access
  to Python code; an _ast module was added.

- SF bug #1167751: fix incorrect code being produced for generator expressions.
  The following code now raises a SyntaxError:  foo(a = i for i in range(10))

- SF Bug #976608: fix SystemError when mtime of an imported file is -1.

- SF Bug #887946: fix segfault when redirecting stdin from a directory.
  Provide a warning when a directory is passed on the command line.

- Fix segfault with invalid coding.

- SF bug #772896: unknown encoding results in MemoryError.

- All iterators now have a Boolean value of True.  Formerly, some iterators
  supported a __len__() method which evaluated to False when the iterator
  was empty.

- On 64-bit platforms, when __len__() returns a value that cannot be
  represented as a C int, raise OverflowError.

- test__locale is skipped on OS X < 10.4 (only partial locale support is
  present).

- SF bug #893549: parsing keyword arguments was broken with a few format
  codes.

- Changes donated by Elemental Security to make it work on AIX 5.3
  with IBM's 64-bit compiler (SF patch #1284289).  This also closes SF
  bug #105470: test_pwd fails on 64bit system (Opteron).

- Changes donated by Elemental Security to make it work on HP-UX 11 on
  Itanium2 with HP's 64-bit compiler (SF patch #1225212).

- Disallow keyword arguments for type constructors that don't use them
  (fixes bug #1119418).

- Forward UnicodeDecodeError into SyntaxError for source encoding errors.

- SF bug #900092: When tracing (e.g. for hotshot), restore 'return' events for
  exceptions that cause a function to exit.

- The implementation of set() and frozenset() was revised to use its
  own internal data structure.  Memory consumption is reduced by 1/3
  and there are modest speed-ups as well.  The API is unchanged.

- SF bug #1238681:  freed pointer is used in longobject.c:long_pow().

- SF bug #1229429: PyObject_CallMethod failed to decrement some
  reference counts in some error exit cases.

- SF bug #1185883:  Python's small-object memory allocator took over
  a block managed by the platform C library whenever a realloc specified
  a small new size.  However, there's no portable way to know then how
  much of the address space following the pointer is valid, so there's no
  portable way to copy data from the C-managed block into Python's
  small-object space without risking a memory fault.  Python's small-object
  realloc now leaves such blocks under the control of the platform C
  realloc.

- SF bug #1232517: An overflow error was not detected properly when
  attempting to convert a large float to an int in os.utime().

- SF bug #1224347: hex longs now print with lowercase letters just
  like their int counterparts.

- SF bug #1163563: the original fix for bug #1010677 ("thread Module
  Breaks PyGILState_Ensure()") broke badly in the case of multiple
  interpreter states; back out that fix and do a better job (see
  http://mail.python.org/pipermail/python-dev/2005-June/054258.html
  for a longer write-up of the problem).

- SF patch #1180995: marshal now uses a binary format by default when
  serializing floats.

- SF patch #1181301: on platforms that appear to use IEEE 754 floats,
  the routines that promise to produce IEEE 754 binary representations
  of floats now simply copy bytes around.

- bug #967182: disallow opening files with 'wU' or 'aU' as specified by PEP
  278.

- patch #1109424: int, long, float, complex, and unicode now check for the
  proper magic slot for type conversions when subclassed.  Previously the
  magic slot was ignored during conversion.  Semantics now match the way
  subclasses of str always behaved.  int/long/float, conversion of an instance
  to the base class has been moved to the proper nb_* magic slot and out of
  PyNumber_*().
  Thanks Walter Dörwald.

- Descriptors defined in C with a PyGetSetDef structure, where the setter is
  NULL, now raise an AttributeError when attempting to set or delete the
  attribute.  Previously a TypeError was raised, but this was inconsistent
  with the equivalent pure-Python implementation.

- It is now safe to call PyGILState_Release() before
  PyEval_InitThreads() (note that if there is reason to believe there
  are multiple threads around you still must call PyEval_InitThreads()
  before using the Python API; this fix is for extension modules that
  have no way of knowing if Python is multi-threaded yet).

- Typing Ctrl-C whilst raw_input() was waiting in a build with threads
  disabled caused a crash.

- Bug #1165306: instancemethod_new allowed the creation of a method
  with im_class == im_self == NULL, which caused a crash when called.

- Move exception finalisation later in the shutdown process - this
  fixes the crash seen in bug #1165761

- Added two new builtins, any() and all().

- Defining a class with empty parentheses is now allowed
  (e.g., ``class C(): pass`` is no longer a syntax error).
  Patch #1176012 added support to the 'parser' module and 'compiler' package
  (thanks to logistix for that added support).

- Patch #1115086: Support PY_LONGLONG in structmember.

- Bug #1155938: new style classes did not check that __init__() was
  returning None.

- Patch #802188: Report characters after line continuation character
  ('\') with a specific error message.

- Bug #723201: Raise a TypeError for passing bad objects to 'L' format.

- Bug #1124295: the __name__ attribute of file objects was
  inadvertently made inaccessible in restricted mode.

- Bug #1074011: closing sys.std{out,err} now causes a flush() and
  an ferror() call.

- min() and max() now support key= arguments with the same meaning as in
  list.sort().

- The peephole optimizer now performs simple constant folding in expressions:
      (2+3) --> (5).

- set and frozenset objects can now be marshalled.  SF #1098985.

- Bug #1077106: Poor argument checking could cause memory corruption
  in calls to os.read().

- The parser did not complain about future statements in illegal
  positions.  It once again reports a syntax error if a future
  statement occurs after anything other than a doc string.

- Change the %s format specifier for str objects so that it returns a
  unicode instance if the argument is not an instance of basestring and
  calling __str__ on the argument returns a unicode instance.

- Patch #1413181:  changed ``PyThreadState_Delete()`` to forget about the
  current thread state when the auto-GIL-state machinery knows about
  it (since the thread state is being deleted, continuing to remember it
  can't help, but can hurt if another thread happens to get created with
  the same thread id).

Extension Modules
-----------------

- Patch #1380952: fix SSL objects timing out on consecutive read()s

- Patch #1309579: wait3 and wait4 were added to the posix module.

- Patch #1231053: The audioop module now supports encoding/decoding of alaw.
  In addition, the existing ulaw code was updated.

- RFE #567972: Socket objects' family, type and proto properties are
  now exposed via new attributes.

- Everything under lib-old was removed.  This includes the following modules:
    Para, addpack, cmp, cmpcache, codehack, dircmp, dump, find, fmt, grep,
    lockfile, newdir, ni, packmail, poly, rand, statcache, tb, tzparse,
    util, whatsound, whrandom, zmod

- The following modules were removed:  regsub, reconvert, regex, regex_syntax.

- re and sre were swapped, so help(re) provides full help.  importing sre
  is deprecated.  The undocumented re.engine variable no longer exists.

- Bug #1448490: Fixed a bug that ISO-2022 codecs could not handle
  SS2 (single-shift 2) escape sequences correctly.

- The unicodedata module was updated to the 4.1 version of the Unicode
  database. The 3.2 version is still available as unicodedata.db_3_2_0
  for applications that require this specific version (such as IDNA).

- The timing module is no longer built by default.  It was deprecated
  in PEP 4 in Python 2.0 or earlier.

- Patch 1433928: Added a new type, defaultdict, to the collections module.
  This uses the new __missing__ hook behavior added to dict (see above).

- Bug #854823: socketmodule now builds on Sun platforms even when
  INET_ADDRSTRLEN is not defined.

- Patch #1393157: os.startfile() now has an optional argument to specify
  a "command verb" to invoke on the file.

- Bug #876637, prevent stack corruption when socket descriptor
  is larger than FD_SETSIZE.

- Patch #1407135, bug #1424041: harmonize mmap behavior of anonymous memory.
  mmap.mmap(-1, size) now returns anonymous memory in both Unix and Windows.
  mmap.mmap(0, size) should not be used on Windows for anonymous memory.

- Patch #1422385: The nis module now supports access to domains other
  than the system default domain.

- Use Win32 API to implement os.stat/fstat. As a result, subsecond timestamps
  are reported, the limit on path name lengths is removed, and stat reports
  WindowsError now (instead of OSError).

- Add bsddb.db.DBEnv.set_tx_timestamp allowing time based database recovery.

- Bug #1413192, fix seg fault in bsddb if a transaction was deleted
  before the env.

- Patch #1103116: Basic AF_NETLINK support.

- Bug #1402308, (possible) segfault when using mmap.mmap(-1, ...)

- Bug #1400822, _curses over{lay,write} doesn't work when passing 6 ints.
  Also fix ungetmouse() which did not accept arguments properly.
  The code now conforms to the documented signature.

- Bug #1400115, Fix segfault when calling curses.panel.userptr()
  without prior setting of the userptr.

- Fix 64-bit problems in bsddb.

- Patch #1365916: fix some unsafe 64-bit mmap methods.

- Bug #1290333: Added a workaround for cjkcodecs' _codecs_cn build
  problem on AIX.

- Bug #869197: os.setgroups rejects long integer arguments

- Bug #1346533, select.poll() doesn't raise an error if timeout > sys.maxint

- Bug #1344508, Fix UNIX mmap leaking file descriptors

- Patch #1338314, Bug #1336623: fix tarfile so it can extract
  REGTYPE directories from tarfiles written by old programs.

- Patch #1407992, fixes broken bsddb module db associate when using
  BerkeleyDB 3.3, 4.0 or 4.1.

- Get bsddb module to build with BerkeleyDB version 4.4

- Get bsddb module to build with BerkeleyDB version 3.2

- Patch #1309009, Fix segfault in pyexpat when the XML document is in latin_1,
  but Python incorrectly assumes it is in UTF-8 format

- Fix parse errors in the readline module when compiling without threads.

- Patch #1288833: Removed thread lock from socket.getaddrinfo on
  FreeBSD 5.3 and later versions which got thread-safe getaddrinfo(3).

- Patches #1298449 and #1298499: Add some missing checks for error
  returns in cStringIO.c.

- Patch #1297028: fix segfault if call type on MultibyteCodec,
  MultibyteStreamReader, or MultibyteStreamWriter

- Fix memory leak in posix.access().

- Patch #1213831: Fix typo in unicodedata._getcode.

- Bug #1007046: os.startfile() did not accept unicode strings encoded in
  the file system encoding.

- Patch #756021: Special-case socket.inet_aton('255.255.255.255') for
  platforms that don't have inet_aton().

- Bug #1215928: Fix bz2.BZ2File.seek() for 64-bit file offsets.

- Bug #1191043: Fix bz2.BZ2File.(x)readlines for files containing one
  line without newlines.

- Bug #728515: mmap.resize() now resizes the file on Unix as it did
  on Windows.

- Patch #1180695: Add nanosecond stat resolution, and st_gen,
  st_birthtime for FreeBSD.

- Patch #1231069: The fcntl.ioctl function now uses the 'I' code for
  the request code argument, which results in more C-like behaviour
  for large or negative values.

- Bug #1234979: For the argument of thread.Lock.acquire, the Windows
  implementation treated all integer values except 1 as false.

- Bug #1194181: bz2.BZ2File didn't handle mode 'U' correctly.

- Patch #1212117: os.stat().st_flags is now accessible as an attribute
  if available on the platform.

- Patch #1103951: Expose O_SHLOCK and O_EXLOCK in the posix module if
  available on the platform.

- Bug #1166660: The readline module could segfault if hook functions
  were set in a different thread than that which called readline.

- collections.deque objects now support a remove() method.

- operator.itemgetter() and operator.attrgetter() now support retrieving
  multiple fields.  This provides direct support for sorting on multiple
  keys (primary, secondary, etc).

- os.access now supports Unicode path names on non-Win32 systems.

- Patches #925152, #1118602: Avoid reading after the end of the buffer
  in pyexpat.GetInputContext.

- Patches #749830, #1144555: allow UNIX mmap size to default to current
  file size.

- Added functional.partial().  See PEP309.

- Patch #1093585: raise a ValueError for negative history items in readline.
  {remove_history,replace_history}

- The spwd module has been added, allowing access to the shadow password
  database.

- stat_float_times is now True.

- array.array objects are now picklable.

- the cPickle module no longer accepts the deprecated None option in the
  args tuple returned by __reduce__().

- itertools.islice() now accepts None for the start and step arguments.
  This allows islice() to work more readily with slices:
      islice(s.start, s.stop, s.step)

- datetime.datetime() now has a strptime class method which can be used to
  create datetime object using a string and format.

- Patch #1117961: Replace the MD5 implementation from RSA Data Security Inc
  with the implementation from http://sourceforge.net/projects/libmd5-rfc/.

Library
-------

- Patch #1388073: Numerous __-prefixed attributes of unittest.TestCase have
  been renamed to have only a single underscore prefix.  This was done to
  make subclassing easier.

- PEP 338: new module runpy defines a run_module function to support
  executing modules which provide access to source code or a code object
  via the PEP 302 import mechanisms.

- The email module's parsedate_tz function now sets the daylight savings
  flag to -1 (unknown) since it can't tell from the date whether it should
  be set.

- Patch #624325: urlparse.urlparse() and urlparse.urlsplit() results
  now sport attributes that provide access to the parts of the result.

- Patch #1462498: sgmllib now handles entity and character references
  in attribute values.

- Added the sqlite3 package. This is based on pysqlite2.1.3, and provides
  a DB-API interface in the standard library. You'll need sqlite 3.0.8 or
  later to build this - if you have an earlier version, the C extension
  module will not be built.

- Bug #1460340: ``random.sample(dict)`` failed in various ways.  Dicts
  aren't officially supported here, and trying to use them will probably
  raise an exception some day.  But dicts have been allowed, and "mostly
  worked", so support for them won't go away without warning.

- Bug #1445068: getpass.getpass() can now be given an explicit stream
  argument to specify where to write the prompt.

- Patch #1462313, bug #1443328: the pickle modules now can handle classes
  that have __private names in their __slots__.

- Bug #1250170: mimetools now handles socket.gethostname() failures gracefully.

- patch #1457316: "setup.py upload" now supports --identity to select the
  key to be used for signing the uploaded code.

- Queue.Queue objects now support .task_done() and .join() methods
  to make it easier to monitor when daemon threads have completed
  processing all enqueued tasks.  Patch #1455676.

- popen2.Popen objects now preserve the command in a .cmd attribute.

- Added the ctypes ffi package.

- email 4.0 package now integrated.  This is largely the same as the email 3.0
  package that was included in Python 2.3, except that PEP 8 module names are
  now used (e.g. mail.message instead of email.Message).  The MIME classes
  have been moved to a subpackage (e.g. email.mime.text instead of
  email.MIMEText).  The old names are still supported for now.  Several
  deprecated Message methods have been removed and lots of bugs have been
  fixed.  More details can be found in the email package documentation.

- Patches #1436130/#1443155: codecs.lookup() now returns a CodecInfo object
  (a subclass of tuple) that provides incremental decoders and encoders
  (a way to use stateful codecs without the stream API). Python functions
  codecs.getincrementaldecoder() and codecs.getincrementalencoder() as well
  as C functions PyCodec_IncrementalEncoder() and PyCodec_IncrementalDecoder()
  have been added.

- Patch #1359365: Calling next() on a closed StringIO.String object raises
  a ValueError instead of a StopIteration now (like file and cString.String do).
  cStringIO.StringIO.isatty() will raise a ValueError now if close() has been
  called before (like file and StringIO.StringIO do).

- A regrtest option -w was added to re-run failed tests in verbose mode.

- Patch #1446372: quit and exit can now be called from the interactive
  interpreter to exit.

- The function get_count() has been added to the gc module, and gc.collect()
  grew an optional 'generation' argument.

- A library msilib to generate Windows Installer files, and a distutils
  command bdist_msi have been added.

- PEP 343: new module contextlib.py defines decorator @contextmanager
  and helpful context managers nested() and closing().

- The compiler package now supports future imports after the module docstring.

- Bug #1413790: zipfile now sanitizes absolute archive names that are
  not allowed by the specs.

- Patch #1215184: FileInput now can be given an opening hook which can
  be used to control how files are opened.

- Patch #1212287: fileinput.input() now has a mode parameter for
  specifying the file mode input files should be opened with.

- Patch #1215184: fileinput now has a fileno() function for getting the
  current file number.

- Patch #1349274: gettext.install() now optionally installs additional
  translation functions other than _() in the builtins namespace.

- Patch #1337756: fileinput now accepts Unicode filenames.

- Patch #1373643: The chunk module can now read chunks larger than
  two gigabytes.

- Patch #1417555: SimpleHTTPServer now returns Last-Modified headers.

- Bug #1430298: It is now possible to send a mail with an empty
  return address using smtplib.

- Bug #1432260: The names of lambda functions are now properly displayed
  in pydoc.

- Patch #1412872: zipfile now sets the creator system to 3 (Unix)
  unless the system is Win32.

- Patch #1349118: urllib now supports user:pass@ style proxy
  specifications, raises IOErrors when proxies for unsupported protocols
  are defined, and uses the https proxy on https redirections.

- Bug #902075: urllib2 now supports 'host:port' style proxy specifications.

- Bug #1407902: Add support for sftp:// URIs to urlparse.

- Bug #1371247: Update Windows locale identifiers in locale.py.

- Bug #1394565: SimpleHTTPServer now doesn't choke on query parameters
  any more.

- Bug #1403410: The warnings module now doesn't get confused
  when it can't find out the module name it generates a warning for.

- Patch #1177307: Added a new codec utf_8_sig for UTF-8 with a BOM signature.

- Patch #1157027: cookielib mishandles RFC 2109 cookies in Netscape mode

- Patch #1117398: cookielib.LWPCookieJar and .MozillaCookieJar now raise
  LoadError as documented, instead of IOError.  For compatibility,
  LoadError subclasses IOError.

- Added the hashlib module.  It provides secure hash functions for MD5 and
  SHA1, 224, 256, 384, and 512.  Note that recent developments make the
  historic MD5 and SHA1 unsuitable for cryptographic-strength applications.
  In <http://mail.python.org/pipermail/python-dev/2005-December/058850.html>
  Ronald L. Rivest offered this advice for Python:

      "The consensus of researchers in this area (at least as
      expressed at the NIST Hash Function Workshop 10/31/05),
      is that SHA-256 is a good choice for the time being, but
      that research should continue, and other alternatives may
      arise from this research.  The larger SHA's also seem OK."

- Added a subset of Fredrik Lundh's ElementTree package.  Available
  modules are xml.etree.ElementTree, xml.etree.ElementPath, and
  xml.etree.ElementInclude, from ElementTree 1.2.6.

- Patch #1162825: Support non-ASCII characters in IDLE window titles.

- Bug #1365984: urllib now opens "data:" URLs again.

- Patch #1314396: prevent deadlock for threading.Thread.join() when an exception
  is raised within the method itself on a previous call (e.g., passing in an
  illegal argument)

- Bug #1340337: change time.strptime() to always return ValueError when there
  is an error in the format string.

- Patch #754022: Greatly enhanced webbrowser.py (by Oleg Broytmann).

- Bug #729103: pydoc.py: Fix docother() method to accept additional
  "parent" argument.

- Patch #1300515: xdrlib.py: Fix pack_fstring() to really use null bytes
  for padding.

- Bug #1296004: httplib.py: Limit maximal amount of data read from the
  socket to avoid a MemoryError on Windows.

- Patch #1166948: locale.py: Prefer LC_ALL, LC_CTYPE and LANG over LANGUAGE
  to get the correct encoding.

- Patch #1166938: locale.py: Parse LANGUAGE as a colon separated list of
  languages.

- Patch #1268314: Cache lines in StreamReader.readlines for performance.

- Bug #1290505: Fix clearing the regex cache for time.strptime().

- Bug #1167128: Fix size of a symlink in a tarfile to be 0.

- Patch #810023: Fix off-by-one bug in urllib.urlretrieve reporthook
  functionality.

- Bug #1163178: Make IDNA return an empty string when the input is empty.

- Patch #848017: Make Cookie more RFC-compliant. Use CRLF as default output
  separator and do not output trailing semicolon.

- Patch #1062060: urllib.urlretrieve() now raises a new exception, named
  ContentTooShortException, when the actually downloaded size does not
  match the Content-Length header.

- Bug #1121494: distutils.dir_utils.mkpath now accepts Unicode strings.

- Bug #1178484: Return complete lines from codec stream readers
  even if there is an exception in later lines, resulting in
  correct line numbers for decoding errors in source code.

- Bug #1192315: Disallow negative arguments to clear() in pdb.

- Patch #827386: Support absolute source paths in msvccompiler.py.

- Patch #1105730: Apply the new implementation of commonprefix in posixpath
  to ntpath, macpath, os2emxpath and riscospath.

- Fix a problem in Tkinter introduced by SF patch #869468: delete bogus
  __hasattr__ and __delattr__ methods on class Tk that were breaking
  Tkdnd.

- Bug #1015140: disambiguated the term "article id" in nntplib docs and
  docstrings to either "article number" or "message id".

- Bug #1238170: threading.Thread.__init__ no longer has "kwargs={}" as a
  parameter, but uses the usual "kwargs=None".

- textwrap now processes text chunks at O(n) speed instead of O(n**2).
  Patch #1209527 (Contributed by Connelly).

- urllib2 has now an attribute 'httpresponses' mapping from HTTP status code
  to W3C name (404 -> 'Not Found'). RFE #1216944.

- Bug #1177468: Don't cache the /dev/urandom file descriptor for os.urandom,
  as this can cause problems with apps closing all file descriptors.

- Bug #839151: Fix an attempt to access sys.argv in the warnings module;
  it can be missing in embedded interpreters

- Bug #1155638: Fix a bug which affected HTTP 0.9 responses in httplib.

- Bug #1100201: Cross-site scripting was possible on BaseHTTPServer via
  error messages.

- Bug #1108948: Cookie.py produced invalid JavaScript code.

- The tokenize module now detects and reports indentation errors.
  Bug #1224621.

- The tokenize module has a new untokenize() function to support a full
  roundtrip from lexed tokens back to Python source code.  In addition,
  the generate_tokens() function now accepts a callable argument that
  terminates by raising StopIteration.

- Bug #1196315: fix weakref.WeakValueDictionary constructor.

- Bug #1213894: os.path.realpath didn't resolve symlinks that were the first
  component of the path.

- Patch #1120353: The xmlrpclib module provides better, more transparent,
  support for datetime.{datetime,date,time} objects.  With use_datetime set
  to True, applications shouldn't have to fiddle with the DateTime wrapper
  class at all.

- distutils.commands.upload was added to support uploading distribution
  files to PyPI.

- distutils.commands.register now encodes the data as UTF-8 before posting
  them to PyPI.

- decimal operator and comparison methods now return NotImplemented
  instead of raising a TypeError when interacting with other types.  This
  allows other classes to implement __radd__ style methods and have them
  work as expected.

- Bug #1163325:  Decimal infinities failed to hash.  Attempting to
  hash a NaN raised an InvalidOperation instead of a TypeError.

- Patch #918101: Add tarfile open mode r|* for auto-detection of the
  stream compression; add, for symmetry reasons, r:* as a synonym of r.

- Patch #1043890: Add extractall method to tarfile.

- Patch #1075887: Don't require MSVC in distutils if there is nothing
  to build.

- Patch #1103407: Properly deal with tarfile iterators when untarring
  symbolic links on Windows.

- Patch #645894: Use getrusage for computing the time consumption in
  profile.py if available.

- Patch #1046831: Use get_python_version where appropriate in sysconfig.py.

- Patch #1117454: Remove code to special-case cookies without values
  in LWPCookieJar.

- Patch #1117339: Add cookielib special name tests.

- Patch #1112812: Make bsddb/__init__.py more friendly for modulefinder.

- Patch #1110248: SYNC_FLUSH the zlib buffer for GZipFile.flush.

- Patch #1107973: Allow iterating over the lines of a tarfile.ExFileObject.

- Patch #1104111: Alter setup.py --help and --help-commands.

- Patch #1121234: Properly cleanup _exit and tkerror commands.

- Patch #1049151: xdrlib now unpacks booleans as True or False.

- Fixed bug in a NameError bug in cookielib.  Patch #1116583.

- Applied a security fix to SimpleXMLRPCserver (PSF-2005-001).  This
  disables recursive traversal through instance attributes, which can
  be exploited in various ways.

- Bug #1222790: in SimpleXMLRPCServer, set the reuse-address and close-on-exec
  flags on the HTTP listening socket.

- Bug #792570: SimpleXMLRPCServer had problems if the request grew too large.
  Fixed by reading the HTTP body in chunks instead of one big socket.read().

- Patches #893642, #1039083: add allow_none, encoding arguments to
  constructors of SimpleXMLRPCServer and CGIXMLRPCRequestHandler.

- Bug #1110478: Revert os.environ.update to do putenv again.

- Bug #1103844: fix distutils.install.dump_dirs() with negated options.

- os.{SEEK_SET, SEEK_CUR, SEEK_END} have been added for convenience.

- Enhancements to the csv module:

  + Dialects are now validated by the underlying C code, better
    reflecting its capabilities, and improving its compliance with
    PEP 305.
  + Dialect parameter parsing has been re-implemented to improve error
    reporting.
  + quotechar=None and quoting=QUOTE_NONE now work the way PEP 305
    dictates.
  + the parser now removes the escapechar prefix from escaped characters.
  + when quoting=QUOTE_NONNUMERIC, the writer now tests for numeric
    types, rather than any object that can be represented as a numeric.
  + when quoting=QUOTE_NONNUMERIC, the reader now casts unquoted fields
    to floats.
  + reader now allows \r characters to be quoted (previously it only allowed
    \n to be quoted).
  + writer doublequote handling improved.
  + Dialect classes passed to the module are no longer instantiated by
    the module before being parsed (the former validation scheme required
    this, but the mechanism was unreliable).
  + The dialect registry now contains instances of the internal
    C-coded dialect type, rather than references to python objects.
  + the internal c-coded dialect type is now immutable.
  + register_dialect now accepts the same keyword dialect specifications
    as the reader and writer, allowing the user to register dialects
    without first creating a dialect class.
  + a configurable limit to the size of parsed fields has been added -
    previously, an unmatched quote character could result in the entire
    file being read into the field buffer before an error was reported.
  + A new module method csv.field_size_limit() has been added that sets
    the parser field size limit (returning the former limit). The initial
    limit is 128kB.
  + A line_num attribute has been added to the reader object, which tracks
    the number of lines read from the source iterator. This is not
    the same as the number of records returned, as records can span
    multiple lines.
  + reader and writer objects were not being registered with the cyclic-GC.
    This has been fixed.

- _DummyThread objects in the threading module now delete self.__block that is
  inherited from _Thread since it uses up a lock allocated by 'thread'.  The
  lock primitives tend to be limited in number and thus should not be wasted on
  a _DummyThread object.  Fixes bug #1089632.

- The imghdr module now detects Exif files.

- StringIO.truncate() now correctly adjusts the size attribute.
  (Bug #951915).

- locale.py now uses an updated locale alias table (built using
  Tools/i18n/makelocalealias.py, a tool to parse the X11 locale
  alias file); the encoding lookup was enhanced to use Python's
  encoding alias table.

- moved deprecated modules to Lib/lib-old:  whrandom, tzparse, statcache.

- the pickle module no longer accepts the deprecated None option in the
  args tuple returned by __reduce__().

- optparse now optionally imports gettext.  This allows its use in setup.py.

- the pickle module no longer uses the deprecated bin parameter.

- the shelve module no longer uses the deprecated binary parameter.

- the pstats module no longer uses the deprecated ignore() method.

- the filecmp module no longer uses the deprecated use_statcache argument.

- unittest.TestCase.run() and unittest.TestSuite.run() can now be successfully
  extended or overridden by subclasses.  Formerly, the subclassed method would
  be ignored by the rest of the module.  (Bug #1078905).

- heapq.nsmallest() and heapq.nlargest() now support key= arguments with
  the same meaning as in list.sort().

- Bug #1076985: ``codecs.StreamReader.readline()`` now calls ``read()`` only
  once when a size argument is given. This prevents a buffer overflow in the
  tokenizer with very long source lines.

- Bug #1083110: ``zlib.decompress.flush()`` would segfault if called
  immediately after creating the object, without any intervening
  ``.decompress()`` calls.

- The reconvert.quote function can now emit triple-quoted strings.  The
  reconvert module now has some simple documentation.

- ``UserString.MutableString`` now supports negative indices in
  ``__setitem__`` and ``__delitem__``

- Bug #1149508: ``textwrap`` now handles hyphenated numbers (eg. "2004-03-05")
  correctly.

- Partial fixes for SF bugs #1163244 and #1175396: If a chunk read by
  ``codecs.StreamReader.readline()`` has a trailing "\r", read one more
  character even if the user has passed a size parameter to get a proper
  line ending. Remove the special handling of a "\r\n" that has been split
  between two lines.

- Bug #1251300: On UCS-4 builds the "unicode-internal" codec will now complain
  about illegal code points. The codec now supports PEP 293 style error
  handlers.

- Bug #1235646: ``codecs.StreamRecoder.next()`` now reencodes the data it reads
  from the input stream, so that the output is a byte string in the correct
  encoding instead of a unicode string.

- Bug #1202493: Fixing SRE parser to handle '{}' as perl does, rather than
  considering it exactly like a '*'.

- Bug #1245379: Add "unicode-1-1-utf-7" as an alias for "utf-7" to
  ``encodings.aliases``.

- ` uu.encode()`` and ``uu.decode()`` now support unicode filenames.

- Patch #1413711: Certain patterns of differences were making difflib
  touch the recursion limit.

- Bug #947906: An object oriented interface has been added to the calendar
  module. It's possible to generate HTML calendar now and the module can be
  called as a script (e.g. via ``python -mcalendar``). Localized month and
  weekday names can be output (even if an exotic encoding is used) using
  special classes that use unicode.

Build
-----

- Fix test_float, test_long, and test_struct failures on Tru64 with gcc
  by using -mieee gcc option.

- Patch #1432345: Make python compile on DragonFly.

- Build support for Win64-AMD64 was added.

- Patch #1428494: Prefer linking against ncursesw over ncurses library.

- Patch #881820: look for openpty and forkpty also in libbsd.

- The sources of zlib are now part of the Python distribution (zlib 1.2.3).
  The zlib module is now built in on Windows.

- Use -xcode=pic32 for CCSHARED on Solaris with SunPro.

- Bug #1189330: configure did not correctly determine the necessary
  value of LINKCC if python was built with GCC 4.0.

- Upgrade Windows build to zlib 1.2.3 which eliminates a potential security
  vulnerability in zlib 1.2.1 and 1.2.2.

- EXTRA_CFLAGS has been introduced as an environment variable to hold compiler
  flags that change binary compatibility.  Changes were also made to
  distutils.sysconfig to also use the environment variable when used during
  compilation of the interpreter and of C extensions through distutils.

- SF patch 1171735: Darwin 8's headers are anal about POSIX compliance,
  and linking has changed (prebinding is now deprecated, and libcc_dynamic
  no longer exists). This configure patch makes things right.

- Bug #1158607: Build with --disable-unicode again.

- spwdmodule.c is built only if either HAVE_GETSPNAM or HAVE_HAVE_GETSPENT is
  defined.  Discovered as a result of not being able to build on OS X.

- setup.py now uses the directories specified in LDFLAGS using the -L option
  and in CPPFLAGS using the -I option for adding library and include
  directories, respectively, for compiling extension modules against.  This has
  led to the core being compiled using the values in CPPFLAGS.  It also removes
  the need for the special-casing of both DarwinPorts and Fink for darwin since
  the proper directories can be specified in LDFLAGS (``-L/sw/lib`` for Fink,
  ``-L/opt/local/lib`` for DarwinPorts) and CPPFLAGS (``-I/sw/include`` for
  Fink, ``-I/opt/local/include`` for DarwinPorts).

- Test in configure.in that checks for tzset no longer dependent on tm->tm_zone
  to exist in the struct (not required by either ISO C nor the UNIX 2 spec).
  Tests for sanity in tzname when HAVE_TZNAME defined were also defined.
  Closes bug #1096244.  Thanks Gregory Bond.

C API
-----

- ``PyMem_{Del, DEL}`` and ``PyMem_{Free, FREE}`` no longer map to
  ``PyObject_{Free, FREE}``.  They map to the system ``free()`` now.  If memory
  is obtained via the ``PyObject_`` family, it must be released via the
  ``PyObject_`` family, and likewise for the ``PyMem_`` family.  This has
  always been officially true, but when Python's small-object allocator was
  introduced, an attempt was made to cater to a few extension modules
  discovered at the time that obtained memory via ``PyObject_New`` but
  released it via ``PyMem_DEL``.  It's years later, and if such code still
  exists it will fail now (probably with segfaults, but calling wrong
  low-level memory management functions can yield many symptoms).

- Added a C API for set and frozenset objects.

- Removed PyRange_New().

- Patch #1313939: PyUnicode_DecodeCharmap() accepts a unicode string as the
  mapping argument now. This string is used as a mapping table. Byte values
  greater than the length of the string and 0xFFFE are treated as undefined
  mappings.


Tests
-----

- In test_os, st_?time is now truncated before comparing it with ST_?TIME.

- Patch #1276356: New resource "urlfetch" is implemented.  This enables
  even impatient people to run tests that require remote files.


Documentation
-------------

- Bug #1402224: Add warning to dl docs about crashes.

- Bug #1396471: Document that Windows' ftell() can return invalid
  values for text files with UNIX-style line endings.

- Bug #1274828: Document os.path.splitunc().

- Bug #1190204: Clarify which directories are searched by site.py.

- Bug #1193849: Clarify os.path.expanduser() documentation.

- Bug #1243192: re.UNICODE and re.LOCALE affect \d, \D, \s and \S.

- Bug #755617: Document the effects of os.chown() on Windows.

- Patch #1180012: The documentation for modulefinder is now in the library reference.

- Patch #1213031: Document that os.chown() accepts argument values of -1.

- Bug #1190563: Document os.waitpid() return value with WNOHANG flag.

- Bug #1175022: Correct the example code for property().

- Document the IterableUserDict class in the UserDict module.
  Closes bug #1166582.

- Remove all latent references for "Macintosh" that referred to semantics for
  Mac OS 9 and change to reflect the state for OS X.
  Closes patch #1095802.  Thanks Jack Jansen.

Mac
---


New platforms
-------------

- FreeBSD 7 support is added.


Tools/Demos
-----------

- Created Misc/Vim/vim_syntax.py to auto-generate a python.vim file in that
  directory for syntax highlighting in Vim.  Vim directory was added and placed
  vimrc to it (was previous up a level).

- Added two new files to Tools/scripts: pysource.py, which recursively
  finds Python source files, and findnocoding.py, which finds Python
  source files that need an encoding declaration.
  Patch #784089, credits to Oleg Broytmann.

- Bug #1072853: pindent.py used an uninitialized variable.

- Patch #1177597: Correct Complex.__init__.

- Fixed a display glitch in Pynche, which could cause the right arrow to
  wiggle over by a pixel.


What's New in Python 2.4 final?
===============================

*Release date: 30-NOV-2004*

Core and builtins
-----------------

- Bug 875692: Improve signal handling, especially when using threads, by
  forcing an early re-execution of PyEval_EvalFrame() "periodic" code when
  things_to_do is not cleared by Py_MakePendingCalls().


What's New in Python 2.4 (release candidate 1)
==============================================

*Release date: 18-NOV-2004*

Core and builtins
-----------------

- Bug 1061968:  Fixes in 2.4a3 to address thread bug 1010677 reintroduced
  the years-old thread shutdown race bug 225673.  Numeric history lesson
  aside, all bugs in all three reports are fixed now.


Library
-------

- Bug 1052242: If exceptions are raised by an atexit handler function an
  attempt is made to execute the remaining handlers.  The last exception
  raised is re-raised.

- ``doctest``'s new support for adding ``pdb.set_trace()`` calls to
  doctests was broken in a dramatic but shallow way.  Fixed.

- Bug 1065388:  ``calendar``'s ``day_name``, ``day_abbr``, ``month_name``,
  and ``month_abbr`` attributes emulate sequences of locale-correct
  spellings of month and day names.  Because the locale can change at
  any time, the correct spelling is recomputed whenever one of these is
  indexed.  In the worst case, the index may be a slice object, so these
  recomputed every day or month name each time they were indexed.  This is
  much slower than necessary in the usual case, when the index is just an
  integer.  In that case, only the single spelling needed is recomputed
  now; and, when the index is a slice object, only the spellings needed
  by the slice are recomputed now.

- Patch 1061679: Added ``__all__`` to pickletools.py.

Build
-----

- Bug 1034277 / Patch 1035255: Remove compilation of core against CoreServices
  and CoreFoundation on OS X.  Involved removing PyMac_GetAppletScriptFile()
  which has no known users.  Thanks Bob Ippolito.

C API
-----

- The PyRange_New() function is deprecated.


What's New in Python 2.4 beta 2?
================================

*Release date: 03-NOV-2004*

License
-------

The Python Software Foundation changed the license under which Python
is released, to remove Python version numbers.  There were no other
changes to the license.  So, for example, wherever the license for
Python 2.3 said "Python 2.3", the new license says "Python".  The
intent is to make it possible to refer to the PSF license in a more
durable way.  For example, some people say they're confused by that
the Open Source Initiative's entry for the Python Software Foundation
License::

      https://opensource.org/licenses/PythonSoftFoundation.php

says "Python 2.1.1" all over it, wondering whether it applies only
to Python 2.1.1.

The official name of the new license is the Python Software Foundation
License Version 2.

Core and builtins
-----------------

- Bug #1055820 Cyclic garbage collection was not protecting against that
  calling a live weakref to a piece of cyclic trash could resurrect an
  insane mutation of the trash if any Python code ran during gc (via
  running a dead object's __del__ method, running another callback on a
  weakref to a dead object, or via any Python code run in any other thread
  that managed to obtain the GIL while a __del__ or callback was running
  in the thread doing gc).  The most likely symptom was "impossible"
  ``AttributeError`` exceptions, appearing seemingly at random, on weakly
  referenced objects.  The cure was to clear all weakrefs to unreachable
  objects before allowing any callbacks to run.

- Bug #1054139 _PyString_Resize() now invalidates its cached hash value.

Extension Modules
-----------------

- Bug #1048870:  the compiler now generates distinct code objects for
  functions with identical bodies.  This was producing confusing
  traceback messages which pointed to the function where the code
  object was first defined rather than the function being executed.

Library
-------

- Patch #1056967 changes the semantics of Template.safe_substitute() so that
  no ValueError is raised on an 'invalid' match group.  Now the delimiter is
  returned.

- Bug #1052503 pdb.runcall() was not passing along keyword arguments.

- Bug #902037: XML.sax.saxutils.prepare_input_source() now combines relative
  paths with a base path before checking os.path.isfile().

- The whichdb module can now be run from the command line.

- Bug #1045381: time.strptime() can now infer the date using %U or %W (week of
  the year) when the day of the week and year are also specified.

- Bug #1048816: fix bug in Ctrl-K at start of line in curses.textpad.Textbox

- Bug #1017553: fix bug in tarfile.filemode()

- Patch #737473: fix bug that old source code is shown in tracebacks even if
  the source code is updated and reloaded.

Build
-----

- Patch #1044395: --enable-shared is allowed in FreeBSD also.

What's New in Python 2.4 beta 1?
================================

*Release date: 15-OCT-2004*

Core and builtins
-----------------

- Patch #975056: Restartable signals were not correctly disabled on
  BSD systems. Consistently use PyOS_setsig() instead of signal().

- The internal portable implementation of thread-local storage (TLS), used
  by the ``PyGILState_Ensure()``/``PyGILState_Release()`` API, was not
  thread-correct.  This could lead to a variety of problems, up to and
  including segfaults.  See bug 1041645 for an example.

- Added a command line option, -m module, which searches sys.path for the
  module and then runs it.  (Contributed by Nick Coghlan.)

- The bytecode optimizer now folds tuples of constants into a single
  constant.

- SF bug #513866:  Float/long comparison anomaly.  Prior to 2.4b1, when
  an integer was compared to a float, the integer was coerced to a float.
  That could yield spurious overflow errors (if the integer was very
  large), and to anomalies such as
  ``long(1e200)+1 == 1e200 == long(1e200)-1``.  Coercion to float is no
  longer performed, and cases like ``long(1e200)-1 < 1e200``,
  ``long(1e200)+1 > 1e200`` and ``(1 << 20000) > 1e200`` are computed
  correctly now.

Extension modules
-----------------

- ``collections.deque`` objects didn't play quite right with garbage
  collection, which could lead to a segfault in a release build, or
  an assert failure in a debug build.  Also, added overflow checks,
  better detection of mutation during iteration, and shielded deque
  comparisons from unusual subclass overrides of the __iter__() method.

Library
-------

- Patch 1046644: distutils build_ext grew two new options - --swig for
  specifying the swig executable to use, and --swig-opts to specify
  options to pass to swig. --swig-opts="-c++" is the new way to spell
  --swig-cpp.

- Patch 983206: distutils now obeys environment variable LDSHARED, if
  it is set.

- Added Peter Astrand's subprocess.py module.  See PEP 324 for details.

- time.strptime() now properly escapes timezones and all other locale-specific
  strings for regex-specific symbols.  Was breaking under Japanese Windows when
  the timezone was specified as "Tokyo (standard time)".
  Closes bug #1039270.

- Updates for the email package:

  + email.Utils.formatdate() grew a 'usegmt' argument for HTTP support.
  + All deprecated APIs that in email 2.x issued warnings have been removed:
    _encoder argument to the MIMEText constructor, Message.add_payload(),
    Utils.dump_address_pair(), Utils.decode(), Utils.encode()
  + New deprecations: Generator.__call__(), Message.get_type(),
    Message.get_main_type(), Message.get_subtype(), the 'strict' argument to
    the Parser constructor.  These will be removed in email 3.1.
  + Support for Python earlier than 2.3 has been removed (see PEP 291).
  + All defect classes have been renamed to end in 'Defect'.
  + Some FeedParser fixes; also a MultipartInvariantViolationDefect will be
    added to messages that claim to be multipart but really aren't.
  + Updates to documentation.

- re's findall() and finditer() functions now take an optional flags argument
  just like the compile(), search(), and match() functions.  Also, documented
  the previously existing start and stop parameters for the findall() and
  finditer() methods of regular expression objects.

- rfc822 Messages now support iterating over the headers.

- The (undocumented) tarfile.Tarfile.membernames has been removed;
  applications should use the getmember function.

- httplib now offers symbolic constants for the HTTP status codes.

- SF bug #1028306:  Trying to compare a ``datetime.date`` to a
  ``datetime.datetime`` mistakenly compared only the year, month and day.
  Now it acts like a mixed-type comparison:  ``False`` for ``==``,
  ``True`` for ``!=``, and raises ``TypeError`` for other comparison
  operators.  Because datetime is a subclass of date, comparing only the
  base class (date) members can still be done, if that's desired, by
  forcing using of the appropriate date method; e.g.,
  ``a_date.__eq__(a_datetime)`` is true if and only if the year, month
  and day members of ``a_date`` and ``a_datetime`` are equal.

- bdist_rpm now supports command line options --force-arch,
  {pre,post}-install,  {pre,post}-uninstall, and
  {prep,build,install,clean,verify}-script.

- SF patch #998993: The UTF-8 and the UTF-16 stateful decoders now support
  decoding incomplete input (when the input stream is temporarily exhausted).
  ``codecs.StreamReader`` now implements buffering, which enables proper
  readline support for the UTF-16 decoders. ``codecs.StreamReader.read()``
  has a new argument ``chars`` which specifies the number of characters to
  return. ``codecs.StreamReader.readline()`` and
  ``codecs.StreamReader.readlines()`` have a new argument ``keepends``.
  Trailing "\n"s will be stripped from the lines if ``keepends`` is false.

- The documentation for doctest is greatly expanded, and now covers all
  the new public features (of which there are many).

- ``doctest.master`` was put back in, and ``doctest.testmod()`` once again
  updates it.  This isn't good, because every ``testmod()`` call
  contributes to bloating the "hidden" state of ``doctest.master``, but
  some old code apparently relies on it.  For now, all we can do is
  encourage people to stitch doctests together via doctest's unittest
  integration features instead.

- httplib now handles ipv6 address/port pairs.

- SF bug #1017864: ConfigParser now correctly handles default keys,
  processing them with ``ConfigParser.optionxform`` when supplied,
  consistent with the handling of config file entries and runtime-set
  options.

- SF bug #997050: Document, test, & check for non-string values in
  ConfigParser.  Moved the new string-only restriction added in
  rev. 1.65 to the SafeConfigParser class, leaving existing
  ConfigParser & RawConfigParser behavior alone, and documented the
  conditions under which non-string values work.

Build
-----

- Building on darwin now includes /opt/local/include and /opt/local/lib for
  building extension modules.  This is so as to include software installed as
  a DarwinPorts port <http://darwinports.opendarwin.org/>

- pyport.h now defines a Py_IS_NAN macro.  It works as-is when the
  platform C computes true for ``x != x`` if and only if X is a NaN.
  Other platforms can override the default definition with a platform-
  specific spelling in that platform's pyconfig.h.  You can also override
  pyport.h's default Py_IS_INFINITY definition now.

C API
-----

- SF patch 1044089:  New function ``PyEval_ThreadsInitialized()`` returns
  non-zero if PyEval_InitThreads() has been called.

- The undocumented and unused extern int ``_PyThread_Started`` was removed.

- The C API calls ``PyInterpreterState_New()`` and ``PyThreadState_New()``
  are two of the very few advertised as being safe to call without holding
  the GIL.  However, this wasn't true in a debug build, as bug 1041645
  demonstrated.  In a debug build, Python redirects the ``PyMem`` family
  of calls to Python's small-object allocator, to get the benefit of
  its extra debugging capabilities.  But Python's small-object allocator
  isn't threadsafe, relying on the GIL to avoid the expense of doing its
  own locking.  ``PyInterpreterState_New()`` and ``PyThreadState_New()``
  call the platform ``malloc()`` directly now, regardless of build type.

- PyLong_AsUnsignedLong[Mask] now support int objects as well.

- SF patch #998993: ``PyUnicode_DecodeUTF8Stateful`` and
  ``PyUnicode_DecodeUTF16Stateful`` have been added, which implement stateful
  decoding.

Tests
-----

- test__locale ported to unittest

Mac
---

- ``plistlib`` now supports non-dict root objects.  There is also a new
  interface for reading and writing plist files: ``readPlist(pathOrFile)``
  and ``writePlist(rootObject, pathOrFile)``

Tools/Demos
-----------

- The text file comparison scripts ``ndiff.py`` and ``diff.py`` now
  read the input files in universal-newline mode.  This spares them
  from consuming a great deal of time to deduce the useless result that,
  e.g., a file with Windows line ends and a file with Linux line ends
  have no lines in common.


What's New in Python 2.4 alpha 3?
=================================

*Release date: 02-SEP-2004*

Core and builtins
-----------------

- SF patch #1007189: ``from ... import ...`` statements now allow the name
  list to be surrounded by parentheses.

- Some speedups for long arithmetic, thanks to Trevor Perrin.  Gradeschool
  multiplication was sped a little by optimizing the C code.  Gradeschool
  squaring was sped by about a factor of 2, by exploiting that about half
  the digit products are duplicates in a square.  Because exponentiation
  uses squaring often, this also speeds long power.  For example, the time
  to compute 17**1000000 dropped from about 14 seconds to 9 on my box due
  to this much.  The cutoff for Karatsuba multiplication was raised,
  since gradeschool multiplication got quicker, and the cutoff was
  aggressively small regardless.  The exponentiation algorithm was switched
  from right-to-left to left-to-right, which is more efficient for small
  bases.  In addition, if the exponent is large, the algorithm now does
  5 bits (instead of 1 bit) at a time.  That cut the time to compute
  17**1000000 on my box in half again, down to about 4.5 seconds.

- OverflowWarning is no longer generated.  PEP 237 scheduled this to
  occur in Python 2.3, but since OverflowWarning was disabled by default,
  nobody realized it was still being generated.  On the chance that user
  code is still using them, the Python builtin OverflowWarning, and
  corresponding C API PyExc_OverflowWarning, will exist until Python 2.5.

- Py_InitializeEx has been added.

- Fix the order of application of decorators.  The proper order is bottom-up;
  the first decorator listed is the last one called.

- SF patch #1005778.  Fix a seg fault if the list size changed while
  calling list.index().  This could happen if a rich comparison function
  modified the list.

- The ``func_name`` (a.k.a. ``__name__``) attribute of user-defined
  functions is now writable.

- code_new (a.k.a new.code()) now checks its arguments sufficiently
  carefully that passing them on to PyCode_New() won't trigger calls
  to Py_FatalError() or PyErr_BadInternalCall().  It is still the case
  that the returned code object might be entirely insane.

- Subclasses of string can no longer be interned.  The semantics of
  interning were not clear here -- a subclass could be mutable, for
  example -- and had bugs.  Explicitly interning a subclass of string
  via intern() will raise a TypeError.  Internal operations that attempt
  to intern a string subclass will have no effect.

- Bug 1003935:  xrange() could report bogus OverflowErrors.  Documented
  what xrange() intends, and repaired tests accordingly.

Extension modules
-----------------

- difflib now supports HTML side-by-side diff.

- os.urandom has been added for systems that support sources of random
  data.

- Patch 1012740:  truncate() on a writable cStringIO now resets the
  position to the end of the stream.  This is consistent with the original
  StringIO module and avoids inadvertently resurrecting data that was
  supposed to have been truncated away.

- Added socket.socketpair().

- Added CurrentByteIndex, CurrentColumnNumber, CurrentLineNumber
  members to xml.parsers.expat.XMLParser object.

- The mpz, rotor, and xreadlines modules, all deprecated in earlier
  versions of Python, have now been removed.

Library
-------

- Patch #934356: if a module defines __all__, believe that rather than using
  heuristics for filtering out imported names.

- Patch #941486: added os.path.lexists(), which returns True for broken
  symlinks, unlike os.path.exists().

- the random module now uses os.urandom() for seeding if it is available.
  Added a new generator based on os.urandom().

- difflib and diff.py can now generate HTML.

- bdist_rpm now includes version and release in the BuildRoot, and
  replaces - by ``_`` in version and release.

- distutils build/build_scripts now has an -e option to specify the
  path to the Python interpreter for installed scripts.

- PEP 292 classes Template and SafeTemplate are added to the string module.

- tarfile now generates GNU tar files by default.

- HTTPResponse has now a getheaders method.

- Patch #1006219: let inspect.getsource handle '@' decorators. Thanks Simon
  Percivall.

- logging.handlers.SMTPHandler.date_time has been removed;
  the class now uses email.Utils.formatdate to generate the time stamp.

- A new function tkFont.nametofont was added to return an existing
  font. The Font class constructor now has an additional exists argument
  which, if True, requests to return/configure an existing font, rather
  than creating a new one.

- Updated the decimal package's min() and max() methods to match the
  latest revision of the General Decimal Arithmetic Specification.
  Quiet NaNs are ignored and equal values are sorted based on sign
  and exponent.

- The decimal package's Context.copy() method now returns deep copies.

- Deprecated sys.exitfunc in favor of the atexit module.  The sys.exitfunc
  attribute will be kept around for backwards compatibility and atexit
  will just become the one preferred way to do it.

- patch #675551: Add get_history_item and replace_history_item functions
  to the readline module.

- bug #989672: pdb.doc and the help messages for the help_d and help_u methods
  of the pdb.Pdb class gives have been corrected. d(own) goes to a newer
  frame, u(p) to an older frame, not the other way around.

- bug #990669: os.path.realpath() will resolve symlinks before normalizing the
  path, as normalizing the path may alter the meaning of the path if it
  contains symlinks.

- bug #851123: shutil.copyfile will raise an exception when trying to copy a
  file onto a link to itself. Thanks Gregory Ball.

- bug #570300: Fix inspect to resolve file locations using os.path.realpath()
  so as to properly list all functions in a module when the module itself is
  reached through a symlink.  Thanks Johannes Gijsbers.

- doctest refactoring continued.  See the docs for details.  As part of
  this effort, some old and little- (never?) used features are now
  deprecated:  the Tester class, the module is_private() function, and the
  isprivate argument to testmod().  The Tester class supplied a feeble
  "by hand" way to combine multiple doctests, if you knew exactly what
  you were doing.  The newer doctest features for unittest integration
  already did a better job of that, are stronger now than ever, and the
  new DocTestRunner class is a saner foundation if you want to do it by
  hand.  The "private name" filtering gimmick was a mistake from the
  start, and testmod() changed long ago to ignore it by default.  If
  you want to filter out tests, the new DocTestFinder class can be used
  to return a list of all doctests, and you can filter that list by
  any computable criteria before passing it to a DocTestRunner instance.

- Bug #891637, patch #1005466: fix inspect.getargs() crash on def foo((bar)).

Tools/Demos
-----------

- IDLE's shortcut keys for windows are now case insensitive so that
  Control-V works the same as Control-v.

- pygettext.py: Generate POT-Creation-Date header in ISO format.

Build
-----

- Backward incompatibility:  longintrepr.h now triggers a compile-time
  error if SHIFT (the number of bits in a Python long "digit") isn't
  divisible by 5.  This new requirement allows simple code for the new
  5-bits-at-a-time long_pow() implementation.  If necessary, the
  restriction could be removed (by complicating long_pow(), or by
  falling back to the 1-bit-at-a-time algorithm), but there are no
  plans to do so.

- bug #991962: When building with --disable-toolbox-glue on Darwin no
  attempt to build Mac-specific modules occurs.

- The --with-tsc flag to configure to enable VM profiling with the
  processor's timestamp counter now works on PPC platforms.

- patch #1006629: Define _XOPEN_SOURCE to 500 on Solaris 8/9 to match
  GCC's definition and avoid redefinition warnings.

- Detect pthreads support (provided by gnu pth pthread emulation) on
  GNU/k*BSD systems.

- bug #1005737, #1007249: Fixed several build problems and warnings
  found on old/legacy C compilers of HP-UX, IRIX and Tru64.

C API
-----

..

Documentation
-------------

- patch #1005936, bug #1009373: fix index entries which contain
  an underscore when viewed with Acrobat.

- bug #990669: os.path.normpath may alter the meaning of a path if
  it contains symbolic links. This has been documented in a comment
  since 1992, but is now in the library reference as well.

New platforms
-------------

- FreeBSD 6 is now supported.

Tests
-----

..

Windows
-------

- Boosted the stack reservation for python.exe and pythonw.exe from
  the default 1MB to 2MB.  Stack frames under VC 7.1 for 2.4 are enough
  bigger than under VC 6.0 for 2.3.4 that deeply recursive programs
  within the default sys.getrecursionlimit() default value of 1000 were
  able to suffer undetected C stack overflows.  The standard test program
  test_compiler was one such program.  If a Python process on Windows
  "just vanishes" without a trace, and without an error message of any
  kind, but with an exit code of 128, undetected stack overflow may be
  the problem.

Mac
---

..


What's New in Python 2.4 alpha 2?
=================================

*Release date: 05-AUG-2004*

Core and builtins
-----------------

- Patch #980695:  Implements efficient string concatenation for statements
  of the form s=s+t and s+=t.  This will vary across implementations.
  Accordingly, the str.join() method is strongly preferred for performance
  sensitive code.

- PEP-0318, Function Decorators have been added to the language. These are
  implemented using the Java-style @decorator syntax, like so::

     @staticmethod
     def foo(bar):

  (The PEP needs to be updated to reflect the current state)

- When importing a module M raises an exception, Python no longer leaves M
  in sys.modules.  Before 2.4a2 it did, and a subsequent import of M would
  succeed, picking up a module object from sys.modules reflecting as much
  of the initialization of M as completed before the exception was raised.
  Subsequent imports got no indication that M was in a partially-
  initialized state, and the importers could get into arbitrarily bad
  trouble as a result (the M they got was in an unintended state,
  arbitrarily far removed from M's author's intent).  Now subsequent
  imports of M will continue raising exceptions (but if, for example, the
  source code for M is edited between import attempts, then perhaps later
  attempts will succeed, or raise a different exception).

  This can break existing code, but in such cases the code was probably
  working before by accident.  In the Python source, the only case of
  breakage discovered was in a test accidentally relying on a damaged
  module remaining in sys.modules.  Cases are also known where tests
  deliberately provoking import errors remove damaged modules from
  sys.modules themselves, and such tests will break now if they do an
  unconditional del sys.modules[M].

- u'%s' % obj will now try obj.__unicode__() first and fallback to
  obj.__str__() if no __unicode__ method can be found.

- Patch #550732: Add PyArg_VaParseTupleAndKeywords().  Analogous to
  PyArg_VaParse().  Both are now documented.  Thanks Greg Chapman.

- Allow string and unicode return types from .encode()/.decode()
  methods on string and unicode objects.  Added unicode.decode()
  which was missing for no apparent reason.

- An attempt to fix the mess that is Python's behaviour with
  signal handlers and threads, complicated by readline's behaviour.
  It's quite possible that there are still bugs here.

- Added C macros Py_CLEAR and Py_VISIT to ease the implementation of
  types that support garbage collection.

- Compiler now treats None as a constant.

- The type of values returned by __int__, __float__, __long__,
  __oct__, and __hex__ are now checked.  Returning an invalid type
  will cause a TypeError to be raised.  This matches the behavior of
  Jython.

- Implemented bind_textdomain_codeset() in locale module.

- Added a workaround for proper string operations in BSDs.  str.split
  and str.is* methods can now work correctly with UTF-8 locales.

- Bug #989185: unicode.iswide() and unicode.width() is dropped and
  the East Asian Width support is moved to unicodedata extension
  module.

- Patch #941229: The source code encoding in interactive mode
  now refers sys.stdin.encoding not just ISO-8859-1 anymore.  This
  allows for non-latin-1 users to write unicode strings directly.

Extension modules
-----------------

- cpickle now supports the same keyword arguments as pickle.

Library
-------

- Added new codecs and aliases for ISO_8859-11, ISO_8859-16 and
  TIS-620

- Thanks to Edward Loper, doctest has been massively refactored, and
  many new features were added.  Full docs will appear later.  For now
  the doctest module comments and new test cases give good coverage.
  The refactoring provides many hook points for customizing behavior
  (such as how to report errors, and how to compare expected to actual
  output).  New features include a <BLANKLINE> marker for expected
  output containing blank lines, options to produce unified or context
  diffs when actual output doesn't match expectations, an option to
  normalize whitespace before comparing, and an option to use an
  ellipsis to signify "don't care" regions of output.

- Tkinter now supports the wish -sync and -use options.

- The following methods in time support passing of None: ctime(), gmtime(),
  and localtime().  If None is provided, the current time is used (the
  same as when the argument is omitted).
  [SF bug 658254, patch 663482]

- nntplib does now allow ignoring a .netrc file.

- urllib2 now recognizes Basic authentication even if other authentication
  schemes are offered.

- Bug #1001053.  wave.open() now accepts unicode filenames.

- gzip.GzipFile has a new fileno() method, to retrieve the handle of the
  underlying file object (provided it has a fileno() method).  This is
  needed if you want to use os.fsync() on a GzipFile.

- imaplib has two new methods: deleteacl and myrights.

- nntplib has two new methods: description and descriptions. They
  use a more RFC-compliant way of getting a newsgroup description.

- Bug #993394.  Fix a possible red herring of KeyError in 'threading' being
  raised during interpreter shutdown from a registered function with atexit
  when dummy_threading is being used.

- Bug #857297/Patch #916874.  Fix an error when extracting a hard link
  from a tarfile.

- Patch #846659.  Fix an error in tarfile.py when using
  GNU longname/longlink creation.

- The obsolete FCNTL.py has been deleted.  The built-in fcntl module
  has been available (on platforms that support fcntl) since Python
  1.5a3, and all FCNTL.py did is export fcntl's names, after generating
  a deprecation warning telling you to use fcntl directly.

- Several new unicode codecs are added: big5hkscs, euc_jis_2004,
  iso2022_jp_2004, shift_jis_2004.

- Bug #788520.  Queue.{get, get_nowait, put, put_nowait} have new
  implementations, exploiting Conditions (which didn't exist at the time
  Queue was introduced).  A minor semantic change is that the Full and
  Empty exceptions raised by non-blocking calls now occur only if the
  queue truly was full or empty at the instant the queue was checked (of
  course the Queue may no longer be full or empty by the time a calling
  thread sees those exceptions, though).  Before, the exceptions could
  also be raised if it was "merely inconvenient" for the implementation
  to determine the true state of the Queue (because the Queue was locked
  by some other method in progress).

- Bugs #979794 and #980117: difflib.get_grouped_opcodes() now handles the
  case of comparing two empty lists.  This affected both context_diff() and
  unified_diff(),

- Bug #980938: smtplib now prints debug output to sys.stderr.

- Bug #930024: posixpath.realpath() now handles infinite loops in symlinks by
  returning the last point in the path that was not part of any loop.  Thanks
  AM Kuchling.

- Bug #980327: ntpath not handles compressing erroneous slashes between the
  drive letter and the rest of the path.  Also clearly handles UNC addresses now
  as well.  Thanks Paul Moore.

- bug #679953: zipfile.py should now work for files over 2 GB.  The packed data
  for file sizes (compressed and uncompressed) was being stored as signed
  instead of unsigned.

- decimal.py now only uses signals in the IBM spec.  The other conditions are
  no longer part of the public API.

- codecs module now has two new generic APIs: encode() and decode()
  which don't restrict the return types (unlike the unicode and
  string methods of the same name).

- Non-blocking SSL sockets work again; they were broken in Python 2.3.
  SF patch 945642.

- doctest unittest integration improvements:

  o Improved the unitest test output for doctest-based unit tests

  o Can now pass setUp and tearDown functions when creating
    DocTestSuites.

- The threading module has a new class, local, for creating objects
  that provide thread-local data.

- Bug #990307: when keep_empty_values is True, cgi.parse_qsl()
  no longer returns spurious empty fields.

- Implemented bind_textdomain_codeset() in gettext module.

- Introduced in gettext module the l*gettext() family of functions,
  which return translation strings encoded in the preferred encoding,
  as informed by locale module's getpreferredencoding().

- optparse module (and tests) upgraded to Optik 1.5a1.  Changes:

  - Add expansion of default values in help text: the string
    "%default" in an option's help string is expanded to str() of
    that option's default value, or "none" if no default value.

  - Bug #955889: option default values that happen to be strings are
    now processed in the same way as values from the command line; this
    allows generation of nicer help when using custom types.  Can
    be disabled with parser.set_process_default_values(False).

  - Bug #960515: don't crash when generating help for callback
    options that specify 'type', but not 'dest' or 'metavar'.

  - Feature #815264: change the default help format for short options
    that take an argument from e.g. "-oARG" to "-o ARG"; add
    set_short_opt_delimiter() and set_long_opt_delimiter() methods to
    HelpFormatter to allow (slight) customization of the formatting.

  - Patch #736940: internationalize Optik: all built-in user-
    targeted literal strings are passed through gettext.gettext().  (If
    you want translations (.po files), they're not included with Python
    -- you'll find them in the Optik source distribution from
    http://optik.sourceforge.net/ .)

  - Bug #878453: respect $COLUMNS environment variable for
    wrapping help output.

  - Feature #988122: expand "%prog" in the 'description' passed
    to OptionParser, just like in the 'usage' and 'version' strings.
    (This is *not* done in the 'description' passed to OptionGroup.)

C API
-----

- PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx():  if an
  error occurs while loading the module, these now delete the module's
  entry from sys.modules.  All ways of loading modules eventually call
  one of these, so this is an error-case change in semantics for all
  ways of loading modules.  In rare cases, a module loader may wish
  to keep a module object in sys.modules despite that the module's
  code cannot be executed.  In such cases, the module loader must
  arrange to reinsert the name and module object in sys.modules.
  PyImport_ReloadModule() has been changed to reinsert the original
  module object into sys.modules if the module reload fails, so that
  its visible semantics have not changed.

- A large pile of datetime field-extraction macros is now documented,
  thanks to Anthony Tuininga (patch #986010).

Documentation
-------------

- Improved the tutorial on creating types in C.

  - point out the importance of reassigning data members before
    assigning their values

  - correct my misconception about return values from visitprocs. Sigh.

  - mention the labor saving Py_VISIT and Py_CLEAR macros.

- Major rewrite of the math module docs, to address common confusions.

Tests
-----

- The test data files for the decimal test suite are now installed on
  platforms that use the Makefile.

- SF patch 995225:  The test file testtar.tar accidentally contained
  CVS keywords (like $Id$), which could cause spurious failures in
  test_tarfile.py depending on how the test file was checked out.


What's New in Python 2.4 alpha 1?
=================================

*Release date: 08-JUL-2004*

Core and builtins
-----------------

- weakref.ref is now the type object also known as
  weakref.ReferenceType; it can be subclassed like any other new-style
  class.  There's less per-entry overhead in WeakValueDictionary
  objects now (one object instead of three).

- Bug #951851: Python crashed when reading import table of certain
  Windows DLLs.

- Bug #215126.  The locals argument to eval(), execfile(), and exec now
  accept any mapping type.

- marshal now shares interned strings. This change introduces
  a new .pyc magic.

- Bug #966623. classes created with type() in an exec(, {}) don't
  have a __module__, but code in typeobject assumed it would always
  be there.

- Python no longer relies on the LC_NUMERIC locale setting to be
  the "C" locale; as a result, it no longer tries to prevent changing
  the LC_NUMERIC category.

- Bug #952807:  Unpickling pickled instances of subclasses of
  datetime.date, datetime.datetime and datetime.time could yield insane
  objects.  Thanks to Jiwon Seo for a fix.

- Bug #845802: Python crashes when __init__.py is a directory.

- Unicode objects received two new methods: iswide() and width().
  These query East Asian width information, as specified in Unicode
  TR11.

- Improved the tuple hashing algorithm to give fewer collisions in
  common cases.  Fixes bug  #942952.

- Implemented generator expressions (PEP 289).  Coded by Jiwon Seo.

- Enabled the profiling of C extension functions (and builtins) - check
  new documentation and modified profile and bdb modules for more details

- Set file.name to the object passed to open (instead of a new string)

- Moved tracebackobject into traceback.h and renamed to PyTracebackObject

- Optimized the byte coding for multiple assignments like "a,b=b,a" and
  "a,b,c=1,2,3".  Improves their speed by 25% to 30%.

- Limit the nested depth of a tuple for the second argument to isinstance()
  and issubclass() to the recursion limit of the interpreter.
  Fixes bug  #858016 .

- Optimized dict iterators, creating separate types for each
  and having them reveal their length.  Also optimized the
  methods:  keys(), values(), and items().

- Implemented a newcode opcode, LIST_APPEND, that simplifies
  the generated bytecode for list comprehensions and further
  improves their performance (about 35%).

- Implemented rich comparisons for floats, which seems to make
  comparisons involving NaNs somewhat less surprising when the
  underlying C compiler actually implements C99 semantics.

- Optimized list.extend() to save memory and no longer create
  intermediate sequences.  Also, extend() now pre-allocates the
  needed memory whenever the length of the iterable is known in
  advance -- this halves the time to extend the list.

- Optimized list resize operations to make fewer calls to the system
  realloc().  Significantly speeds up list appends, list pops,
  list comprehensions, and the list constructor (when the input iterable
  length is not known).

- Changed the internal list over-allocation scheme.  For larger lists,
  overallocation ranged between 3% and 25%.  Now, it is a constant 12%.
  For smaller lists (n<8), overallocation was upto eight elements.  Now,
  the overallocation is no more than three elements -- this improves space
  utilization for applications that have large numbers of small lists.

- Most list bodies now get re-used rather than freed.  Speeds up list
  instantiation and deletion by saving calls to malloc() and free().

- The dict.update() method now accepts all the same argument forms
  as the dict() constructor.  This now includes item lists and/or
  keyword arguments.

- Support for arbitrary objects supporting the read-only buffer
  interface as the co_code field of code objects (something that was
  only possible to create from C code) has been removed.

- Made omitted callback and None equivalent for weakref.ref() and
  weakref.proxy(); the None case wasn't handled correctly in all
  cases.

- Fixed problem where PyWeakref_NewRef() and PyWeakref_NewProxy()
  assumed that initial existing entries in an object's weakref list
  would not be removed while allocating a new weakref object.  Since
  GC could be invoked at that time, however, that assumption was
  invalid.  In a truly obscure case of GC being triggered during
  creation for a new weakref object for a referent which already
  has a weakref without a callback which is only referenced from
  cyclic trash, a memory error can occur.  This consistently created a
  segfault in a debug build, but provided less predictable behavior in
  a release build.

- input() built-in function now respects compiler flags such as
  __future__ statements.  SF patch 876178.

- Removed PendingDeprecationWarning from apply().  apply() remains
  deprecated, but the nuisance warning will not be issued.

- At Python shutdown time (Py_Finalize()), 2.3 called cyclic garbage
  collection twice, both before and after tearing down modules.  The
  call after tearing down modules has been disabled, because too much
  of Python has been torn down then for __del__ methods and weakref
  callbacks to execute sanely.  The most common symptom was a sequence
  of uninformative messages on stderr when Python shut down, produced
  by threads trying to raise exceptions, but unable to report the nature
  of their problems because too much of the sys module had already been
  destroyed.

- Removed FutureWarnings related to hex/oct literals and conversions
  and left shifts.  (Thanks to Kalle Svensson for SF patch 849227.)
  This addresses most of the remaining semantic changes promised by
  PEP 237, except for repr() of a long, which still shows the trailing
  'L'.  The PEP appears to promise warnings for operations that
  changed semantics compared to Python 2.3, but this is not
  implemented; we've suffered through enough warnings related to
  hex/oct literals and I think it's best to be silent now.

- For str and unicode objects, the ljust(), center(), and rjust()
  methods now accept an optional argument specifying a fill
  character other than a space.

- When method objects have an attribute that can be satisfied either
  by the function object or by the method object, the function
  object's attribute usually wins.  Christian Tismer pointed out that
  this is really a mistake, because this only happens for special
  methods (like __reduce__) where the method object's version is
  really more appropriate than the function's attribute.  So from now
  on, all method attributes will have precedence over function
  attributes with the same name.

- Critical bugfix, for SF bug 839548:  if a weakref with a callback,
  its callback, and its weakly referenced object, all became part of
  cyclic garbage during a single run of garbage collection, the order
  in which they were torn down was unpredictable.  It was possible for
  the callback to see partially-torn-down objects, leading to immediate
  segfaults, or, if the callback resurrected garbage objects, to
  resurrect insane objects that caused segfaults (or other surprises)
  later.  In one sense this wasn't surprising, because Python's cyclic gc
  had no knowledge of Python's weakref objects.  It does now.  When
  weakrefs with callbacks become part of cyclic garbage now, those
  weakrefs are cleared first.  The callbacks don't trigger then,
  preventing the problems.  If you need callbacks to trigger, then just
  as when cyclic gc is not involved, you need to write your code so
  that weakref objects outlive the objects they weakly reference.

- Critical bugfix, for SF bug 840829:  if cyclic garbage collection
  happened to occur during a weakref callback for a new-style class
  instance, subtle memory corruption was the result (in a release build;
  in a debug build, a segfault occurred reliably very soon after).
  This has been repaired.

- Compiler flags set in PYTHONSTARTUP are now active in __main__.

- Added two built-in types, set() and frozenset().

- Added a reversed() built-in function that returns a reverse iterator
  over a sequence.

- Added a sorted() built-in function that returns a new sorted list
  from any iterable.

- CObjects are now mutable (on the C level) through PyCObject_SetVoidPtr.

- list.sort() now supports three keyword arguments:  cmp, key, and reverse.
  The key argument can be a function of one argument that extracts a
  comparison key from the original record:  mylist.sort(key=str.lower).
  The reverse argument is a boolean value and if True will change the
  sort order as if the comparison arguments were reversed.  In addition,
  the documentation has been amended to provide a guarantee that all sorts
  starting with Py2.3 are guaranteed to be stable (the relative order of
  records with equal keys is unchanged).

- Added test whether wchar_t is signed or not. A signed wchar_t is not
  usable as internal unicode type base for Py_UNICODE since the
  unicode implementation assumes an unsigned type.

- Fixed a bug in the cache of length-one Unicode strings that could
  lead to a seg fault.  The specific problem occurred when an earlier,
  non-fatal error left an uninitialized Unicode object in the
  freelist.

- The % formatting operator now supports '%F' which is equivalent to
  '%f'.  This has always been documented but never implemented.

- complex(obj) could leak a little memory if obj wasn't a string or
  number.

- zip() with no arguments now returns an empty list instead of raising
  a TypeError exception.

- obj.__contains__() now returns True/False instead of 1/0.  SF patch
  820195.

- Python no longer tries to be smart about recursive comparisons.
  When comparing containers with cyclic references to themselves it
  will now just hit the recursion limit.  See SF patch 825639.

- str and unicode built-in types now have an rsplit() method that is
  same as split() except that it scans the string from the end
  working towards the beginning.  See SF feature request 801847.

- Fixed a bug in object.__reduce_ex__ when using protocol 2.  Failure
  to clear the error when attempts to get the __getstate__ attribute
  fail caused intermittent errors and odd behavior.

- buffer objects based on other objects no longer cache a pointer to
  the data and the data length.  Instead, the appropriate tp_as_buffer
  method is called as necessary.

- fixed: if a file is opened with an explicit buffer size >= 1, repeated
  close() calls would attempt to free() the buffer already free()ed on
  the first call.


Extension modules
-----------------

- Added socket.getservbyport(), and make the second argument in
  getservbyname() and getservbyport() optional.

- time module code that deals with input POSIX timestamps will now raise
  ValueError if more than a second is lost in precision when the
  timestamp is cast to the platform C time_t type.  There's no chance
  that the platform will do anything sensible with the result in such
  cases.  This includes ctime(), localtime() and gmtime().  Assorted
  fromtimestamp() and utcfromtimestamp() methods in the datetime module
  were also protected.  Closes bugs #919012 and 975996.

- fcntl.ioctl now warns if the mutate flag is not specified.

- nt now properly allows referring to UNC roots, e.g. in nt.stat().

- the weakref module now supports additional objects:  array.array,
  sre.pattern_objects, file objects, and sockets.

- operator.isMappingType() and operator.isSequenceType() now give
  fewer false positives.

- socket.sslerror is now a subclass of socket.error .  Also added
  socket.error to the socket module's C API.

- Bug #920575: A problem where the _locale module segfaults on
  nl_langinfo(ERA) caused by GNU libc's illegal NULL return is fixed.

- array objects now support the copy module.  Also, their resizing
  scheme has been updated to match that used for list objects.  This improves
  the performance (speed and memory usage) of append() operations.
  Also, array.array() and array.extend() now accept any iterable argument
  for repeated appends without needing to create another temporary array.

- cStringIO.writelines() now accepts any iterable argument and writes
  the lines one at a time rather than joining them and writing once.
  Made a parallel change to StringIO.writelines().  Saves memory and
  makes suitable for use with generator expressions.

- time.strftime() now checks that the values in its time tuple argument
  are within the proper boundaries to prevent possible crashes from the
  platform's C library implementation of strftime().  Can possibly
  break code that uses values outside the range that didn't cause
  problems previously (such as sitting day of year to 0).  Fixes bug
  #897625.

- The socket module now supports Bluetooth sockets, if the
  system has <bluetooth/bluetooth.h>

- Added a collections module containing a new datatype, deque(),
  offering high-performance, thread-safe, memory friendly appends
  and pops on either side of the deque.

- Several modules now take advantage of collections.deque() for
  improved performance:  Queue, mutex, shlex, threading, and pydoc.

- The operator module has two new functions, attrgetter() and
  itemgetter() which are useful for creating fast data extractor
  functions for map(), list.sort(), itertools.groupby(), and
  other functions that expect a function argument.

- socket.SHUT_{RD,WR,RDWR} was added.

- os.getsid was added.

- The pwd module incorrectly advertised its struct type as
  struct_pwent; this has been renamed to struct_passwd.  (The old name
  is still supported for backwards compatibility.)

- The xml.parsers.expat module now provides Expat 1.95.7.

- socket.IPPROTO_IPV6 was added.

- readline.clear_history was added.

- select.select() now accepts sequences for its first three arguments.

- cStringIO now supports the f.closed attribute.

- The signal module now exposes SIGRTMIN and SIGRTMAX (if available).

- curses module now supports use_default_colors().  [patch #739124]

- Bug #811028: ncurses.h breakage on FreeBSD/MacOS X

- Bug #814613: INET_ADDRSTRLEN fix needed for all compilers on SGI

- Implemented non-recursive SRE matching scheme (#757624).

- Implemented (?(id/name)yes|no) support in SRE (#572936).

- random.seed() with no arguments or None uses time.time() as a default
  seed.  Modified to match Py2.2 behavior and use fractional seconds so
  that successive runs are more likely to produce different sequences.

- random.Random has a new method, getrandbits(k), which returns an int
  with k random bits.  This method is now an optional part of the API
  for user defined generators.  Any generator that defines genrandbits()
  can now use randrange() for ranges with a length >= 2**53.  Formerly,
  randrange would return only even numbers for ranges that large (see
  SF bug #812202).  Generators that do not define genrandbits() now
  issue a warning when randrange() is called with a range that large.

- itertools has a new function, groupby() for aggregating iterables
  into groups sharing the same key (as determined by a key function).
  It offers some of functionality of SQL's groupby keyword and of
  the Unix uniq filter.

- itertools now has a new tee() function which produces two independent
  iterators from a single iterable.

- itertools.izip() with no arguments now returns an empty iterator instead
  of raising a TypeError exception.

- Fixed #853061: allow BZ2Compressor.compress() to receive an empty string
  as parameter.

Library
-------

- Added a new module: cProfile, a C profiler with the same interface as the
  profile module.  cProfile avoids some of the drawbacks of the hotshot
  profiler and provides a bit more information than the other two profilers.
  Based on "lsprof" (patch #1212837).

- Bug #1266283: The new function "lexists" is now in os.path.__all__.

- Bug #981530: Fix UnboundLocalError in shutil.rmtree().  This affects
  the documented behavior: the function passed to the onerror()
  handler can now also be os.listdir.

- Bug #754449: threading.Thread objects no longer mask exceptions raised during
  interpreter shutdown with another exception from attempting to handle the
  original exception.

- Added decimal.py per PEP 327.

- Bug #981299: rsync is now a recognized protocol in urlparse that uses a
  "netloc" portion of a URL.

- Bug #919012: shutil.move() will not try to move a directory into itself.
  Thanks Johannes Gijsbers.

- Bug #934282: pydoc.stripid() is now case-insensitive.  Thanks Robin Becker.

- Bug #823209:  cmath.log() now takes an optional base argument so that its
  API matches math.log().

- Bug #957381: distutils bdist_rpm no longer fails on recent RPM versions
  that generate a -debuginfo.rpm

- os.path.devnull has been added for all supported platforms.

- Fixed #877165: distutils now picks the right C++ compiler command
  on cygwin and mingw32.

- urllib.urlopen().readline() now handles HTTP/0.9 correctly.

- refactored site.py into functions.  Also wrote regression tests for the
  module.

- The distutils install command now supports the --home option and
  installation scheme for all platforms.

- asyncore.loop now has a repeat count parameter that defaults to
  looping forever.

- The distutils sdist command now ignores all .svn directories, in
  addition to CVS and RCS directories.  .svn directories hold
  administrative files for the Subversion source control system.

- Added a new module: cookielib.  Automatic cookie handling for HTTP
  clients.  Also, support for cookielib has been added to urllib2, so
  urllib2.urlopen() can transparently handle cookies.

- stringprep.py now uses built-in set() instead of sets.Set().

- Bug #876278: Unbounded recursion in modulefinder

- Bug #780300: Swap public and system ID in LexicalHandler.startDTD.
  Applications relying on the wrong order need to be corrected.

- Bug #926075: Fixed a bug that returns a wrong pattern object
  for a string or unicode object in sre.compile() when a different
  type pattern with the same value exists.

- Added countcallers arg to trace.Trace class (--trackcalls command line arg
  when run from the command prompt).

- Fixed a caching bug in platform.platform() where the argument of 'terse' was
  not taken into consideration when caching value.

- Added two new command-line arguments for profile (output file and
  default sort).

- Added global runctx function to profile module

- Add hlist missing entryconfigure and entrycget methods.

- The ptcp154 codec was added for Kazakh character set support.

- Support non-anonymous ftp URLs in urllib2.

- The encodings package will now apply codec name aliases
  first before starting to try the import of the codec module.
  This simplifies overriding built-in codecs with external
  packages, e.g. the included CJK codecs with the JapaneseCodecs
  package, by adjusting the aliases dictionary in encodings.aliases
  accordingly.

- base64 now supports RFC 3548 Base16, Base32, and Base64 encoding and
  decoding standards.

- urllib2 now supports processors.  A processor is a handler that
  implements an xxx_request or xxx_response method.  These methods are
  called for all requests.

- distutils compilers now compile source files in the same order as
  they are passed to the compiler.

- pprint.pprint() and pprint.pformat() now have additional parameters
  indent, width and depth.

- Patch #750542: pprint now will pretty print subclasses of list, tuple
  and dict too, as long as they don't overwrite __repr__().

- Bug #848614: distutils' msvccompiler fails to find the MSVC6
  compiler because of incomplete registry entries.

- httplib.HTTP.putrequest now offers to omit the implicit Accept-Encoding.

- Patch #841977: modulefinder didn't find extension modules in packages

- imaplib.IMAP4.thread was added.

- Plugged a minor hole in tempfile.mktemp() due to the use of
  os.path.exists(), switched to using os.lstat() directly if possible.

- bisect.py and heapq.py now have underlying C implementations
  for better performance.

- heapq.py has two new functions, nsmallest() and nlargest().

- traceback.format_exc has been added (similar to print_exc but it returns
  a string).

- xmlrpclib.MultiCall has been added.

- poplib.POP3_SSL has been added.

- tmpfile.mkstemp now returns an absolute path even if dir is relative.

- urlparse is RFC 2396 compliant.

- The fieldnames argument to the csv module's DictReader constructor is now
  optional.  If omitted, the first row of the file will be used as the
  list of fieldnames.

- encodings.bz2_codec was added for access to bz2 compression
  using "a long string".encode('bz2')

- Various improvements to unittest.py, realigned with PyUnit CVS.

- dircache now passes exceptions to the caller, instead of returning
  empty lists.

- The bsddb module and dbhash module now support the iterator and
  mapping protocols which make them more substitutable for dictionaries
  and shelves.

- The csv module's DictReader and DictWriter classes now accept keyword
  arguments.  This was an omission in the initial implementation.

- The email package handles some RFC 2231 parameters with missing
  CHARSET fields better.  It also includes a patch to parameter
  parsing when semicolons appear inside quotes.

- sets.py now runs under Py2.2.  In addition, the argument restrictions
  for most set methods (but not the operators) have been relaxed to
  allow any iterable.

- _strptime.py now has a behind-the-scenes caching mechanism for the most
  recent TimeRE instance used along with the last five unique directive
  patterns.  The overall module was also made more thread-safe.

- random.cunifvariate() and random.stdgamma() were deprecated in Py2.3
  and removed in Py2.4.

- Bug #823328: urllib2.py's HTTP Digest Auth support works again.

- Patch #873597: CJK codecs are imported into rank of default codecs.

Tools/Demos
-----------

- A hotshotmain script was added to the Tools/scripts directory that
  makes it easy to run a script under control of the hotshot profiler.

- The db2pickle and pickle2db scripts can now dump/load gdbm files.

- The file order on the command line of the pickle2db script was reversed.
  It is now [ picklefile ] dbfile.  This provides better symmetry with
  db2pickle.  The file arguments to both scripts are now source followed by
  destination in situations where both files are given.

- The pydoc script will display a link to the module documentation for
  modules determined to be part of the core distribution.  The documentation
  base directory defaults to http://www.python.org/doc/current/lib/ but can
  be changed by setting the PYTHONDOCS environment variable.

- texcheck.py now detects double word errors.

- md5sum.py mistakenly opened input files in text mode by default, a
  silent and dangerous change from previous releases.  It once again
  opens input files in binary mode by default.  The -t and -b flags
  remain for compatibility with the 2.3 release, but -b is the default
  now.

- py-electric-colon now works when pending-delete/delete-selection mode is
  in effect

- py-help-at-point is no longer bound to the F1 key - it's still bound to
  C-c C-h

- Pynche was fixed to not crash when there is no ~/.pynche file and no
  -d option was given.

Build
-----

- Bug #978645: Modules/getpath.c now builds properly in --disable-framework
  build under OS X.

- Profiling using gprof is now available if Python is configured with
  --enable-profiling.

- Profiling the VM using the Pentium TSC is now possible if Python
  is configured --with-tsc.

- In order to find libraries, setup.py now also looks in /lib64, for use
  on AMD64.

- Bug #934635: Fixed a bug where the configure script couldn't detect
  getaddrinfo() properly if the KAME stack had SCTP support.

- Support for missing ANSI C header files (limits.h, stddef.h, etc) was
  removed.

- Systems requiring the D4, D6 or D7 variants of pthreads are no longer
  supported (see PEP 11).

- Universal newline support can no longer be disabled (see PEP 11).

- Support for DGUX, SunOS 4, IRIX 4 and Minix was removed (see PEP 11).

- Support for systems requiring --with-dl-dld or --with-sgi-dl was removed
  (see PEP 11).

- Tests for sizeof(char) were removed since ANSI C mandates that
  sizeof(char) must be 1.

C API
-----

- Thanks to Anthony Tuininga, the datetime module now supplies a C API
  containing type-check macros and constructors.  See new docs in the
  Python/C API Reference Manual for details.

- Private function _PyTime_DoubleToTimet added, to convert a Python
  timestamp (C double) to platform time_t with some out-of-bounds
  checking.  Declared in new header file timefuncs.h.  It would be
  good to expose some other internal timemodule.c functions there.

- New public functions PyEval_EvaluateFrame and PyGen_New to expose
  generator objects.

- New public functions Py_IncRef() and Py_DecRef(), exposing the
  functionality of the Py_XINCREF() and Py_XDECREF macros. Useful for
  runtime dynamic embedding of Python.  See patch #938302, by Bob
  Ippolito.

- Added a new macro, PySequence_Fast_ITEMS, which retrieves a fast sequence's
  underlying array of PyObject pointers.  Useful for high speed looping.

- Created a new method flag, METH_COEXIST, which causes a method to be loaded
  even if already defined by a slot wrapper.  This allows a __contains__
  method, for example, to co-exist with a defined sq_contains slot.  This
  is helpful because the PyCFunction can take advantage of optimized calls
  whenever METH_O or METH_NOARGS flags are defined.

- Added a new function, PyDict_Contains(d, k) which is like
  PySequence_Contains() but is specific to dictionaries and executes
  about 10% faster.

- Added three new macros: Py_RETURN_NONE, Py_RETURN_TRUE, and Py_RETURN_FALSE.
  Each return the singleton they mention after Py_INCREF()ing them.

- Added a new function, PyTuple_Pack(n, ...) for constructing tuples from a
  variable length argument list of Python objects without having to invoke
  the more complex machinery of Py_BuildValue().  PyTuple_Pack(3, a, b, c)
  is equivalent to Py_BuildValue("(OOO)", a, b, c).

Windows
-------

- The _winreg module could segfault when reading very large registry
  values, due to unchecked alloca() calls (SF bug 851056).  The fix is
  uses either PyMem_Malloc(n) or PyString_FromStringAndSize(NULL, n),
  as appropriate, followed by a size check.

- file.truncate() could misbehave if the file was open for update
  (modes r+, rb+, w+, wb+), and the most recent file operation before
  the truncate() call was an input operation.  SF bug 801631.


What's New in Python 2.3 final?
===============================

*Release date: 29-Jul-2003*

IDLE
----

- Bug 778400:  IDLE hangs when selecting "Edit with IDLE" from explorer.
  This was unique to Windows, and was fixed by adding an -n switch to
  the command the Windows installer creates to execute "Edit with IDLE"
  context-menu actions.

- IDLE displays a new message upon startup:  some "personal firewall"
  kinds of programs (for example, ZoneAlarm) open a dialog of their
  own when any program opens a socket.  IDLE does use sockets, talking
  on the computer's internal loopback interface.  This connection is not
  visible on any external interface and no data is sent to or received
  from the internet.  So, if you get such a dialog when opening IDLE,
  asking whether to let pythonw.exe talk to address 127.0.0.1, say yes,
  and rest assured no communication external to your machine is taking
  place.  If you don't allow it, IDLE won't be able to start.


What's New in Python 2.3 release candidate 2?
=============================================

*Release date: 24-Jul-2003*

Core and builtins
-----------------

- It is now possible to import from zipfiles containing additional
  data bytes before the zip compatible archive.  Zipfiles containing a
  comment at the end are still unsupported.

Extension modules
-----------------

- A longstanding bug in the parser module's initialization could cause
  fatal internal refcount confusion when the module got initialized more
  than once.  This has been fixed.

- Fixed memory leak in pyexpat; using the parser's ParseFile() method
  with open files that aren't instances of the standard file type
  caused an instance of the bound .read() method to be leaked on every
  call.

- Fixed some leaks in the locale module.

Library
-------

- Lib/encodings/rot_13.py when used as a script, now more properly
  uses the first Python interpreter on your path.

- Removed caching of TimeRE (and thus LocaleTime) in _strptime.py to
  fix a locale related bug in the test suite.  Although another patch
  was needed to actually fix the problem, the cache code was not
  restored.

IDLE
----

- Calltips patches.

Build
-----

- For MacOSX, added -mno-fused-madd to BASECFLAGS to fix test_coercion
  on Panther (OSX 10.3).

C API
-----

Windows
-------

- The tempfile module could do insane imports on Windows if PYTHONCASEOK
  was set, making temp file creation impossible.  Repaired.

- Add a patch to workaround pthread_sigmask() bugs in Cygwin.

Mac
---

- Various fixes to pimp.

- Scripts runs with pythonw no longer had full window manager access.

- Don't force boot-disk-only install, for reasons unknown it causes
  more problems than it solves.


What's New in Python 2.3 release candidate 1?
=============================================

*Release date: 18-Jul-2003*

Core and builtins
-----------------

- The new function sys.getcheckinterval() returns the last value set
  by sys.setcheckinterval().

- Several bugs in the symbol table phase of the compiler have been
  fixed.  Errors could be lost and compilation could fail without
  reporting an error.  SF patch 763201.

- The interpreter is now more robust about importing the warnings
  module.  In an executable generated by freeze or similar programs,
  earlier versions of 2.3 would fail if the warnings module could
  not be found on the file system.  Fixes SF bug 771097.

- A warning about assignments to module attributes that shadow
  builtins, present in earlier releases of 2.3, has been removed.

- It is not possible to create subclasses of built-in types like str
  and tuple that define an itemsize.  Earlier releases of Python 2.3
  allowed this by mistake, leading to crashes and other problems.

- The thread_id is now initialized to 0 in a non-thread build.  SF bug
  770247.

- SF bug 762891: "del p[key]" on proxy object no longer raises SystemError.

Extension modules
-----------------

- weakref.proxy() can now handle "del obj[i]" for proxy objects
  defining __delitem__.  Formerly, it generated a SystemError.

- SSL no longer crashes the interpreter when the remote side disconnects.

- On Unix the mmap module can again be used to map device files.

- time.strptime now exclusively uses the Python implementation
  contained within the _strptime module.

- The print slot of weakref proxy objects was removed, because it was
  not consistent with the object's repr slot.

- The mmap module only checks file size for regular files, not
  character or block devices.  SF patch 708374.

- The cPickle Pickler garbage collection support was fixed to traverse
  the find_class attribute, if present.

- There are several fixes for the bsddb3 wrapper module.

  bsddb3 no longer crashes if an environment is closed before a cursor
  (SF bug 763298).

  The DB and DBEnv set_get_returns_none function was extended to take
  a level instead of a boolean flag.  The new level 2 means that in
  addition, cursor.set()/.get() methods return None instead of raising
  an exception.

  A typo was fixed in DBCursor.join_item(), preventing a crash.

Library
-------

- distutils now supports MSVC 7.1

- doctest now examines all docstrings by default.  Previously, it would
  skip over functions with private names (as indicated by the underscore
  naming convention).  The old default created too much of a risk that
  user tests were being skipped inadvertently.  Note, this change could
  break code in the unlikely case that someone had intentionally put
  failing tests in the docstrings of private functions.  The breakage
  is easily fixable by specifying the old behavior when calling testmod()
  or Tester().

- There were several fixes to the way dumbdbms are closed.  It's vital
  that a dumbdbm database be closed properly, else the on-disk data
  and directory files can be left in mutually inconsistent states.
  dumbdbm.py's _Database.__del__() method attempted to close the
  database properly, but a shutdown race in _Database._commit() could
  prevent this from working, so that a program trusting __del__() to
  get the on-disk files in synch could be badly surprised.  The race
  has been repaired.  A sync() method was also added so that shelve
  can guarantee data is written to disk.

  The close() method can now be called more than once without complaint.

- The classes in threading.py are now new-style classes.  That they
  weren't before was an oversight.

- The urllib2 digest authentication handlers now define the correct
  auth_header.  The earlier versions would fail at runtime.

- SF bug 763023: fix uncaught ZeroDivisionError in difflib ratio methods
  when there are no lines.

- SF bug 763637: fix exception in Tkinter with after_cancel
  which could occur with Tk 8.4

- SF bug 770601: CGIHTTPServer.py now passes the entire environment
  to child processes.

- SF bug 765238: add filter to fnmatch's __all__.

- SF bug 748201: make time.strptime() error messages more helpful.

- SF patch 764470: Do not dump the args attribute of a Fault object in
  xmlrpclib.

- SF patch 549151: urllib and urllib2 now redirect POSTs on 301
  responses.

- SF patch 766650: The whichdb module was fixed to recognize dbm files
  generated by gdbm on OS/2 EMX.

- SF bugs 763047 and 763052: fixes bug of timezone value being left as
  -1 when ``time.tzname[0] == time.tzname[1] and not time.daylight``
  is true when it should only when time.daylight is true.

- SF bug 764548: re now allows subclasses of str and unicode to be
  used as patterns.

- SF bug 763637: In Tkinter, change after_cancel() to handle tuples
  of varying sizes.  Tk 8.4 returns a different number of values
  than Tk 8.3.

- SF bug 763023: difflib.ratio() did not catch zero division.

- The Queue module now has an __all__ attribute.

Tools/Demos
-----------

- See Lib/idlelib/NEWS.txt for IDLE news.

- SF bug 753592: webchecker/wsgui now handles user supplied directories.

- The trace.py script has been removed.  It is now in the standard library.

Build
-----

- Python now compiles with -fno-strict-aliasing if possible (SF bug 766696).

- The socket module compiles on IRIX 6.5.10.

- An irix64 system is treated the same way as an irix6 system (SF
  patch 764560).

- Several definitions were missing on FreeBSD 5.x unless the
  __BSD_VISIBLE symbol was defined.  configure now defines it as
  needed.

C API
-----

- Unicode objects now support mbcs as a built-in encoding, so the C
  API can use it without deferring to the encodings package.

Windows
-------

- The Windows implementation of PyThread_start_new_thread() never
  checked error returns from Windows functions correctly.  As a result,
  it could claim to start a new thread even when the Microsoft
  _beginthread() function failed (due to "too many threads" -- this is
  on the order of thousands when it happens).  In these cases, the
  Python exception ::

      thread.error: can't start new thread

  is raised now.

- SF bug 766669: Prevent a GPF on interpreter exit when sockets are in
  use.  The interpreter now calls WSACleanup() from Py_Finalize()
  instead of from DLL teardown.

Mac
---

- Bundlebuilder now inherits default values in the right way.  It was
  previously possible for app bundles to get a type of "BNDL" instead
  of "APPL."  Other improvements include, a --build-id option to
  specify the CFBundleIdentifier and using the --python option to set
  the executable in the bundle.

- Fixed two bugs in MacOSX framework handling.

- pythonw did not allow user interaction in 2.3rc1, this has been fixed.

- Python is now compiled with -mno-fused-madd, making all tests pass
  on Panther.

What's New in Python 2.3 beta 2?
================================

*Release date: 29-Jun-2003*

Core and builtins
-----------------

- A program can now set the environment variable PYTHONINSPECT to some
  string value in Python, and cause the interpreter to enter the
  interactive prompt at program exit, as if Python had been invoked
  with the -i option.

- list.index() now accepts optional start and stop arguments.  Similar
  changes were made to UserList.index(). SF feature request 754014.

- SF patch 751998 fixes an unwanted side effect of the previous fix
  for SF bug 742860 (the next item).

- SF bug 742860: "WeakKeyDictionary __delitem__ uses iterkeys".  This
  wasn't threadsafe, was very inefficient (expected time O(len(dict))
  instead of O(1)), and could raise a spurious RuntimeError if another
  thread mutated the dict during __delitem__, or if a comparison function
  mutated it.  It also neglected to raise KeyError when the key wasn't
  present; didn't raise TypeError when the key wasn't of a weakly
  referencable type; and broke various more-or-less obscure dict
  invariants by using a sequence of equality comparisons over the whole
  set of dict keys instead of computing the key's hash code to narrow
  the search to those keys with the same hash code.  All of these are
  considered to be bugs.  A new implementation of __delitem__ repairs all
  that, but note that fixing these bugs may change visible behavior in
  code relying (whether intentionally or accidentally) on old behavior.

- SF bug 734869: Fixed a compiler bug that caused a fatal error when
  compiling a list comprehension that contained another list comprehension
  embedded in a lambda expression.

- SF bug 705231:  builtin pow() no longer lets the platform C pow()
  raise -1.0 to integer powers, because (at least) glibc gets it wrong
  in some cases.  The result should be -1.0 if the power is odd and 1.0
  if the power is even, and any float with a sufficiently large exponent
  is (mathematically) an exact even integer.

- SF bug 759227: A new-style class that implements __nonzero__() must
  return a bool or int (but not an int subclass) from that method.  This
  matches the restriction on classic classes.

- The encoding attribute has been added for file objects, and set to
  the terminal encoding on Unix and Windows.

- The softspace attribute of file objects became read-only by oversight.
  It's writable again.

- Reverted a 2.3 beta 1 change to iterators for subclasses of list and
  tuple.  By default, the iterators now access data elements directly
  instead of going through __getitem__.  If __getitem__ access is
  preferred, then __iter__ can be overridden.

- SF bug 735247: The staticmethod and super types participate in
  garbage collection. Before this change, it was possible for leaks to
  occur in functions with non-global free variables that used these types.

Extension modules
-----------------

- the socket module has a new exception, socket.timeout, to allow
  timeouts to be handled separately from other socket errors.

- SF bug 751276: cPickle has fixed to propagate exceptions raised in
  user code.  In earlier versions, cPickle caught and ignored any
  exception when it performed operations that it expected to raise
  specific exceptions like AttributeError.

- cPickle Pickler and Unpickler objects now participate in garbage
  collection.

- mimetools.choose_boundary() could return duplicate strings at times,
  especially likely on Windows.  The strings returned are now guaranteed
  unique within a single program run.

- thread.interrupt_main() raises KeyboardInterrupt in the main thread.
  dummy_thread has also been modified to try to simulate the behavior.

- array.array.insert() now treats negative indices as being relative
  to the end of the array, just like list.insert() does. (SF bug #739313)

- The datetime module classes datetime, time, and timedelta are now
  properly subclassable.

- _tkinter.{get|set}busywaitinterval was added.

- itertools.islice() now accepts stop=None as documented.
  Fixes SF bug #730685.

- the bsddb185 module is built in one restricted instance -
  /usr/include/db.h exists and defines HASHVERSION to be 2.  This is true
  for many BSD-derived systems.


Library
-------

- Some happy doctest extensions from Jim Fulton have been added to
  doctest.py.  These are already being used in Zope3.  The two
  primary ones:

  doctest.debug(module, name) extracts the doctests from the named object
  in the given module, puts them in a temp file, and starts pdb running
  on that file.  This is great when a doctest fails.

  doctest.DocTestSuite(module=None) returns a synthesized unittest
  TestSuite instance, to be run by the unittest framework, which
  runs all the doctests in the module.  This allows writing tests in
  doctest style (which can be clearer and shorter than writing tests
  in unittest style), without losing unittest's powerful testing
  framework features (which doctest lacks).

- For compatibility with doctests created before 2.3, if an expected
  output block consists solely of "1" and the actual output block
  consists solely of "True", it's accepted as a match; similarly
  for "0" and "False".  This is quite un-doctest-like, but is practical.
  The behavior can be disabled by passing the new doctest module
  constant DONT_ACCEPT_TRUE_FOR_1 to the new optionflags optional
  argument.

- ZipFile.testzip() now only traps BadZipfile exceptions.  Previously,
  a bare except caught to much and reported all errors as a problem
  in the archive.

- The logging module now has a new function, makeLogRecord() making
  LogHandler easier to interact with DatagramHandler and SocketHandler.

- The cgitb module has been extended to support plain text display (SF patch
  569574).

- A brand new version of IDLE (from the IDLEfork project at
  SourceForge) is now included as Lib/idlelib.  The old Tools/idle is
  no more.

- Added a new module: trace (documentation missing).  This module used
  to be distributed in Tools/scripts.  It uses sys.settrace() to trace
  code execution -- either function calls or individual lines.  It can
  generate tracing output during execution or a post-mortem report of
  code coverage.

- The threading module has new functions settrace() and setprofile()
  that cooperate with the functions of the same name in the sys
  module.  A function registered with the threading module will
  be used for all threads it creates.  The new trace module uses this
  to provide tracing for code running in threads.

- copy.py: applied SF patch 707900, fixing bug 702858, by Steven
  Taschuk.  Copying a new-style class that had a reference to itself
  didn't work.  (The same thing worked fine for old-style classes.)
  Builtin functions are now treated as atomic, fixing bug #746304.

- difflib.py has two new functions:  context_diff() and unified_diff().

- More fixes to urllib (SF 549151): (a) When redirecting, always use
  GET.  This is common practice and more-or-less sanctioned by the
  HTTP standard. (b) Add a handler for 307 redirection, which becomes
  an error for POST, but a regular redirect for GET and HEAD

- Added optional 'onerror' argument to os.walk(), to control error
  handling.

- inspect.is{method|data}descriptor was added, to allow pydoc display
  __doc__ of data descriptors.

- Fixed socket speed loss caused by use of the _socketobject wrapper class
  in socket.py.

- timeit.py now checks the current directory for imports.

- urllib2.py now knows how to order proxy classes, so the user doesn't
  have to insert it in front of other classes, nor do dirty tricks like
  inserting a "dummy" HTTPHandler after a ProxyHandler when building an
  opener with proxy support.

- Iterators have been added for dbm keys.

- random.Random objects can now be pickled.

Tools/Demos
-----------

- pydoc now offers help on keywords and topics.

- Tools/idle is gone; long live Lib/idlelib.

- diff.py prints file diffs in context, unified, or ndiff formats,
  providing a command line interface to difflib.py.

- texcheck.py is a new script for making a rough validation of Python LaTeX
  files.

Build
-----

- Setting DESTDIR during 'make install' now allows specifying a
  different root directory.

C API
-----

- PyType_Ready():  If a type declares that it participates in gc
  (Py_TPFLAGS_HAVE_GC), and its base class does not, and its base class's
  tp_free slot is the default _PyObject_Del, and type does not define
  a tp_free slot itself, _PyObject_GC_Del is assigned to type->tp_free.
  Previously _PyObject_Del was inherited, which could at best lead to a
  segfault.  In addition, if even after this magic the type's tp_free
  slot is _PyObject_Del or NULL, and the type is a base type
  (Py_TPFLAGS_BASETYPE), TypeError is raised:  since the type is a base
  type, its dealloc function must call type->tp_free, and since the type
  is gc'able, tp_free must not be NULL or _PyObject_Del.

- PyThreadState_SetAsyncExc(): A new API (deliberately accessible only
  from C) to interrupt a thread by sending it an exception.  It is
  intentional that you have to write your own C extension to call it
  from Python.


New platforms
-------------

None this time.

Tests
-----

- test_imp rewritten so that it doesn't raise RuntimeError if run as a
  side effect of being imported ("import test.autotest").

Windows
-------

- The Windows installer ships with Tcl/Tk 8.4.3 (upgraded from 8.4.1).

- The installer always suggested that Python be installed on the C:
  drive, due to a hardcoded "C:" generated by the Wise installation
  wizard.  People with machines where C: is not the system drive
  usually want Python installed on whichever drive is their system drive
  instead.  We removed the hardcoded "C:", and two testers on machines
  where C: is not the system drive report that the installer now
  suggests their system drive.  Note that you can always select the
  directory you want in the "Select Destination Directory" dialog --
  that's what it's for.

Mac
---

- There's a new module called "autoGIL", which offers a mechanism to
  automatically release the Global Interpreter Lock when an event loop
  goes to sleep, allowing other threads to run. It's currently only
  supported on OSX, in the Mach-O version.
- The OSA modules now allow direct access to properties of the
  toplevel application class (in AppleScript terminology).
- The Package Manager can now update itself.

SourceForge Bugs and Patches Applied
------------------------------------

430160, 471893, 501716, 542562, 549151, 569574, 595837, 596434,
598163, 604210, 604716, 610332, 612627, 614770, 620190, 621891,
622042, 639139, 640236, 644345, 649742, 649742, 658233, 660022,
661318, 661676, 662807, 662923, 666219, 672855, 678325, 682347,
683486, 684981, 685773, 686254, 692776, 692959, 693094, 696777,
697989, 700827, 703666, 708495, 708604, 708901, 710733, 711902,
713722, 715782, 718286, 719359, 719367, 723136, 723831, 723962,
724588, 724767, 724767, 725942, 726150, 726446, 726869, 727051,
727719, 727719, 727805, 728277, 728563, 728656, 729096, 729103,
729293, 729297, 729300, 729317, 729395, 729622, 729817, 730170,
730296, 730594, 730685, 730826, 730963, 731209, 731403, 731504,
731514, 731626, 731635, 731643, 731644, 731644, 731689, 732124,
732143, 732234, 732284, 732284, 732479, 732761, 732783, 732951,
733667, 733781, 734118, 734231, 734869, 735051, 735293, 735527,
735613, 735694, 736962, 736962, 737970, 738066, 739313, 740055,
740234, 740301, 741806, 742126, 742741, 742860, 742860, 742911,
744041, 744104, 744238, 744687, 744877, 745055, 745478, 745525,
745620, 746012, 746304, 746366, 746801, 746953, 747348, 747667,
747954, 748846, 748849, 748973, 748975, 749191, 749210, 749759,
749831, 749911, 750008, 750092, 750542, 750595, 751038, 751107,
751276, 751451, 751916, 751941, 751956, 751998, 752671, 753451,
753602, 753617, 753845, 753925, 754014, 754340, 754447, 755031,
755087, 755147, 755245, 755683, 755987, 756032, 756996, 757058,
757229, 757818, 757821, 757822, 758112, 758910, 759227, 759889,
760257, 760703, 760792, 761104, 761337, 761519, 761830, 762455


What's New in Python 2.3 beta 1?
================================

*Release date: 25-Apr-2003*

Core and builtins
-----------------

- New format codes B, H, I, k and K have been implemented for
  PyArg_ParseTuple and PyBuild_Value.

- New built-in function sum(seq, start=0) returns the sum of all the
  items in iterable object seq, plus start (items are normally numbers,
  and cannot be strings).

- bool() called without arguments now returns False rather than
  raising an exception.  This is consistent with calling the
  constructors for the other built-in types -- called without argument
  they all return the false value of that type.  (SF patch #724135)

- In support of PEP 269 (making the pgen parser generator accessible
  from Python), some changes to the pgen code structure were made; a
  few files that used to be linked only with pgen are now linked with
  Python itself.

- The repr() of a weakref object now shows the __name__ attribute of
  the referenced object, if it has one.

- super() no longer ignores data descriptors, except __class__.  See
  the thread started at
  http://mail.python.org/pipermail/python-dev/2003-April/034338.html

- list.insert(i, x) now interprets negative i as it would be
  interpreted by slicing, so negative values count from the end of the
  list.  This was the only place where such an interpretation was not
  placed on a list index.

- range() now works even if the arguments are longs with magnitude
  larger than sys.maxint, as long as the total length of the sequence
  fits.  E.g., range(2**100, 2**101, 2**100) is the following list:
  [1267650600228229401496703205376L].  (SF patch #707427.)

- Some horridly obscure problems were fixed involving interaction
  between garbage collection and old-style classes with "ambitious"
  getattr hooks.  If an old-style instance didn't have a __del__ method,
  but did have a __getattr__ hook, and the instance became reachable
  only from an unreachable cycle, and the hook resurrected or deleted
  unreachable objects when asked to resolve "__del__", anything up to
  a segfault could happen.  That's been repaired.

- dict.pop now takes an optional argument specifying a default
  value to return if the key is not in the dict.  If a default is not
  given and the key is not found, a KeyError will still be raised.
  Parallel changes were made to UserDict.UserDict and UserDict.DictMixin.
  [SF patch #693753] (contributed by Michael Stone.)

- sys.getfilesystemencoding() was added to expose
  Py_FileSystemDefaultEncoding.

- New function sys.exc_clear() clears the current exception.  This is
  rarely needed, but can sometimes be useful to release objects
  referenced by the traceback held in sys.exc_info()[2].  (SF patch
  #693195.)

- On 64-bit systems, a dictionary could contain duplicate long/int keys
  if the key value was larger than 2**32.  See SF bug #689659.

- Fixed SF bug #663074. The codec system was using global static
  variables to store internal data. As a result, any attempts to use the
  unicode system with multiple active interpreters, or successive
  interpreter executions, would fail.

- "%c" % u"a" now returns a unicode string instead of raising a
  TypeError. u"%c" % 0xffffffff now raises an OverflowError instead
  of a ValueError to be consistent with "%c" % 256. See SF patch #710127.

Extension modules
-----------------

- The socket module now provides the functions inet_pton and inet_ntop
  for converting between string and packed representation of IP
  addresses.  There is also a new module variable, has_ipv6, which is
  True iff the current Python has IPv6 support.  See SF patch #658327.

- Tkinter wrappers around Tcl variables now pass objects directly
  to Tcl, instead of first converting them to strings.

- The .*? pattern in the re module is now special-cased to avoid the
  recursion limit.  (SF patch #720991 -- many thanks to Gary Herron
  and Greg Chapman.)

- New function sys.call_tracing() allows pdb to debug code
  recursively.

- New function gc.get_referents(obj) returns a list of objects
  directly referenced by obj.  In effect, it exposes what the object's
  tp_traverse slot does, and can be helpful when debugging memory
  leaks.

- The iconv module has been removed from this release.

- The platform-independent routines for packing floats in IEEE formats
  (struct.pack's <f, >f, <d, and >d codes; pickle and cPickle's protocol 1
  pickling of floats) ignored that rounding can cause a carry to
  propagate.  The worst consequence was that, in rare cases, <f and >f
  could produce strings that, when unpacked again, were a factor of 2
  away from the original float.  This has been fixed.  See SF bug
  #705836.

- New function time.tzset() provides access to the C library tzset()
  function, if supported.  (SF patch #675422.)

- Using createfilehandler, deletefilehandler, createtimerhandler functions
  on Tkinter.tkinter (_tkinter module) no longer crashes the interpreter.
  See SF bug #692416.

- Modified the fcntl.ioctl() function to allow modification of a passed
  mutable buffer (for details see the reference documentation).

- Made user requested changes to the itertools module.
  Subsumed the times() function into repeat().
  Added chain() and cycle().

- The rotor module is now deprecated; the encryption algorithm it uses
  is not believed to be secure, and including crypto code with Python
  has implications for exporting and importing it in various countries.

- The socket module now always uses the _socketobject wrapper class, even on
  platforms which have dup(2).  The makefile() method is built directly
  on top of the socket without duplicating the file descriptor, allowing
  timeouts to work properly.

Library
-------

- New generator function os.walk() is an easy-to-use alternative to
  os.path.walk().  See os module docs for details.  os.path.walk()
  isn't deprecated at this time, but may become deprecated in a
  future release.

- Added new module "platform" which provides a wide range of tools
  for querying platform dependent features.

- netrc now allows ASCII punctuation characters in passwords.

- shelve now supports the optional writeback argument, and exposes
  pickle protocol versions.

- Several methods of nntplib.NNTP have grown an optional file argument
  which specifies a file where to divert the command's output
  (already supported by the body() method).  (SF patch #720468)

- The self-documenting XML server library DocXMLRPCServer was added.

- Support for internationalized domain names has been added through
  the 'idna' and 'punycode' encodings, the 'stringprep' module, the
  'mkstringprep' tool, and enhancements to the socket and httplib
  modules.

- htmlentitydefs has two new dictionaries: name2codepoint maps
  HTML entity names to Unicode codepoints (as integers).
  codepoint2name is the reverse mapping. See SF patch #722017.

- pdb has a new command, "debug", which lets you step through
  arbitrary code from the debugger's (pdb) prompt.

- unittest.failUnlessEqual and its equivalent unittest.assertEqual now
  return 'not a == b' rather than 'a != b'.  This gives the desired
  result for classes that define __eq__ without defining __ne__.

- sgmllib now supports SGML marked sections, in particular the
  MS Office extensions.

- The urllib module now offers support for the iterator protocol.
  SF patch 698520 contributed by Brett Cannon.

- New module timeit provides a simple framework for timing the
  execution speed of expressions and statements.

- sets.Set objects now support mixed-type __eq__ and __ne__, instead
  of raising TypeError.  If x is a Set object and y is a non-Set object,
  x == y is False, and x != y is True.  This is akin to the change made
  for mixed-type comparisons of datetime objects in 2.3a2; more info
  about the rationale is in the NEWS entry for that.  See also SF bug
  report <https://bugs.python.org/issue693121>.

- On Unix platforms, if os.listdir() is called with a Unicode argument,
  it now returns Unicode strings.  (This behavior was added earlier
  to the Windows NT/2k/XP version of os.listdir().)

- Distutils: both 'py_modules' and 'packages' keywords can now be specified
  in core.setup().  Previously you could supply one or the other, but
  not both of them.  (SF patch #695090 from Bernhard Herzog)

- New csv package makes it easy to read/write CSV files.

- Module shlex has been extended to allow posix-like shell parsings,
  including a split() function for easy splitting of quoted strings and
  commands. An iterator interface was also implemented.

Tools/Demos
-----------

- New script combinerefs.py helps analyze new PYTHONDUMPREFS output.
  See the module docstring for details.

Build
-----

- Fix problem building on OSF1 because the compiler only accepted
  preprocessor directives that start in column 1.  (SF bug #691793.)

C API
-----

- Added PyGC_Collect(), equivalent to calling gc.collect().

- PyThreadState_GetDict() was changed not to raise an exception or
  issue a fatal error when no current thread state is available.  This
  makes it possible to print dictionaries when no thread is active.

- LONG_LONG was renamed to PY_LONG_LONG.  Extensions that use this and
  need compatibility with previous versions can use this:

    #ifndef  PY_LONG_LONG
    #define  PY_LONG_LONG  LONG_LONG
    #endif

- Added PyObject_SelfIter() to fill the tp_iter slot for the
  typical case where the method returns its self argument.

- The extended type structure used for heap types (new-style
  classes defined by Python code using a class statement) is now
  exported from object.h as PyHeapTypeObject.  (SF patch #696193.)

New platforms
-------------

None this time.

Tests
-----

- test_timeout now requires -u network to be passed to regrtest to run.
  See SF bug #692988.

Windows
-------

- os.fsync() now exists on Windows, and calls the Microsoft _commit()
  function.

- New function winsound.MessageBeep() wraps the Win32 API
  MessageBeep().

Mac
---

- os.listdir() now returns Unicode strings on MacOS X when called with
  a Unicode argument. See the general news item under "Library".

- A new method MacOS.WMAvailable() returns true if it is safe to access
  the window manager, false otherwise.

- EasyDialogs dialogs are now movable-modal, and if the application is
  currently in the background they will ask to be moved to the foreground
  before displaying.

- OSA Scripting support has improved a lot, and gensuitemodule.py can now
  be used by mere mortals. The documentation is now also more or less
  complete.

- The IDE (in a framework build) now includes introductory documentation
  in Apple Help Viewer format.


What's New in Python 2.3 alpha 2?
=================================

*Release date: 19-Feb-2003*

Core and builtins
-----------------

- Negative positions returned from PEP 293 error callbacks are now
  treated as being relative to the end of the input string. Positions
  that are out of bounds raise an IndexError.

- sys.path[0] (the directory from which the script is loaded) is now
  turned into an absolute pathname, unless it is the empty string.
  (SF patch #664376.)

- Finally fixed the bug in compile() and exec where a string ending
  with an indented code block but no newline would raise SyntaxError.
  This would have been a four-line change in parsetok.c...  Except
  codeop.py depends on this behavior, so a compilation flag had to be
  invented that causes the tokenizer to revert to the old behavior;
  this required extra changes to 2 .h files, 2 .c files, and 2 .py
  files.  (Fixes SF bug #501622.)

- If a new-style class defines neither __new__ nor __init__, its
  constructor would ignore all arguments.  This is changed now: the
  constructor refuses arguments in this case.  This might break code
  that worked under Python 2.2.  The simplest fix is to add a no-op
  __init__: ``def __init__(self, *args, **kw): pass``.

- Through a bytecode optimizer bug (and I bet you didn't even know
  Python *had* a bytecode optimizer :-), "unsigned" hex/oct constants
  with a leading minus sign would come out with the wrong sign.
  ("Unsigned" hex/oct constants are those with a face value in the
  range sys.maxint+1 through sys.maxint*2+1, inclusive; these have
  always been interpreted as negative numbers through sign folding.)
  E.g. 0xffffffff is -1, and -(0xffffffff) is 1, but -0xffffffff would
  come out as -4294967295.  This was the case in Python 2.2 through
  2.2.2 and 2.3a1, and in Python 2.4 it will once again have that
  value, but according to PEP 237 it really needs to be 1 now.  This
  will be backported to Python 2.2.3 a well.  (SF #660455)

- int(s, base) sometimes sign-folds hex and oct constants; it only
  does this when base is 0 and s.strip() starts with a '0'.  When the
  sign is actually folded, as in int("0xffffffff", 0) on a 32-bit
  machine, which returns -1, a FutureWarning is now issued; in Python
  2.4, this will return 4294967295L, as do int("+0xffffffff", 0) and
  int("0xffffffff", 16) right now.  (PEP 347)

- super(X, x): x may now be a proxy for an X instance, i.e.
  issubclass(x.__class__, X) but not issubclass(type(x), X).

- isinstance(x, X): if X is a new-style class, this is now equivalent
  to issubclass(type(x), X) or issubclass(x.__class__, X).  Previously
  only type(x) was tested.  (For classic classes this was already the
  case.)

- compile(), eval() and the exec statement now fully support source code
  passed as unicode strings.

- int subclasses can be initialized with longs if the value fits in an int.
  See SF bug #683467.

- long(string, base) takes time linear in len(string) when base is a power
  of 2 now.  It used to take time quadratic in len(string).

- filter returns now Unicode results for Unicode arguments.

- raw_input can now return Unicode objects.

- List objects' sort() method now accepts None as the comparison function.
  Passing None is semantically identical to calling sort() with no
  arguments.

- Fixed crash when printing a subclass of str and __str__ returned self.
  See SF bug #667147.

- Fixed an invalid RuntimeWarning and an undetected error when trying
  to convert a long integer into a float which couldn't fit.
  See SF bug #676155.

- Function objects now have a __module__ attribute that is bound to
  the name of the module in which the function was defined.  This
  applies for C functions and methods as well as functions and methods
  defined in Python.  This attribute is used by pickle.whichmodule(),
  which changes the behavior of whichmodule slightly.  In Python 2.2
  whichmodule() returns "__main__" for functions that are not defined
  at the top-level of a module (examples: methods, nested functions).
  Now whichmodule() will return the proper module name.

Extension modules
-----------------

- operator.isNumberType() now checks that the object has a nb_int or
  nb_float slot, rather than simply checking whether it has a non-NULL
  tp_as_number pointer.

- The imp module now has ways to acquire and release the "import
  lock": imp.acquire_lock() and imp.release_lock().  Note: this is a
  reentrant lock, so releasing the lock only truly releases it when
  this is the last release_lock() call.  You can check with
  imp.lock_held().  (SF bug #580952 and patch #683257.)

- Change to cPickle to match pickle.py (see below and PEP 307).

- Fix some bugs in the parser module.  SF bug #678518.

- Thanks to Scott David Daniels, a subtle bug in how the zlib
  extension implemented flush() was fixed.  Scott also rewrote the
  zlib test suite using the unittest module.  (SF bug #640230 and
  patch #678531.)

- Added an itertools module containing high speed, memory efficient
  looping constructs inspired by tools from Haskell and SML.

- The SSL module now handles sockets with a timeout set correctly (SF
  patch #675750, fixing SF bug #675552).

- os/posixmodule has grown the sysexits.h constants (EX_OK and friends).

- Fixed broken threadstate swap in readline that could cause fatal
  errors when a readline hook was being invoked while a background
  thread was active.  (SF bugs #660476 and #513033.)

- fcntl now exposes the strops.h I_* constants.

- Fix a crash on Solaris that occurred when calling close() on
  an mmap'ed file which was already closed.  (SF patch #665913)

- Fixed several serious bugs in the zipimport implementation.

- datetime changes:

  The date class is now properly subclassable.  (SF bug #720908)

  The datetime and datetimetz classes have been collapsed into a single
  datetime class, and likewise the time and timetz classes into a single
  time class.  Previously, a datetimetz object with tzinfo=None acted
  exactly like a datetime object, and similarly for timetz.  This wasn't
  enough of a difference to justify distinct classes, and life is simpler
  now.

  today() and now() now round system timestamps to the closest
  microsecond <https://bugs.python.org/issue661086>.  This repairs an
  irritation most likely seen on Windows systems.

  In dt.astimezone(tz), if tz.utcoffset(dt) returns a duration,
  ValueError is raised if tz.dst(dt) returns None (2.3a1 treated it
  as 0 instead, but a tzinfo subclass wishing to participate in
  time zone conversion has to take a stand on whether it supports
  DST; if you don't care about DST, then code dst() to return 0 minutes,
  meaning that DST is never in effect).

  The tzinfo methods utcoffset() and dst() must return a timedelta object
  (or None) now.  In 2.3a1 they could also return an int or long, but that
  was an unhelpfully redundant leftover from an earlier version wherein
  they couldn't return a timedelta.  TOOWTDI.

  The example tzinfo class for local time had a bug.  It was replaced
  by a later example coded by Guido.

  datetime.astimezone(tz) no longer raises an exception when the
  input datetime has no UTC equivalent in tz.  For typical "hybrid" time
  zones (a single tzinfo subclass modeling both standard and daylight
  time), this case can arise one hour per year, at the hour daylight time
  ends.  See new docs for details.  In short, the new behavior mimics
  the local wall clock's behavior of repeating an hour in local time.

  dt.astimezone() can no longer be used to convert between naive and aware
  datetime objects.  If you merely want to attach, or remove, a tzinfo
  object, without any conversion of date and time members, use
  dt.replace(tzinfo=whatever) instead, where "whatever" is None or a
  tzinfo subclass instance.

  A new method tzinfo.fromutc(dt) can be overridden in tzinfo subclasses
  to give complete control over how a UTC time is to be converted to
  a local time.  The default astimezone() implementation calls fromutc()
  as its last step, so a tzinfo subclass can affect that too by overriding
  fromutc().  It's expected that the default fromutc() implementation will
  be suitable as-is for "almost all" time zone subclasses, but the
  creativity of political time zone fiddling appears unbounded -- fromutc()
  allows the highly motivated to emulate any scheme expressible in Python.

  datetime.now():  The optional tzinfo argument was undocumented (that's
  repaired), and its name was changed to tz ("tzinfo" is overloaded enough
  already).  With a tz argument, now(tz) used to return the local date
  and time, and attach tz to it, without any conversion of date and time
  members.  This was less than useful.  Now now(tz) returns the current
  date and time as local time in tz's time zone, akin to ::

      tz.fromutc(datetime.utcnow().replace(tzinfo=utc))

  where "utc" is an instance of a tzinfo subclass modeling UTC.  Without
  a tz argument, now() continues to return the current local date and time,
  as a naive datetime object.

  datetime.fromtimestamp():  Like datetime.now() above, this had less than
  useful behavior when the optional tinzo argument was specified.  See
  also SF bug report <https://bugs.python.org/issue660872>.

  date and datetime comparison:  In order to prevent comparison from
  falling back to the default compare-object-addresses strategy, these
  raised TypeError whenever they didn't understand the other object type.
  They still do, except when the other object has a "timetuple" attribute,
  in which case they return NotImplemented now.  This gives other
  datetime objects (e.g., mxDateTime) a chance to intercept the
  comparison.

  date, time, datetime and timedelta comparison:  When the exception
  for mixed-type comparisons in the last paragraph doesn't apply, if
  the comparison is == then False is returned, and if the comparison is
  != then True is returned.  Because dict lookup and the "in" operator
  only invoke __eq__, this allows, for example, ::

      if some_datetime in some_sequence:

  and ::

      some_dict[some_timedelta] = whatever

  to work as expected, without raising TypeError just because the
  sequence is heterogeneous, or the dict has mixed-type keys.  [This
  seems like a good idea to implement for all mixed-type comparisons
  that don't want to allow falling back to address comparison.]

  The constructors building a datetime from a timestamp could raise
  ValueError if the platform C localtime()/gmtime() inserted "leap
  seconds".  Leap seconds are ignored now.  On such platforms, it's
  possible to have timestamps that differ by a second, yet where
  datetimes constructed from them are equal.

  The pickle format of date, time and datetime objects has changed
  completely.  The undocumented pickler and unpickler functions no
  longer exist.  The undocumented __setstate__() and __getstate__()
  methods no longer exist either.

Library
-------

- The logging module was updated slightly; the WARN level was renamed
  to WARNING, and the matching function/method warn() to warning().

- The pickle and cPickle modules were updated with a new pickling
  protocol (documented by pickletools.py, see below) and several
  extensions to the pickle customization API (__reduce__, __setstate__
  etc.).  The copy module now uses more of the pickle customization
  API to copy objects that don't implement __copy__ or __deepcopy__.
  See PEP 307 for details.

- The distutils "register" command now uses http://www.python.org/pypi
  as the default repository.  (See PEP 301.)

- the platform dependent path related variables sep, altsep,
  pathsep, curdir, pardir and defpath are now defined in the platform
  dependent path modules (e.g. ntpath.py) rather than os.py, so these
  variables are now available via os.path.  They continue to be
  available from the os module.
  (see <https://bugs.python.org/issue680789>).

- array.array was added to the types repr.py knows about (see
  <https://bugs.python.org/issue680789>).

- The new pickletools.py contains lots of documentation about pickle
  internals, and supplies some helpers for working with pickles, such as
  a symbolic pickle disassembler.

- xmlrpclib.py now supports the built-in boolean type.

- py_compile has a new 'doraise' flag and a new PyCompileError
  exception.

- SimpleXMLRPCServer now supports CGI through the CGIXMLRPCRequestHandler
  class.

- The sets module now raises TypeError in __cmp__, to clarify that
  sets are not intended to be three-way-compared; the comparison
  operators are overloaded as subset/superset tests.

- Bastion.py and rexec.py are disabled.  These modules are not safe in
  Python 2.2. or 2.3.

- realpath is now exported when doing ``from poxixpath import *``.
  It is also exported for ntpath, macpath, and os2emxpath.
  See SF bug #659228.

- New module tarfile from Lars Gustäbel provides a comprehensive interface
  to tar archive files with transparent gzip and bzip2 compression.
  See SF patch #651082.

- urlparse can now parse imap:// URLs.  See SF feature request #618024.

- Tkinter.Canvas.scan_dragto() provides an optional parameter to support
  the gain value which is passed to Tk.  SF bug# 602259.

- Fix logging.handlers.SysLogHandler protocol when using UNIX domain sockets.
  See SF patch #642974.

- The dospath module was deleted.  Use the ntpath module when manipulating
  DOS paths from other platforms.

Tools/Demos
-----------

- Two new scripts (db2pickle.py and pickle2db.py) were added to the
  Tools/scripts directory to facilitate conversion from the old bsddb module
  to the new one.  While the user-visible API of the new module is
  compatible with the old one, it's likely that the version of the
  underlying database library has changed.  To convert from the old library,
  run the db2pickle.py script using the old version of Python to convert it
  to a pickle file.  After upgrading Python, run the pickle2db.py script
  using the new version of Python to reconstitute your database.  For
  example:

    % python2.2 db2pickle.py -h some.db > some.pickle
    % python2.3 pickle2db.py -h some.db.new < some.pickle

  Run the scripts without any args to get a usage message.


Build
-----

- The audio driver tests (test_ossaudiodev.py and
  test_linuxaudiodev.py) are no longer run by default.  This is
  because they don't always work, depending on your hardware and
  software.  To run these tests, you must use an invocation like ::

    ./python Lib/test/regrtest.py -u audio test_ossaudiodev

- On systems which build using the configure script, compiler flags which
  used to be lumped together using the OPT flag have been split into two
  groups, OPT and BASECFLAGS.  OPT is meant to carry just optimization- and
  debug-related flags like "-g" and "-O3".  BASECFLAGS is meant to carry
  compiler flags that are required to get a clean compile.  On some
  platforms (many Linux flavors in particular) BASECFLAGS will be empty by
  default.  On others, such as Mac OS X and SCO, it will contain required
  flags.  This change allows people building Python to override OPT without
  fear of clobbering compiler flags which are required to get a clean build.

- On Darwin/Mac OS X platforms, /sw/lib and /sw/include are added to the
  relevant search lists in setup.py.  This allows users building Python to
  take advantage of the many packages available from the fink project
  <http://fink.sf.net/>.

- A new Makefile target, scriptsinstall, installs a number of useful scripts
  from the Tools/scripts directory.

C API
-----

- PyEval_GetFrame() is now declared to return a ``PyFrameObject *``
  instead of a plain ``PyObject *``.  (SF patch #686601.)

- PyNumber_Check() now checks that the object has a nb_int or nb_float
  slot, rather than simply checking whether it has a non-NULL
  tp_as_number pointer.

- A C type that inherits from a base type that defines tp_as_buffer
  will now inherit the tp_as_buffer pointer if it doesn't define one.
  (SF #681367)

- The PyArg_Parse functions now issue a DeprecationWarning if a float
  argument is provided when an integer is specified (this affects the 'b',
  'B', 'h', 'H', 'i', and 'l' codes).  Future versions of Python will
  raise a TypeError.

Tests
-----

- Several tests weren't being run from regrtest.py (test_timeout.py,
  test_tarfile.py, test_netrc.py, test_multifile.py,
  test_importhooks.py and test_imp.py).  Now they are.  (Note to
  developers: please read Lib/test/README when creating a new test, to
  make sure to do it right!  All tests need to use either unittest or
  pydoc.)

- Added test_posix.py, a test suite for the posix module.

- Added test_hexoct.py, a test suite for hex/oct constant folding.

Windows
-------

- The timeout code for socket connect() didn't work right; this has
  now been fixed.  test_timeout.py should pass (at least most of the
  time).

- distutils' msvccompiler class now passes the preprocessor options to
  the resource compiler.  See SF patch #669198.

- The bsddb module now ships with Sleepycat's 4.1.25.NC, the latest
  release without strong cryptography.

- sys.path[0], if it contains a directory name, is now always an
  absolute pathname. (SF patch #664376.)

- The new logging package is now installed by the Windows installer.  It
  wasn't in 2.3a1 due to oversight.

Mac
---

- There are new dialogs EasyDialogs.AskFileForOpen, AskFileForSave
  and AskFolder. The old macfs.StandardGetFile and friends are deprecated.

- Most of the standard library now uses pathnames or FSRefs in preference
  of FSSpecs, and use the underlying Carbon.File and Carbon.Folder modules
  in stead of macfs. macfs will probably be deprecated in the future.

- Type Carbon.File.FSCatalogInfo and supporting methods have been implemented.
  This also makes macfs.FSSpec.SetDates() work again.

- There is a new module pimp, the package install manager for Python, and
  accompanying applet PackageManager. These allow you to easily download
  and install pretested extension packages either in source or binary
  form. Only in MacPython-OSX.

- Applets are now built with bundlebuilder in MacPython-OSX, which should make
  them more robust and also provides a path towards BuildApplication. The
  downside of this change is that applets can no longer be run from the
  Terminal window, this will hopefully be fixed in the 2.3b1.


What's New in Python 2.3 alpha 1?
=================================

*Release date: 31-Dec-2002*

Type/class unification and new-style classes
--------------------------------------------

- One can now assign to __bases__ and __name__ of new-style classes.

- dict() now accepts keyword arguments so that dict(one=1, two=2)
  is the equivalent of {"one": 1, "two": 2}.  Accordingly,
  the existing (but undocumented) 'items' keyword argument has
  been eliminated.  This means that dict(items=someMapping) now has
  a different meaning than before.

- int() now returns a long object if the argument is outside the
  integer range, so int("4" * 1000), int(1e200) and int(1L<<1000) will
  all return long objects instead of raising an OverflowError.

- Assignment to __class__ is disallowed if either the old or the new
  class is a statically allocated type object (such as defined by an
  extension module).  This prevents anomalies like 2.__class__ = bool.

- New-style object creation and deallocation have been sped up
  significantly; they are now faster than classic instance creation
  and deallocation.

- The __slots__ variable can now mention "private" names, and the
  right thing will happen (e.g. __slots__ = ["__foo"]).

- The built-ins slice() and buffer() are now callable types.  The
  types classobj (formerly class), code, function, instance, and
  instancemethod (formerly instance-method), which have no built-in
  names but are accessible through the types module, are now also
  callable.  The type dict-proxy is renamed to dictproxy.

- Cycles going through the __class__ link of a new-style instance are
  now detected by the garbage collector.

- Classes using __slots__ are now properly garbage collected.
  [SF bug 519621]

- Tightened the __slots__ rules: a slot name must be a valid Python
  identifier.

- The constructor for the module type now requires a name argument and
  takes an optional docstring argument.  Previously, this constructor
  ignored its arguments.  As a consequence, deriving a class from a
  module (not from the module type) is now illegal; previously this
  created an unnamed module, just like invoking the module type did.
  [SF bug 563060]

- A new type object, 'basestring', is added.  This is a common base type
  for 'str' and 'unicode', and can be used instead of
  types.StringTypes, e.g. to test whether something is "a string":
  isinstance(x, basestring) is True for Unicode and 8-bit strings.  This
  is an abstract base class and cannot be instantiated directly.

- Changed new-style class instantiation so that when C's __new__
  method returns something that's not a C instance, its __init__ is
  not called.  [SF bug #537450]

- Fixed super() to work correctly with class methods.  [SF bug #535444]

- If you try to pickle an instance of a class that has __slots__ but
  doesn't define or override __getstate__, a TypeError is now raised.
  This is done by adding a bozo __getstate__ to the class that always
  raises TypeError.  (Before, this would appear to be pickled, but the
  state of the slots would be lost.)

Core and builtins
-----------------

- Import from zipfiles is now supported.  The name of a zipfile placed
  on sys.path causes the import statement to look for importable Python
  modules (with .py, pyc and .pyo extensions) and packages inside the
  zipfile.  The zipfile import follows the specification (though not
  the sample implementation) of PEP 273.  The semantics of __path__ are
  compatible with those that have been implemented in Jython since
  Jython 2.1.

- PEP 302 has been accepted.  Although it was initially developed to
  support zipimport, it offers a new, general import hook mechanism.
  Several new variables have been added to the sys module:
  sys.meta_path, sys.path_hooks, and sys.path_importer_cache; these
  make extending the import statement much more convenient than
  overriding the __import__ built-in function.  For a description of
  these, see PEP 302.

- A frame object's f_lineno attribute can now be written to from a
  trace function to change which line will execute next.  A command to
  exploit this from pdb has been added.  [SF patch #643835]

- The _codecs support module for codecs.py was turned into a built-in
  module to assure that at least the built-in codecs are available
  to the Python parser for source code decoding according to PEP 263.

- issubclass now supports a tuple as the second argument, just like
  isinstance does. ``issubclass(X, (A, B))`` is equivalent to
  ``issubclass(X, A) or issubclass(X, B)``.

- Thanks to Armin Rigo, the last known way to provoke a system crash
  by cleverly arranging for a comparison function to mutate a list
  during a list.sort() operation has been fixed.  The effect of
  attempting to mutate a list, or even to inspect its contents or
  length, while a sort is in progress, is not defined by the language.
  The C implementation of Python 2.3 attempts to detect mutations,
  and raise ValueError if one occurs, but there's no guarantee that
  all mutations will be caught, or that any will be caught across
  releases or implementations.

- Unicode file name processing for Windows (PEP 277) is implemented.
  All platforms now have an os.path.supports_unicode_filenames attribute,
  which is set to True on Windows NT/2000/XP, and False elsewhere.

- Codec error handling callbacks (PEP 293) are implemented.
  Error handling in unicode.encode or str.decode can now be customized.

- A subtle change to the semantics of the built-in function intern():
  interned strings are no longer immortal.  You must keep a reference
  to the return value intern() around to get the benefit.

- Use of 'None' as a variable, argument or attribute name now
  issues a SyntaxWarning.  In the future, None may become a keyword.

- SET_LINENO is gone.  co_lnotab is now consulted to determine when to
  call the trace function.  C code that accessed f_lineno should call
  PyCode_Addr2Line instead (f_lineno is still there, but only kept up
  to date when there is a trace function set).

- There's a new warning category, FutureWarning.  This is used to warn
  about a number of situations where the value or sign of an integer
  result will change in Python 2.4 as a result of PEP 237 (integer
  unification).  The warnings implement stage B0 mentioned in that
  PEP.  The warnings are about the following situations:

    - Octal and hex literals without 'L' prefix in the inclusive range
      [0x80000000..0xffffffff]; these are currently negative ints, but
      in Python 2.4 they will be positive longs with the same bit
      pattern.

    - Left shifts on integer values that cause the outcome to lose
      bits or have a different sign than the left operand.  To be
      precise: x<<n where this currently doesn't yield the same value
      as long(x)<<n; in Python 2.4, the outcome will be long(x)<<n.

    - Conversions from ints to string that show negative values as
      unsigned ints in the inclusive range [0x80000000..0xffffffff];
      this affects the functions hex() and oct(), and the string
      formatting codes %u, %o, %x, and %X.  In Python 2.4, these will
      show signed values (e.g. hex(-1) currently returns "0xffffffff";
      in Python 2.4 it will return "-0x1").

- The bits manipulated under the cover by sys.setcheckinterval() have
  been changed.  Both the check interval and the ticker used to be
  per-thread values.  They are now just a pair of global variables.
  In addition, the default check interval was boosted from 10 to 100
  bytecode instructions.  This may have some effect on systems that
  relied on the old default value.  In particular, in multi-threaded
  applications which try to be highly responsive, response time will
  increase by some (perhaps imperceptible) amount.

- When multiplying very large integers, a version of the so-called
  Karatsuba algorithm is now used.  This is most effective if the
  inputs have roughly the same size.  If they both have about N digits,
  Karatsuba multiplication has O(N**1.58) runtime (the exponent is
  log_base_2(3)) instead of the previous O(N**2).  Measured results may
  be better or worse than that, depending on platform quirks.  Besides
  the O() improvement in raw instruction count, the Karatsuba algorithm
  appears to have much better cache behavior on extremely large integers
  (starting in the ballpark of a million bits).  Note that this is a
  simple implementation, and there's no intent here to compete with,
  e.g., GMP.  It gives a very nice speedup when it applies, but a package
  devoted to fast large-integer arithmetic should run circles around it.

- u'%c' will now raise a ValueError in case the argument is an
  integer outside the valid range of Unicode code point ordinals.

- The tempfile module has been overhauled for enhanced security.  The
  mktemp() function is now deprecated; new, safe replacements are
  mkstemp() (for files) and mkdtemp() (for directories), and the
  higher-level functions NamedTemporaryFile() and TemporaryFile().
  Use of some global variables in this module is also deprecated; the
  new functions have keyword arguments to provide the same
  functionality.  All Lib, Tools and Demo modules that used the unsafe
  interfaces have been updated to use the safe replacements.  Thanks
  to Zack Weinberg!

- When x is an object whose class implements __mul__ and __rmul__,
  1.0*x would correctly invoke __rmul__, but 1*x would erroneously
  invoke __mul__.  This was due to the sequence-repeat code in the int
  type.  This has been fixed now.

- Previously, "str1 in str2" required str1 to be a string of length 1.
  This restriction has been relaxed to allow str1 to be a string of
  any length.  Thus "'el' in 'hello world'" returns True now.

- File objects are now their own iterators.  For a file f, iter(f) now
  returns f (unless f is closed), and f.next() is similar to
  f.readline() when EOF is not reached; however, f.next() uses a
  readahead buffer that messes up the file position, so mixing
  f.next() and f.readline() (or other methods) doesn't work right.
  Calling f.seek() drops the readahead buffer, but other operations
  don't.  It so happens that this gives a nice additional speed boost
  to "for line in file:"; the xreadlines method and corresponding
  module are now obsolete.  Thanks to Oren Tirosh!

- Encoding declarations (PEP 263, phase 1) have been implemented.  A
  comment of the form "# -*- coding: <encodingname> -*-" in the first
  or second line of a Python source file indicates the encoding.

- list.sort() has a new implementation.  While cross-platform results
  may vary, and in data-dependent ways, this is much faster on many
  kinds of partially ordered lists than the previous implementation,
  and reported to be just as fast on randomly ordered lists on
  several major platforms.  This sort is also stable (if A==B and A
  precedes B in the list at the start, A precedes B after the sort too),
  although the language definition does not guarantee stability.  A
  potential drawback is that list.sort() may require temp space of
  len(list)*2 bytes (``*4`` on a 64-bit machine).  It's therefore possible
  for list.sort() to raise MemoryError now, even if a comparison function
  does not.  See <https://bugs.python.org/issue587076> for full details.

- All standard iterators now ensure that, once StopIteration has been
  raised, all future calls to next() on the same iterator will also
  raise StopIteration.  There used to be various counterexamples to
  this behavior, which could have caused confusion or subtle program
  breakage, without any benefits.  (Note that this is still an
  iterator's responsibility; the iterator framework does not enforce
  this.)

- Ctrl+C handling on Windows has been made more consistent with
  other platforms.  KeyboardInterrupt can now reliably be caught,
  and Ctrl+C at an interactive prompt no longer terminates the
  process under NT/2k/XP (it never did under Win9x).  Ctrl+C will
  interrupt time.sleep() in the main thread, and any child processes
  created via the popen family (on win2k; we can't make win9x work
  reliably) are also interrupted (as generally happens on for Linux/Unix.)
  [SF bugs 231273, 439992 and 581232]

- sys.getwindowsversion() has been added on Windows.  This
  returns a tuple with information about the version of Windows
  currently running.

- Slices and repetitions of buffer objects now consistently return
  a string.  Formerly, strings would be returned most of the time,
  but a buffer object would be returned when the repetition count
  was one or when the slice range was all inclusive.

- Unicode objects in sys.path are no longer ignored but treated
  as directory names.

- Fixed string.startswith and string.endswith built-in methods
  so they accept negative indices.  [SF bug 493951]

- Fixed a bug with a continue inside a try block and a yield in the
  finally clause.  [SF bug 567538]

- Most built-in sequences now support "extended slices", i.e. slices
  with a third "stride" parameter.  For example, "hello world"[::-1]
  gives "dlrow olleh".

- A new warning PendingDeprecationWarning was added to provide
  direction on features which are in the process of being deprecated.
  The warning will not be printed by default.  To see the pending
  deprecations, use -Walways::PendingDeprecationWarning::
  as a command line option or warnings.filterwarnings() in code.

- Deprecated features of xrange objects have been removed as
  promised.  The start, stop, and step attributes and the tolist()
  method no longer exist.  xrange repetition and slicing have been
  removed.

- New built-in function enumerate(x), from PEP 279.  Example:
  enumerate("abc") is an iterator returning (0,"a"), (1,"b"), (2,"c").
  The argument can be an arbitrary iterable object.

- The assert statement no longer tests __debug__ at runtime.  This means
  that assert statements cannot be disabled by assigning a false value
  to __debug__.

- A method zfill() was added to str and unicode, that fills a numeric
  string to the left with zeros.  For example,
  "+123".zfill(6) -> "+00123".

- Complex numbers supported divmod() and the // and % operators, but
  these make no sense.  Since this was documented, they're being
  deprecated now.

- String and unicode methods lstrip(), rstrip() and strip() now take
  an optional argument that specifies the characters to strip.  For
  example, "Foo!!!?!?!?".rstrip("?!") -> "Foo".

- There's a new dictionary constructor (a class method of the dict
  class), dict.fromkeys(iterable, value=None).  It constructs a
  dictionary with keys taken from the iterable and all values set to a
  single value.  It can be used for building sets and for removing
  duplicates from sequences.

- Added a new dict method pop(key).  This removes and returns the
  value corresponding to key.  [SF patch #539949]

- A new built-in type, bool, has been added, as well as built-in
  names for its two values, True and False.  Comparisons and sundry
  other operations that return a truth value have been changed to
  return a bool instead.  Read PEP 285 for an explanation of why this
  is backward compatible.

- Fixed two bugs reported as SF #535905: under certain conditions,
  deallocating a deeply nested structure could cause a segfault in the
  garbage collector, due to interaction with the "trashcan" code;
  access to the current frame during destruction of a local variable
  could access a pointer to freed memory.

- The optional object allocator ("pymalloc") has been enabled by
  default.  The recommended practice for memory allocation and
  deallocation has been streamlined.  A header file is included,
  Misc/pymemcompat.h, which can be bundled with 3rd party extensions
  and lets them use the same API with Python versions from 1.5.2
  onwards.

- PyErr_Display will provide file and line information for all exceptions
  that have an attribute print_file_and_line, not just SyntaxErrors.

- The UTF-8 codec will now encode and decode Unicode surrogates
  correctly and without raising exceptions for unpaired ones.

- Universal newlines (PEP 278) is implemented.  Briefly, using 'U'
  instead of 'r' when opening a text file for reading changes the line
  ending convention so that any of '\r', '\r\n', and '\n' is
  recognized (even mixed in one file); all three are converted to
  '\n', the standard Python line end character.

- file.xreadlines() now raises a ValueError if the file is closed:
  Previously, an xreadlines object was returned which would raise
  a ValueError when the xreadlines.next() method was called.

- sys.exit() inadvertently allowed more than one argument.
  An exception will now be raised if more than one argument is used.

- Changed evaluation order of dictionary literals to conform to the
  general left to right evaluation order rule. Now {f1(): f2()} will
  evaluate f1 first.

- Fixed bug #521782: when a file was in non-blocking mode, file.read()
  could silently lose data or wrongly throw an unknown error.

- The sq_repeat, sq_inplace_repeat, sq_concat and sq_inplace_concat
  slots are now always tried after trying the corresponding nb_* slots.
  This fixes a number of minor bugs (see bug #624807).

- Fix problem with dynamic loading on 64-bit AIX (see bug #639945).

Extension modules
-----------------

- Added three operators to the operator module:
    operator.pow(a,b) which is equivalent to:  a**b.
    operator.is_(a,b) which is equivalent to:  a is b.
    operator.is_not(a,b) which is equivalent to:  a is not b.

- posix.openpty now works on all systems that have /dev/ptmx.

- A module zipimport exists to support importing code from zip
  archives.

- The new datetime module supplies classes for manipulating dates and
  times.  The basic design came from the Zope "fishbowl process", and
  favors practical commercial applications over calendar esoterica.  See

      http://www.zope.org/Members/fdrake/DateTimeWiki/FrontPage

- _tkinter now returns Tcl objects, instead of strings. Objects which
  have Python equivalents are converted to Python objects, other objects
  are wrapped. This can be configured through the wantobjects method,
  or Tkinter.wantobjects.

- The PyBSDDB wrapper around the Sleepycat Berkeley DB library has
  been added as the package bsddb.  The traditional bsddb module is
  still available in source code, but not built automatically anymore,
  and is now named bsddb185.  This supports Berkeley DB versions from
  3.0 to 4.1.  For help converting your databases from the old module (which
  probably used an obsolete version of Berkeley DB) to the new module, see
  the db2pickle.py and pickle2db.py scripts described in the Tools/Demos
  section above.

- unicodedata was updated to Unicode 3.2. It supports normalization
  and names for Hangul syllables and CJK unified ideographs.

- resource.getrlimit() now returns longs instead of ints.

- readline now dynamically adjusts its input/output stream if
  sys.stdin/stdout changes.

- The _tkinter module (and hence Tkinter) has dropped support for
  Tcl/Tk 8.0 and 8.1.  Only Tcl/Tk versions 8.2, 8.3 and 8.4 are
  supported.

- cPickle.BadPickleGet is now a class.

- The time stamps in os.stat_result are floating point numbers
  after stat_float_times has been called.

- If the size passed to mmap.mmap() is larger than the length of the
  file on non-Windows platforms, a ValueError is raised. [SF bug 585792]

- The xreadlines module is slated for obsolescence.

- The strptime function in the time module is now always available (a
  Python implementation is used when the C library doesn't define it).

- The 'new' module is no longer an extension, but a Python module that
  only exists for backwards compatibility.  Its contents are no longer
  functions but callable type objects.

- The bsddb.*open functions can now take 'None' as a filename.
  This will create a temporary in-memory bsddb that won't be
  written to disk.

- posix.getloadavg, posix.lchown, posix.killpg, posix.mknod, and
  posix.getpgid have been added where available.

- The locale module now exposes the C library's gettext interface. It
  also has a new function getpreferredencoding.

- A security hole ("double free") was found in zlib-1.1.3, a popular
  third party compression library used by some Python modules.  The
  hole was quickly plugged in zlib-1.1.4, and the Windows build of
  Python now ships with zlib-1.1.4.

- pwd, grp, and resource return enhanced tuples now, with symbolic
  field names.

- array.array is now a type object. A new format character
  'u' indicates Py_UNICODE arrays. For those, .tounicode and
  .fromunicode methods are available. Arrays now support __iadd__
  and __imul__.

- dl now builds on every system that has dlfcn.h.  Failure in case
  of sizeof(int)!=sizeof(long)!=sizeof(void*) is delayed until dl.open
  is called.

- The sys module acquired a new attribute, api_version, which evaluates
  to the value of the PYTHON_API_VERSION macro with which the
  interpreter was compiled.

- Fixed bug #470582: sre module would return a tuple (None, 'a', 'ab')
  when applying the regular expression '^((a)c)?(ab)$' on 'ab'. It now
  returns (None, None, 'ab'), as expected. Also fixed handling of
  lastindex/lastgroup match attributes in similar cases. For example,
  when running the expression r'(a)(b)?b' over 'ab', lastindex must be
  1, not 2.

- Fixed bug #581080: sre scanner was not checking the buffer limit
  before increasing the current pointer. This was creating an infinite
  loop in the search function, once the pointer exceeded the buffer
  limit.

- The os.fdopen function now enforces a file mode starting with the
  letter 'r', 'w' or 'a', otherwise a ValueError is raised. This fixes
  bug #623464.

- The linuxaudiodev module is now deprecated; it is being replaced by
  ossaudiodev.  The interface has been extended to cover a lot more of
  OSS (see www.opensound.com), including most DSP ioctls and the
  OSS mixer API.  Documentation forthcoming in 2.3a2.

Library
-------

- imaplib.py now supports SSL (Tino Lange and Piers Lauder).

- Freeze's modulefinder.py has been moved to the standard library;
  slightly improved so it will issue less false missing submodule
  reports (see sf path #643711 for details).  Documentation will follow
  with Python 2.3a2.

- os.path exposes getctime.

- unittest.py now has two additional methods called assertAlmostEqual()
  and failIfAlmostEqual().  They implement an approximate comparison
  by rounding the difference between the two arguments and comparing
  the result to zero.  Approximate comparison is essential for
  unit tests of floating point results.

- calendar.py now depends on the new datetime module rather than
  the time module.  As a result, the range of allowable dates
  has been increased.

- pdb has a new 'j(ump)' command to select the next line to be
  executed.

- The distutils created windows installers now can run a
  postinstallation script.

- doctest.testmod can now be called without argument, which means to
  test the current module.

- When canceling a server that implemented threading with a keyboard
  interrupt, the server would shut down but not terminate (waiting on
  client threads). A new member variable, daemon_threads, was added to
  the ThreadingMixIn class in SocketServer.py to make it explicit that
  this behavior needs to be controlled.

- A new module, optparse, provides a fancy alternative to getopt for
  command line parsing.  It is a slightly modified version of Greg
  Ward's Optik package.

- UserDict.py now defines a DictMixin class which defines all dictionary
  methods for classes that already have a minimum mapping interface.
  This greatly simplifies writing classes that need to be substitutable
  for dictionaries (such as the shelve module).

- shelve.py now subclasses from UserDict.DictMixin.  Now shelve supports
  all dictionary methods.  This eases the transition to persistent
  storage for scripts originally written with dictionaries in mind.

- shelve.open and the various classes in shelve.py now accept an optional
  binary flag, which defaults to False.  If True, the values stored in the
  shelf are binary pickles.

- A new package, logging, implements the logging API defined by PEP
  282.  The code is written by Vinay Sajip.

- StreamReader, StreamReaderWriter and StreamRecoder in the codecs
  modules are iterators now.

- gzip.py now handles files exceeding 2GB.  Files over 4GB also work
  now (provided the OS supports it, and Python is configured with large
  file support), but in that case the underlying gzip file format can
  record only the least-significant 32 bits of the file size, so that
  some tools working with gzipped files may report an incorrect file
  size.

- xml.sax.saxutils.unescape has been added, to replace entity references
  with their entity value.

- Queue.Queue.{put,get} now support an optional timeout argument.

- Various features of Tk 8.4 are exposed in Tkinter.py. The multiple
  option of tkFileDialog is exposed as function askopenfile{,name}s.

- Various configure methods of Tkinter have been stream-lined, so that
  tag_configure, image_configure, window_configure now return a
  dictionary when invoked with no argument.

- Importing the readline module now no longer has the side effect of
  calling setlocale(LC_CTYPE, "").  The initial "C" locale, or
  whatever locale is explicitly set by the user, is preserved.  If you
  want repr() of 8-bit strings in your preferred encoding to preserve
  all printable characters of that encoding, you have to add the
  following code to your $PYTHONSTARTUP file or to your application's
  main():

    import locale
    locale.setlocale(locale.LC_CTYPE, "")

- shutil.move was added. shutil.copytree now reports errors as an
  exception at the end, instead of printing error messages.

- Encoding name normalization was generalized to not only
  replace hyphens with underscores, but also all other non-alphanumeric
  characters (with the exception of the dot which is used for Python
  package names during lookup). The aliases.py mapping was updated
  to the new standard.

- mimetypes has two new functions: guess_all_extensions() which
  returns a list of all known extensions for a mime type, and
  add_type() which adds one mapping between a mime type and
  an extension to the database.

- New module: sets, defines the class Set that implements a mutable
  set type using the keys of a dict to represent the set.  There's
  also a class ImmutableSet which is useful when you need sets of sets
  or when you need to use sets as dict keys, and a class BaseSet which
  is the base class of the two.

- Added random.sample(population,k) for random sampling without replacement.
  Returns a k length list of unique elements chosen from the population.

- random.randrange(-sys.maxint-1, sys.maxint) no longer raises
  OverflowError.  That is, it now accepts any combination of 'start'
  and 'stop' arguments so long as each is in the range of Python's
  bounded integers.

- Thanks to Raymond Hettinger, random.random() now uses a new core
  generator.  The Mersenne Twister algorithm is implemented in C,
  threadsafe, faster than the previous generator, has an astronomically
  large period (2**19937-1), creates random floats to full 53-bit
  precision, and may be the most widely tested random number generator
  in existence.

  The random.jumpahead(n) method has different semantics for the new
  generator.  Instead of jumping n steps ahead, it uses n and the
  existing state to create a new state.  This means that jumpahead()
  continues to support multi-threaded code needing generators of
  non-overlapping sequences.  However, it will break code which relies
  on jumpahead moving a specific number of steps forward.

  The attributes random.whseed and random.__whseed have no meaning for
  the new generator.  Code using these attributes should switch to a
  new class, random.WichmannHill which is provided for backward
  compatibility and to make an alternate generator available.

- New "algorithms" module: heapq, implements a heap queue.  Thanks to
  Kevin O'Connor for the code and François Pinard for an entertaining
  write-up explaining the theory and practical uses of heaps.

- New encoding for the Palm OS character set: palmos.

- binascii.crc32() and the zipfile module had problems on some 64-bit
  platforms.  These have been fixed.  On a platform with 8-byte C longs,
  crc32() now returns a signed-extended 4-byte result, so that its value
  as a Python int is equal to the value computed a 32-bit platform.

- xml.dom.minidom.toxml and toprettyxml now take an optional encoding
  argument.

- Some fixes in the copy module: when an object is copied through its
  __reduce__ method, there was no check for a __setstate__ method on
  the result [SF patch 565085]; deepcopy should treat instances of
  custom metaclasses the same way it treats instances of type 'type'
  [SF patch 560794].

- Sockets now support timeout mode.  After s.settimeout(T), where T is
  a float expressing seconds, subsequent operations raise an exception
  if they cannot be completed within T seconds.  To disable timeout
  mode, use s.settimeout(None).  There's also a module function,
  socket.setdefaulttimeout(T), which sets the default for all sockets
  created henceforth.

- getopt.gnu_getopt was added.  This supports GNU-style option
  processing, where options can be mixed with non-option arguments.

- Stop using strings for exceptions.  String objects used for
  exceptions are now classes deriving from Exception.  The objects
  changed were: Tkinter.TclError, bdb.BdbQuit, macpath.norm_error,
  tabnanny.NannyNag, and xdrlib.Error.

- Constants BOM_UTF8, BOM_UTF16, BOM_UTF16_LE, BOM_UTF16_BE,
  BOM_UTF32, BOM_UTF32_LE and BOM_UTF32_BE that represent the Byte
  Order Mark in UTF-8, UTF-16 and UTF-32 encodings for little and
  big endian systems were added to the codecs module. The old names
  BOM32_* and BOM64_* were off by a factor of 2.

- Added conversion functions math.degrees() and math.radians().

- math.log() now takes an optional argument:  math.log(x[, base]).

- ftplib.retrlines() now tests for callback is None rather than testing
  for False.  Was causing an error when given a callback object which
  was callable but also returned len() as zero.  The change may
  create new breakage if the caller relied on the undocumented behavior
  and called with callback set to [] or some other False value not
  identical to None.

- random.gauss() uses a piece of hidden state used by nothing else,
  and the .seed() and .whseed() methods failed to reset it.  In other
  words, setting the seed didn't completely determine the sequence of
  results produced by random.gauss().  It does now.  Programs repeatedly
  mixing calls to a seed method with calls to gauss() may see different
  results now.

- The pickle.Pickler class grew a clear_memo() method to mimic that
  provided by cPickle.Pickler.

- difflib's SequenceMatcher class now does a dynamic analysis of
  which elements are so frequent as to constitute noise.  For
  comparing files as sequences of lines, this generally works better
  than the IS_LINE_JUNK function, and function ndiff's linejunk
  argument defaults to None now as a result.  A happy benefit is
  that SequenceMatcher may run much faster now when applied
  to large files with many duplicate lines (for example, C program
  text with lots of repeated "}" and "return NULL;" lines).

- New Text.dump() method in Tkinter module.

- New distutils commands for building packagers were added to
  support pkgtool on Solaris and swinstall on HP-UX.

- distutils now has a new abstract binary packager base class
  command/bdist_packager, which simplifies writing packagers.
  This will hopefully provide the missing bits to encourage
  people to submit more packagers, e.g. for Debian, FreeBSD
  and other systems.

- The UTF-16, -LE and -BE stream readers now raise a
  NotImplementedError for all calls to .readline(). Previously, they
  used to just produce garbage or fail with an encoding error --
  UTF-16 is a 2-byte encoding and the C lib's line reading APIs don't
  work well with these.

- compileall now supports quiet operation.

- The BaseHTTPServer now implements optional HTTP/1.1 persistent
  connections.

- socket module: the SSL support was broken out of the main
  _socket module C helper and placed into a new _ssl helper
  which now gets imported by socket.py if available and working.

- encodings package: added aliases for all supported IANA character
  sets

- ftplib: to safeguard the user's privacy, anonymous login will use
  "anonymous@" as default password, rather than the real user and host
  name.

- webbrowser: tightened up the command passed to os.system() so that
  arbitrary shell code can't be executed because a bogus URL was
  passed in.

- gettext.translation has an optional fallback argument, and
  gettext.find an optional all argument. Translations will now fallback
  on a per-message basis. The module supports plural forms, by means
  of gettext.[d]ngettext and Translation.[u]ngettext.

- distutils bdist commands now offer a --skip-build option.

- warnings.warn now accepts a Warning instance as first argument.

- The xml.sax.expatreader.ExpatParser class will no longer create
  circular references by using itself as the locator that gets passed
  to the content handler implementation.  [SF bug #535474]

- The email.Parser.Parser class now properly parses strings regardless
  of their line endings, which can be any of \r, \n, or \r\n (CR, LF,
  or CRLF).  Also, the Header class's constructor default arguments
  has changed slightly so that an explicit maxlinelen value is always
  honored, and so unicode conversion error handling can be specified.

- distutils' build_ext command now links C++ extensions with the C++
  compiler available in the Makefile or CXX environment variable, if
  running under \*nix.

- New module bz2: provides a comprehensive interface for the bz2 compression
  library.  It implements a complete file interface, one-shot (de)compression
  functions, and types for sequential (de)compression.

- New pdb command 'pp' which is like 'p' except that it pretty-prints
  the value of its expression argument.

- Now bdist_rpm distutils command understands a verify_script option in
  the config file, including the contents of the referred filename in
  the "%verifyscript" section of the rpm spec file.

- Fixed bug #495695: webbrowser module would run graphic browsers in a
  unix environment even if DISPLAY was not set. Also, support for
  skipstone browser was included.

- Fixed bug #636769: rexec would run unallowed code if subclasses of
  strings were used as parameters for certain functions.

Tools/Demos
-----------

- pygettext.py now supports globbing on Windows, and accepts module
  names in addition to accepting file names.

- The SGI demos (Demo/sgi) have been removed.  Nobody thought they
  were interesting any more.  (The SGI library modules and extensions
  are still there; it is believed that at least some of these are
  still used and useful.)

- IDLE supports the new encoding declarations (PEP 263); it can also
  deal with legacy 8-bit files if they use the locale's encoding. It
  allows non-ASCII strings in the interactive shell and executes them
  in the locale's encoding.

- freeze.py now produces binaries which can import shared modules,
  unlike before when this failed due to missing symbol exports in
  the generated binary.

Build
-----

- On Unix, IDLE is now installed automatically.

- The fpectl module is not built by default; it's dangerous or useless
  except in the hands of experts.

- The public Python C API will generally be declared using PyAPI_FUNC
  and PyAPI_DATA macros, while Python extension module init functions
  will be declared with PyMODINIT_FUNC.  DL_EXPORT/DL_IMPORT macros
  are deprecated.

- A bug was fixed that could cause COUNT_ALLOCS builds to segfault, or
  get into infinite loops, when a new-style class got garbage-collected.
  Unfortunately, to avoid this, the way COUNT_ALLOCS works requires
  that new-style classes be immortal in COUNT_ALLOCS builds.  Note that
  COUNT_ALLOCS is not enabled by default, in either release or debug
  builds, and that new-style classes are immortal only in COUNT_ALLOCS
  builds.

- Compiling out the cyclic garbage collector is no longer an option.
  The old symbol WITH_CYCLE_GC is now ignored, and Python.h arranges
  that it's always defined (for the benefit of any extension modules
  that may be conditionalizing on it).  A bonus is that any extension
  type participating in cyclic gc can choose to participate in the
  Py_TRASHCAN mechanism now too; in the absence of cyclic gc, this used
  to require editing the core to teach the trashcan mechanism about the
  new type.

- According to Annex F of the current C standard,

    The Standard C macro HUGE_VAL and its float and long double analogs,
    HUGE_VALF and HUGE_VALL, expand to expressions whose values are
    positive infinities.

  Python only uses the double HUGE_VAL, and only to #define its own symbol
  Py_HUGE_VAL.  Some platforms have incorrect definitions for HUGE_VAL.
  pyport.h used to try to worm around that, but the workarounds triggered
  other bugs on other platforms, so we gave up.  If your platform defines
  HUGE_VAL incorrectly, you'll need to #define Py_HUGE_VAL to something
  that works on your platform.  The only instance of this I'm sure about
  is on an unknown subset of Cray systems, described here:

  http://www.cray.com/swpubs/manuals/SN-2194_2.0/html-SN-2194_2.0/x3138.htm

  Presumably 2.3a1 breaks such systems.  If anyone uses such a system, help!

- The configure option --without-doc-strings can be used to remove the
  doc strings from the built-in functions and modules; this reduces the
  size of the executable.

- The universal newlines option (PEP 278) is on by default.  On Unix
  it can be disabled by passing --without-universal-newlines to the
  configure script.  On other platforms, remove
  WITH_UNIVERSAL_NEWLINES from pyconfig.h.

- On Unix, a shared libpython2.3.so can be created with --enable-shared.

- All uses of the CACHE_HASH, INTERN_STRINGS, and DONT_SHARE_SHORT_STRINGS
  preprocessor symbols were eliminated.  The internal decisions they
  controlled stopped being experimental long ago.

- The tools used to build the documentation now work under Cygwin as
  well as Unix.

- The bsddb and dbm module builds have been changed to try and avoid version
  skew problems and disable linkage with Berkeley DB 1.85 unless the
  installer knows what s/he's doing.  See the section on building these
  modules in the README file for details.

C API
-----

- PyNumber_Check() now returns true for string and unicode objects.
  This is a result of these types having a partially defined
  tp_as_number slot.  (This is not a feature, but an indication that
  PyNumber_Check() is not very useful to determine numeric behavior.
  It may be deprecated.)

- The string object's layout has changed: the pointer member
  ob_sinterned has been replaced by an int member ob_sstate.  On some
  platforms (e.g. most 64-bit systems) this may change the offset of
  the ob_sval member, so as a precaution the API_VERSION has been
  incremented.  The apparently unused feature of "indirect interned
  strings", supported by the ob_sinterned member, is gone.  Interned
  strings are now usually mortal; there is a new API,
  PyString_InternImmortal() that creates immortal interned strings.
  (The ob_sstate member can only take three values; however, while
  making it a char saves a few bytes per string object on average, in
  it also slowed things down a bit because ob_sval was no longer
  aligned.)

- The Py_InitModule*() functions now accept NULL for the 'methods'
  argument.  Modules without global functions are becoming more common
  now that factories can be types rather than functions.

- New C API PyUnicode_FromOrdinal() which exposes unichr() at C
  level.

- New functions PyErr_SetExcFromWindowsErr() and
  PyErr_SetExcFromWindowsErrWithFilename(). Similar to
  PyErr_SetFromWindowsErrWithFilename() and
  PyErr_SetFromWindowsErr(), but they allow specifying
  the exception type to raise. Available on Windows.

- Py_FatalError() is now declared as taking a const char* argument.  It
  was previously declared without const.  This should not affect working
  code.

- Added new macro PySequence_ITEM(o, i) that directly calls
  sq_item without rechecking that o is a sequence and without
  adjusting for negative indices.

- PyRange_New() now raises ValueError if the fourth argument is not 1.
  This is part of the removal of deprecated features of the xrange
  object.

- PyNumber_Coerce() and PyNumber_CoerceEx() now also invoke the type's
  coercion if both arguments have the same type but this type has the
  CHECKTYPES flag set.  This is to better support proxies.

- The type of tp_free has been changed from "``void (*)(PyObject *)``" to
  "``void (*)(void *)``".

- PyObject_Del, PyObject_GC_Del are now functions instead of macros.

- A type can now inherit its metatype from its base type.  Previously,
  when PyType_Ready() was called, if ob_type was found to be NULL, it
  was always set to &PyType_Type; now it is set to base->ob_type,
  where base is tp_base, defaulting to &PyObject_Type.

- PyType_Ready() accidentally did not inherit tp_is_gc; now it does.

- The PyCore_* family of APIs have been removed.

- The "u#" parser marker will now pass through Unicode objects as-is
  without going through the buffer API.

- The enumerators of cmp_op have been renamed to use the prefix ``PyCmp_``.

- An old #define of ANY as void has been removed from pyport.h.  This
  hasn't been used since Python's pre-ANSI days, and the #define has
  been marked as obsolete since then.  SF bug 495548 says it created
  conflicts with other packages, so keeping it around wasn't harmless.

- Because Python's magic number scheme broke on January 1st, we decided
  to stop Python development.  Thanks for all the fish!

- Some of us don't like fish, so we changed Python's magic number
  scheme to a new one. See Python/import.c for details.

New platforms
-------------

- OpenVMS is now supported.

- AtheOS is now supported.

- the EMX runtime environment on OS/2 is now supported.

- GNU/Hurd is now supported.

Tests
-----

- The regrtest.py script's -u option now provides a way to say "allow
  all resources except this one."  For example, to allow everything
  except bsddb, give the option '-uall,-bsddb'.

Windows
-------

- The Windows distribution now ships with version 4.0.14 of the
  Sleepycat Berkeley database library.  This should be a huge
  improvement over the previous Berkeley DB 1.85, which had many
  bugs.
  XXX What are the licensing issues here?
  XXX If a user has a database created with a previous version of
  XXX     Python, what must they do to convert it?
  XXX I'm still not sure how to link this thing (see PCbuild/readme.txt).
  XXX The version # is likely to change before 2.3a1.

- The Windows distribution now ships with a Secure Sockets Library (SLL)
   module (_ssl.pyd)

- The Windows distribution now ships with Tcl/Tk version 8.4.1 (it
  previously shipped with Tcl/Tk 8.3.2).

- When Python is built under a Microsoft compiler, sys.version now
  includes the compiler version number (_MSC_VER).  For example, under
  MSVC 6, sys.version contains the substring "MSC v.1200 ".  1200 is
  the value of _MSC_VER under MSVC 6.

- Sometimes the uninstall executable (UNWISE.EXE) vanishes.  One cause
  of that has been fixed in the installer (disabled Wise's "delete in-
  use files" uninstall option).

- Fixed a bug in urllib's proxy handling in Windows.  [SF bug #503031]

- The installer now installs Start menu shortcuts under (the local
  equivalent of) "All Users" when doing an Admin install.

- file.truncate([newsize]) now works on Windows for all newsize values.
  It used to fail if newsize didn't fit in 32 bits, reflecting a
  limitation of MS _chsize (which is no longer used).

- os.waitpid() is now implemented for Windows, and can be used to block
  until a specified process exits.  This is similar to, but not exactly
  the same as, os.waitpid() on POSIX systems.  If you're waiting for
  a specific process whose pid was obtained from one of the spawn()
  functions, the same Python os.waitpid() code works across platforms.
  See the docs for details.  The docs were changed to clarify that
  spawn functions return, and waitpid requires, a process handle on
  Windows (not the same thing as a Windows process id).

- New tempfile.TemporaryFile implementation for Windows:  this doesn't
  need a TemporaryFileWrapper wrapper anymore, and should be immune
  to a nasty problem:  before 2.3, if you got a temp file on Windows, it
  got wrapped in an object whose close() method first closed the
  underlying file, then deleted the file.  This usually worked fine.
  However, the spawn family of functions on Windows create (at a low C
  level) the same set of open files in the spawned process Q as were
  open in the spawning process P.  If a temp file f was among them, then
  doing f.close() in P first closed P's C-level file handle on f, but Q's
  C-level file handle on f remained open, so the attempt in P to delete f
  blew up with a "Permission denied" error (Windows doesn't allow
  deleting open files).  This was surprising, subtle, and difficult to
  work around.

- The os module now exports all the symbolic constants usable with the
  low-level os.open() on Windows:  the new constants in 2.3 are
  O_NOINHERIT, O_SHORT_LIVED, O_TEMPORARY, O_RANDOM and O_SEQUENTIAL.
  The others were also available in 2.2:  O_APPEND, O_BINARY, O_CREAT,
  O_EXCL, O_RDONLY, O_RDWR, O_TEXT, O_TRUNC and O_WRONLY.  Contrary
  to Microsoft docs, O_SHORT_LIVED does not seem to imply O_TEMPORARY
  (so specify both if you want both; note that neither is useful unless
  specified with O_CREAT too).

Mac
----

- Mac/Relnotes is gone, the release notes are now here.

- Python (the OSX-only, unix-based version, not the OS9-compatible CFM
  version) now fully supports unicode strings as arguments to various file
  system calls, eg. open(), file(), os.stat() and os.listdir().

- The current naming convention for Python on the Macintosh is that MacPython
  refers to the unix-based OSX-only version, and MacPython-OS9 refers to the
  CFM-based version that runs on both OS9 and OSX.

- All MacPython-OS9 functionality is now available in an OSX unix build,
  including the Carbon modules, the IDE, OSA support, etc. A lot of this
  will only work correctly in a framework build, though, because you cannot
  talk to the window manager unless your application is run from a .app
  bundle. There is a command line tool "pythonw" that runs your script
  with an interpreter living in such a .app bundle, this interpreter should
  be used to run any Python script using the window manager (including
  Tkinter or wxPython scripts).

- Most of Mac/Lib has moved to Lib/plat-mac, which is again used both in
  MacPython-OSX and MacPython-OS9. The only modules remaining in Mac/Lib
  are specifically for MacPython-OS9 (CFM support, preference resources, etc).

- A new utility PythonLauncher will start a Python interpreter when a .py or
  .pyw script is double-clicked in the Finder. By default .py scripts are
  run with a normal Python interpreter in a Terminal window and .pyw
  files are run with a window-aware pythonw interpreter without a Terminal
  window, but all this can be customized.

- MacPython-OS9 is now Carbon-only, so it runs on Mac OS 9 or Mac OS X and
  possibly on Mac OS 8.6 with the right CarbonLib installed, but not on earlier
  releases.

- Many tools such as BuildApplet.py and gensuitemodule.py now support a command
  line interface too.

- All the Carbon classes are now PEP253 compliant, meaning that you can
  subclass them from Python. Most of the attributes have gone, you should
  now use the accessor function call API, which is also what Apple's
  documentation uses. Some attributes such as grafport.visRgn are still
  available for convenience.

- New Carbon modules File (implementing the APIs in Files.h and Aliases.h)
  and Folder (APIs from Folders.h). The old macfs built-in module is
  gone, and replaced by a Python wrapper around the new modules.

- Pathname handling should now be fully consistent: MacPython-OSX always uses
  unix pathnames and MacPython-OS9 always uses colon-separated Mac pathnames
  (also when running on Mac OS X).

- New Carbon modules Help and AH give access to the Carbon Help Manager.
  There are hooks in the IDE to allow accessing the Python documentation
  (and Apple's Carbon and Cocoa documentation) through the Help Viewer.
  See Mac/OSX/README for converting the Python documentation to a
  Help Viewer compatible form and installing it.

- OSA support has been redesigned and the generated Python classes now
  mirror the inheritance defined by the underlying OSA classes.

- MacPython no longer maps both \r and \n to \n on input for any text file.
  This feature has been replaced by universal newline support (PEP278).

- The default encoding for Python sourcefiles in MacPython-OS9 is no longer
  mac-roman (or whatever your local Mac encoding was) but "ascii", like on
  other platforms. If you really need sourcefiles with Mac characters in them
  you can change this in site.py.


What's New in Python 2.2 final?
===============================

*Release date: 21-Dec-2001*

Type/class unification and new-style classes
--------------------------------------------

- pickle.py, cPickle: allow pickling instances of new-style classes
  with a custom metaclass.

Core and builtins
-----------------

- weakref proxy object: when comparing, unwrap both arguments if both
  are proxies.

Extension modules
-----------------

- binascii.b2a_base64(): fix a potential buffer overrun when encoding
  very short strings.

- cPickle: the obscure "fast" mode was suspected of causing stack
  overflows on the Mac.  Hopefully fixed this by setting the recursion
  limit much smaller.  If the limit is too low (it only affects
  performance), you can change it by defining PY_CPICKLE_FAST_LIMIT
  when compiling cPickle.c (or in pyconfig.h).

Library
-------

- dumbdbm.py: fixed a dumb old bug (the file didn't get synched at
  close or delete time).

- rfc822.py: fixed a bug where the address '<>' was converted to None
  instead of an empty string (also fixes the email.Utils module).

- xmlrpclib.py: version 1.0.0; uses precision for doubles.

- test suite: the pickle and cPickle tests were not executing any code
  when run from the standard regression test.

Tools/Demos
-----------

Build
-----

C API
-----

New platforms
-------------

Tests
-----

Windows
-------

- distutils package: fixed broken Windows installers (bdist_wininst).

- tempfile.py: prevent mysterious warnings when TemporaryFileWrapper
  instances are deleted at process exit time.

- socket.py: prevent mysterious warnings when socket instances are
  deleted at process exit time.

- posixmodule.c: fix a Windows crash with stat() of a filename ending
  in backslash.

Mac
----

- The Carbon toolbox modules have been upgraded to Universal Headers
  3.4, and experimental CoreGraphics and CarbonEvents modules have
  been added.  All only for framework-enabled MacOSX.


What's New in Python 2.2c1?
===========================

*Release date: 14-Dec-2001*

Type/class unification and new-style classes
--------------------------------------------

- Guido's tutorial introduction to the new type/class features has
  been extensively updated.  See

      http://www.python.org/2.2/descrintro.html

  That remains the primary documentation in this area.

- Fixed a leak: instance variables declared with __slots__ were never
  deleted!

- The "delete attribute" method of descriptor objects is called
  __delete__, not __del__.  In previous releases, it was mistakenly
  called __del__, which created an unfortunate overloading condition
  with finalizers.  (The "get attribute" and "set attribute" methods
  are still called __get__ and __set__, respectively.)

- Some subtle issues with the super built-in were fixed:

  (a) When super itself is subclassed, its __get__ method would still
      return an instance of the base class (i.e., of super).

  (b) super(C, C()).__class__ would return C rather than super.  This
      is confusing.  To fix this, I decided to change the semantics of
      super so that it only applies to code attributes, not to data
      attributes.  After all, overriding data attributes is not
      supported anyway.

  (c) The __get__ method didn't check whether the argument was an
      instance of the type used in creation of the super instance.

- Previously, hash() of an instance of a subclass of a mutable type
  (list or dictionary) would return some value, rather than raising
  TypeError.  This has been fixed.  Also, directly calling
  dict.__hash__ and list.__hash__ now raises the same TypeError
  (previously, these were the same as object.__hash__).

- New-style objects now support deleting their __dict__.  This is for
  all intents and purposes equivalent to assigning a brand new empty
  dictionary, but saves space if the object is not used further.

Core and builtins
-----------------

- -Qnew now works as documented in PEP 238:  when -Qnew is passed on
  the command line, all occurrences of "/" use true division instead
  of classic division.  See the PEP for details.  Note that "all"
  means all instances in library and 3rd-party modules, as well as in
  your own code.  As the PEP says, -Qnew is intended for use only in
  educational environments with control over the libraries in use.
  Note that test_coercion.py in the standard Python test suite fails
  under -Qnew; this is expected, and won't be repaired until true
  division becomes the default (in the meantime, test_coercion is
  testing the current rules).

- complex() now only allows the first argument to be a string
  argument, and raises TypeError if either the second arg is a string
  or if the second arg is specified when the first is a string.

Extension modules
-----------------

- gc.get_referents was renamed to gc.get_referrers.

Library
-------

- Functions in the os.spawn() family now release the global interpreter
  lock around calling the platform spawn.  They should always have done
  this, but did not before 2.2c1.  Multithreaded programs calling
  an os.spawn function with P_WAIT will no longer block all Python threads
  until the spawned program completes.  It's possible that some programs
  relies on blocking, although more likely by accident than by design.

- webbrowser defaults to netscape.exe on OS/2 now.

- Tix.ResizeHandle exposes detach_widget, hide, and show.

- The charset alias windows_1252 has been added.

- types.StringTypes is a tuple containing the defined string types;
  usually this will be (str, unicode), but if Python was compiled
  without Unicode support it will be just (str,).

- The pulldom and minidom modules were synchronized to PyXML.

Tools/Demos
-----------

- A new script called Tools/scripts/google.py was added, which fires
  off a search on Google.

Build
-----

- Note that release builds of Python should arrange to define the
  preprocessor symbol NDEBUG on the command line (or equivalent).
  In the 2.2 pre-release series we tried to define this by magic in
  Python.h instead, but it proved to cause problems for extension
  authors.  The Unix, Windows and Mac builds now all define NDEBUG in
  release builds via cmdline (or equivalent) instead.  Ports to
  other platforms should do likewise.

- It is no longer necessary to use --with-suffix when building on a
  case-insensitive file system (such as Mac OS X HFS+). In the build
  directory an extension is used, but not in the installed python.

C API
-----

- New function PyDict_MergeFromSeq2() exposes the built-in dict
  constructor's logic for updating a dictionary from an iterable object
  producing key-value pairs.

- PyArg_ParseTupleAndKeywords() requires that the number of entries in
  the keyword list equal the number of argument specifiers.  This
  wasn't checked correctly, and PyArg_ParseTupleAndKeywords could even
  dump core in some bad cases.  This has been repaired.  As a result,
  PyArg_ParseTupleAndKeywords may raise RuntimeError in bad cases that
  previously went unchallenged.

New platforms
-------------

Tests
-----

Windows
-------

Mac
----

- In unix-Python on Mac OS X (and darwin) sys.platform is now "darwin",
  without any trailing digits.

- Changed logic for finding python home in Mac OS X framework Pythons.
  Now sys.executable points to the executable again, in stead of to
  the shared library. The latter is used only for locating the python
  home.


What's New in Python 2.2b2?
===========================

*Release date: 16-Nov-2001*

Type/class unification and new-style classes
--------------------------------------------

- Multiple inheritance mixing new-style and classic classes in the
  list of base classes is now allowed, so this works now:

      class Classic: pass
      class Mixed(Classic, object): pass

  The MRO (method resolution order) for each base class is respected
  according to its kind, but the MRO for the derived class is computed
  using new-style MRO rules if any base class is a new-style class.
  This needs to be documented.

- The new built-in dictionary() constructor, and dictionary type, have
  been renamed to dict.  This reflects a decade of common usage.

- dict() now accepts an iterable object producing 2-sequences.  For
  example, dict(d.items()) == d for any dictionary d.  The argument,
  and the elements of the argument, can be any iterable objects.

- New-style classes can now have a __del__ method, which is called
  when the instance is deleted (just like for classic classes).

- Assignment to object.__dict__ is now possible, for objects that are
  instances of new-style classes that have a __dict__ (unless the base
  class forbids it).

- Methods of built-in types now properly check for keyword arguments
  (formerly these were silently ignored).  The only built-in methods
  that take keyword arguments are __call__, __init__ and __new__.

- The socket function has been converted to a type; see below.

Core and builtins
-----------------

- Assignment to __debug__ raises SyntaxError at compile-time.  This
  was promised when 2.1c1 was released as "What's New in Python 2.1c1"
  (see below) says.

- Clarified the error messages for unsupported operands to an operator
  (like 1 + '').

Extension modules
-----------------

- mmap has a new keyword argument, "access", allowing a uniform way for
  both Windows and Unix users to create read-only, write-through and
  copy-on-write memory mappings.  This was previously possible only on
  Unix.  A new keyword argument was required to support this in a
  uniform way because the mmap() signatures had diverged across
  platforms.  Thanks to Jay T Miller for repairing this!

- By default, the gc.garbage list now contains only those instances in
  unreachable cycles that have __del__ methods; in 2.1 it contained all
  instances in unreachable cycles.  "Instances" here has been generalized
  to include instances of both new-style and old-style classes.

- The socket module defines a new method for socket objects,
  sendall().  This is like send() but may make multiple calls to
  send() until all data has been sent.  Also, the socket function has
  been converted to a subclassable type, like list and tuple (etc.)
  before it; socket and SocketType are now the same thing.

- Various bugfixes to the curses module.  There is now a test suite
  for the curses module (you have to run it manually).

- binascii.b2a_base64 no longer places an arbitrary restriction of 57
  bytes on its input.

Library
-------

- tkFileDialog exposes a Directory class and askdirectory
  convenience function.

- Symbolic group names in regular expressions must be unique.  For
  example, the regexp r'(?P<abc>)(?P<abc>)' is not allowed, because a
  single name can't mean both "group 1" and "group 2" simultaneously.
  Python 2.2 detects this error at regexp compilation time;
  previously, the error went undetected, and results were
  unpredictable.  Also in sre, the pattern.split(), pattern.sub(), and
  pattern.subn() methods have been rewritten in C.  Also, an
  experimental function/method finditer() has been added, which works
  like findall() but returns an iterator.

- Tix exposes more commands through the classes DirSelectBox,
  DirSelectDialog, ListNoteBook, Meter, CheckList, and the
  methods tix_addbitmapdir, tix_cget, tix_configure, tix_filedialog,
  tix_getbitmap, tix_getimage, tix_option_get, and tix_resetoptions.

- Traceback objects are now scanned by cyclic garbage collection, so
  cycles created by casual use of sys.exc_info() no longer cause
  permanent memory leaks (provided garbage collection is enabled).

- mimetypes.py has optional support for non-standard, but commonly
  found types.  guess_type() and guess_extension() now accept an
  optional 'strict' flag, defaulting to true, which controls whether
  recognize non-standard types or not.  A few non-standard types we
  know about have been added.  Also, when run as a script, there are
  new -l and -e options.

- statcache is now deprecated.

- email.Utils.formatdate() now produces the preferred RFC 2822 style
  dates with numeric timezones (it used to produce obsolete dates
  hard coded to "GMT" timezone).  An optional 'localtime' flag is
  added to produce dates in the local timezone, with daylight savings
  time properly taken into account.

- In pickle and cPickle, instead of masking errors in load() by
  transforming them into SystemError, we let the original exception
  propagate out.  Also, implement support for __safe_for_unpickling__
  in pickle, as it already was supported in cPickle.

Tools/Demos
-----------

Build
-----

- The dbm module is built using libdb1 if available.  The bsddb module
  is built with libdb3 if available.

- Misc/Makefile.pre.in has been removed by BDFL pronouncement.

C API
-----

- New function PySequence_Fast_GET_SIZE() returns the size of a non-
  NULL result from PySequence_Fast(), more quickly than calling
  PySequence_Size().

- New argument unpacking function PyArg_UnpackTuple() added.

- New functions PyObject_CallFunctionObjArgs() and
  PyObject_CallMethodObjArgs() have been added to make it more
  convenient and efficient to call functions and methods from C.

- PyArg_ParseTupleAndKeywords() no longer masks errors, so it's
  possible that this will propagate errors it didn't before.

- New function PyObject_CheckReadBuffer(), which returns true if its
  argument supports the single-segment readable buffer interface.

New platforms
-------------

- We've finally confirmed that this release builds on HP-UX 11.00,
  *with* threads, and passes the test suite.

- Thanks to a series of patches from Michael Muller, Python may build
  again under OS/2 Visual Age C++.

- Updated RISCOS port by Dietmar Schwertberger.

Tests
-----

- Added a test script for the curses module.  It isn't run automatically;
  regrtest.py must be run with '-u curses' to enable it.

Windows
-------

Mac
----

- PythonScript has been moved to unsupported and is slated to be
  removed completely in the next release.

- It should now be possible to build applets that work on both OS9 and
  OSX.

- The core is now linked with CoreServices not Carbon; as a side
  result, default 8bit encoding on OSX is now ASCII.

- Python should now build on OSX 10.1.1


What's New in Python 2.2b1?
===========================

*Release date: 19-Oct-2001*

Type/class unification and new-style classes
--------------------------------------------

- New-style classes are now always dynamic (except for built-in and
  extension types).  There is no longer a performance penalty, and I
  no longer see another reason to keep this baggage around.  One relic
  remains: the __dict__ of a new-style class is a read-only proxy; you
  must set the class's attribute to modify it.  As a consequence, the
  __defined__ attribute of new-style types no longer exists, for lack
  of need: there is once again only one __dict__ (although in the
  future a __cache__ may be resurrected with a similar function, if I
  can prove that it actually speeds things up).

- C.__doc__ now works as expected for new-style classes (in 2.2a4 it
  always returned None, even when there was a class docstring).

- doctest now finds and runs docstrings attached to new-style classes,
  class methods, static methods, and properties.

Core and builtins
-----------------

- A very subtle syntactical pitfall in list comprehensions was fixed.
  For example: [a+b for a in 'abc', for b in 'def'].  The comma in
  this example is a mistake.  Previously, this would silently let 'a'
  iterate over the singleton tuple ('abc',), yielding ['abcd', 'abce',
  'abcf'] rather than the intended ['ad', 'ae', 'af', 'bd', 'be',
  'bf', 'cd', 'ce', 'cf'].  Now, this is flagged as a syntax error.
  Note that [a for a in <singleton>] is a convoluted way to say
  [<singleton>] anyway, so it's not like any expressiveness is lost.

- getattr(obj, name, default) now only catches AttributeError, as
  documented, rather than returning the default value for all
  exceptions (which could mask bugs in a __getattr__ hook, for
  example).

- Weak reference objects are now part of the core and offer a C API.
  A bug which could allow a core dump when binary operations involved
  proxy reference has been fixed.  weakref.ReferenceError is now a
  built-in exception.

- unicode(obj) now behaves more like str(obj), accepting arbitrary
  objects, and calling a __unicode__ method if it exists.
  unicode(obj, encoding) and unicode(obj, encoding, errors) still
  require an 8-bit string or character buffer argument.

- isinstance() now allows any object as the first argument and a
  class, a type or something with a __bases__ tuple attribute for the
  second argument.  The second argument may also be a tuple of a
  class, type, or something with __bases__, in which case isinstance()
  will return true if the first argument is an instance of any of the
  things contained in the second argument tuple.  E.g.

  isinstance(x, (A, B))

  returns true if x is an instance of A or B.

Extension modules
-----------------

- thread.start_new_thread() now returns the thread ID (previously None).

- binascii has now two quopri support functions, a2b_qp and b2a_qp.

- readline now supports setting the startup_hook and the
  pre_event_hook, and adds the add_history() function.

- os and posix supports chroot(), setgroups() and unsetenv() where
  available.  The stat(), fstat(), statvfs() and fstatvfs() functions
  now return "pseudo-sequences" -- the various fields can now be
  accessed as attributes (e.g. os.stat("/").st_mtime) but for
  backwards compatibility they also behave as a fixed-length sequence.
  Some platform-specific fields (e.g. st_rdev) are only accessible as
  attributes.

- time: localtime(), gmtime() and strptime() now return a
  pseudo-sequence similar to the os.stat() return value, with
  attributes like tm_year etc.

- Decompression objects in the zlib module now accept an optional
  second parameter to decompress() that specifies the maximum amount
  of memory to use for the uncompressed data.

- optional SSL support in the socket module now exports OpenSSL
  functions RAND_add(), RAND_egd(), and RAND_status().  These calls
  are useful on platforms like Solaris where OpenSSL does not
  automatically seed its PRNG.  Also, the keyfile and certfile
  arguments to socket.ssl() are now optional.

- posixmodule (and by extension, the os module on POSIX platforms) now
  exports O_LARGEFILE, O_DIRECT, O_DIRECTORY, and O_NOFOLLOW.

Library
-------

- doctest now excludes functions and classes not defined by the module
  being tested, thanks to Tim Hochberg.

- HotShot, a new profiler implemented using a C-based callback, has
  been added.  This substantially reduces the overhead of profiling,
  but it is still quite preliminary.  Support modules and
  documentation will be added in upcoming releases (before 2.2 final).

- profile now produces correct output in situations where an exception
  raised in Python is cleared by C code (e.g. hasattr()).  This used
  to cause wrong output, including spurious claims of recursive
  functions and attribution of time spent to the wrong function.

  The code and documentation for the derived OldProfile and HotProfile
  profiling classes was removed.  The code hasn't worked for years (if
  you tried to use them, they raised exceptions).  OldProfile
  intended to reproduce the behavior of the profiler Python used more
  than 7 years ago, and isn't interesting anymore.  HotProfile intended
  to provide a faster profiler (but producing less information), and
  that's a worthy goal we intend to meet via a different approach (but
  without losing information).

- Profile.calibrate() has a new implementation that should deliver
  a much better system-specific calibration constant.  The constant can
  now be specified in an instance constructor, or as a Profile class or
  instance variable, instead of by editing profile.py's source code.
  Calibration must still be done manually (see the docs for the profile
  module).

  Note that Profile.calibrate() must be overridden by subclasses.
  Improving the accuracy required exploiting detailed knowledge of
  profiler internals; the earlier method abstracted away the details
  and measured a simplified model instead, but consequently computed
  a constant too small by a factor of 2 on some modern machines.

- quopri's encode and decode methods take an optional header parameter,
  which indicates whether output is intended for the header 'Q'
  encoding.

- The SocketServer.ThreadingMixIn class now closes the request after
  finish_request() returns.  (Not when it errors out though.)

- The nntplib module's NNTP.body() method has grown a 'file' argument
  to allow saving the message body to a file.

- The email package has added a class email.Parser.HeaderParser which
  only parses headers and does not recurse into the message's body.
  Also, the module/class MIMEAudio has been added for representing
  audio data (contributed by Anthony Baxter).

- ftplib should be able to handle files > 2GB.

- ConfigParser.getboolean() now also interprets TRUE, FALSE, YES, NO,
  ON, and OFF.

- xml.dom.minidom NodeList objects now support the length attribute
  and item() method as required by the DOM specifications.

Tools/Demos
-----------

- Demo/dns was removed.  It no longer serves any purpose; a package
  derived from it is now maintained by Anthony Baxter, see
  http://PyDNS.SourceForge.net.

- The freeze tool has been made more robust, and two new options have
  been added: -X and -E.

Build
-----

- configure will use CXX in LINKCC if CXX is used to build main() and
  the system requires to link a C++ main using the C++ compiler.

C API
-----

- The documentation for the tp_compare slot is updated to require that
  the return value must be -1, 0, 1; an arbitrary number <0 or >0 is
  not correct.  This is not yet enforced but will be enforced in
  Python 2.3; even later, we may use -2 to indicate errors and +2 for
  "NotImplemented".  Right now, -1 should be used for an error return.

- PyLong_AsLongLong() now accepts int (as well as long) arguments.
  Consequently, PyArg_ParseTuple's 'L' code also accepts int (as well
  as long) arguments.

- PyThread_start_new_thread() now returns a long int giving the thread
  ID, if one can be calculated; it returns -1 for error, 0 if no
  thread ID is calculated (this is an incompatible change, but only
  the thread module used this API).  This code has only really been
  tested on Linux and Windows; other platforms please beware (and
  report any bugs or strange behavior).

- PyUnicode_FromEncodedObject() no longer accepts Unicode objects as
  input.

New platforms
-------------

Tests
-----

Windows
-------

- Installer:  If you install IDLE, and don't disable file-extension
  registration, a new "Edit with IDLE" context (right-click) menu entry
  is created for .py and .pyw files.

- The signal module now supports SIGBREAK on Windows, thanks to Steven
  Scott.  Note that SIGBREAK is unique to Windows.  The default SIGBREAK
  action remains to call Win32 ExitProcess().  This can be changed via
  signal.signal().  For example::

      # Make Ctrl+Break raise KeyboardInterrupt, like Python's default Ctrl+C
      # (SIGINT) behavior.
      import signal
      signal.signal(signal.SIGBREAK, signal.default_int_handler)

      try:
          while 1:
              pass
      except KeyboardInterrupt:
          # We get here on Ctrl+C or Ctrl+Break now; if we had not changed
          # SIGBREAK, only on Ctrl+C (and Ctrl+Break would terminate the
          # program without the possibility for any Python-level cleanup).
          print "Clean exit"


What's New in Python 2.2a4?
===========================

*Release date: 28-Sep-2001*

Type/class unification and new-style classes
--------------------------------------------

- pydoc and inspect are now aware of new-style classes;
  e.g. help(list) at the interactive prompt now shows proper
  documentation for all operations on list objects.

- Applications using Jim Fulton's ExtensionClass module can now safely
  be used with Python 2.2.  In particular, Zope 2.4.1 now works with
  Python 2.2 (as well as with Python 2.1.1).  The Demo/metaclass
  examples also work again.  It is hoped that Gtk and Boost also work
  with 2.2a4 and beyond.  (If you can confirm this, please write
  webmaster@python.org; if there are still problems, please open a bug
  report on SourceForge.)

- property() now takes 4 keyword arguments:  fget, fset, fdel and doc.
  These map to read-only attributes 'fget', 'fset', 'fdel', and '__doc__'
  in the constructed property object.  fget, fset and fdel weren't
  discoverable from Python in 2.2a3.  __doc__ is new, and allows
  associating a docstring with a property.

- Comparison overloading is now more completely implemented.  For
  example, a str subclass instance can properly be compared to a str
  instance, and it can properly overload comparison.  Ditto for most
  other built-in object types.

- The repr() of new-style classes has changed; instead of <type
  'M.Foo'> a new-style class is now rendered as <class 'M.Foo'>,
  *except* for built-in types, which are still rendered as <type
  'Foo'> (to avoid upsetting existing code that might parse or
  otherwise rely on repr() of certain type objects).

- The repr() of new-style objects is now always <Foo object at XXX>;
  previously, it was sometimes <Foo instance at XXX>.

- For new-style classes, what was previously called __getattr__ is now
  called __getattribute__.  This method, if defined, is called for
  *every* attribute access.  A new __getattr__ hook more similar to the
  one in classic classes is defined which is called only if regular
  attribute access raises AttributeError; to catch *all* attribute
  access, you can use __getattribute__ (for new-style classes).  If
  both are defined, __getattribute__ is called first, and if it raises
  AttributeError, __getattr__ is called.

- The __class__ attribute of new-style objects can be assigned to.
  The new class must have the same C-level object layout as the old
  class.

- The built-in file type can be subclassed now.  In the usual pattern,
  "file" is the name of the built-in type, and file() is a new built-in
  constructor, with the same signature as the built-in open() function.
  file() is now the preferred way to open a file.

- Previously, __new__ would only see sequential arguments passed to
  the type in a constructor call; __init__ would see both sequential
  and keyword arguments.  This made no sense whatsoever any more, so
  now both __new__ and __init__ see all arguments.

- Previously, hash() applied to an instance of a subclass of str or
  unicode always returned 0.  This has been repaired.

- Previously, an operation on an instance of a subclass of an
  immutable type (int, long, float, complex, tuple, str, unicode),
  where the subtype didn't override the operation (and so the
  operation was handled by the built-in type), could return that
  instance instead a value of the base type.  For example, if s was of
  a str subclass type, s[:] returned s as-is.  Now it returns a str
  with the same value as s.

- Provisional support for pickling new-style objects has been added.

Core
----

- file.writelines() now accepts any iterable object producing strings.

- PyUnicode_FromEncodedObject() now works very much like
  PyObject_Str(obj) in that it tries to use __str__/tp_str
  on the object if the object is not a string or buffer. This
  makes unicode() behave like str() when applied to non-string/buffer
  objects.

- PyFile_WriteObject now passes Unicode objects to the file's write
  method. As a result, all file-like objects which may be the target
  of a print statement must support Unicode objects, i.e. they must
  at least convert them into ASCII strings.

- Thread scheduling on Solaris should be improved; it is no longer
  necessary to insert a small sleep at the start of a thread in order
  to let other runnable threads be scheduled.

Library
-------

- StringIO.StringIO instances and cStringIO.StringIO instances support
  read character buffer compatible objects for their .write() methods.
  These objects are converted to strings and then handled as such
  by the instances.

- The "email" package has been added.  This is basically a port of the
  mimelib package <http://sf.net/projects/mimelib> with API changes
  and some implementations updated to use iterators and generators.

- difflib.ndiff() and difflib.Differ.compare() are generators now.  This
  restores the ability of Tools/scripts/ndiff.py to start producing output
  before the entire comparison is complete.

- StringIO.StringIO instances and cStringIO.StringIO instances support
  iteration just like file objects (i.e. their .readline() method is
  called for each iteration until it returns an empty string).

- The codecs module has grown four new helper APIs to access
  built-in codecs: getencoder(), getdecoder(), getreader(),
  getwriter().

- SimpleXMLRPCServer: a new module (based upon SimpleHTMLServer)
  simplifies writing XML RPC servers.

- os.path.realpath(): a new function that returns the absolute pathname
  after interpretation of symbolic links.  On non-Unix systems, this
  is an alias for os.path.abspath().

- operator.indexOf() (PySequence_Index() in the C API) now works with any
  iterable object.

- smtplib now supports various authentication and security features of
  the SMTP protocol through the new login() and starttls() methods.

- hmac: a new module implementing keyed hashing for message
  authentication.

- mimetypes now recognizes more extensions and file types.  At the
  same time, some mappings not sanctioned by IANA were removed.

- The "compiler" package has been brought up to date to the state of
  Python 2.2 bytecode generation.  It has also been promoted from a
  Tool to a standard library package.  (Tools/compiler still exists as
  a sample driver.)

Build
-----

- Large file support (LFS) is now automatic when the platform supports
  it; no more manual configuration tweaks are needed.  On Linux, at
  least, it's possible to have a system whose C library supports large
  files but whose kernel doesn't; in this case, large file support is
  still enabled but doesn't do you any good unless you upgrade your
  kernel or share your Python executable with another system whose
  kernel has large file support.

- The configure script now supplies plausible defaults in a
  cross-compilation environment.  This doesn't mean that the supplied
  values are always correct, or that cross-compilation now works
  flawlessly -- but it's a first step (and it shuts up most of
  autoconf's warnings about AC_TRY_RUN).

- The Unix build is now a bit less chatty, courtesy of the parser
  generator.  The build is completely silent (except for errors) when
  using "make -s", thanks to a -q option to setup.py.

C API
-----

- The "structmember" API now supports some new flag bits to deny read
  and/or write access to attributes in restricted execution mode.

New platforms
-------------

- Compaq's iPAQ handheld, running the "familiar" Linux distribution
  (http://familiar.handhelds.org).

Tests
-----

- The "classic" standard tests, which work by comparing stdout to
  an expected-output file under Lib/test/output/, no longer stop at
  the first mismatch.  Instead the test is run to completion, and a
  variant of ndiff-style comparison is used to report all differences.
  This is much easier to understand than the previous style of reporting.

- The unittest-based standard tests now use regrtest's test_main()
  convention, instead of running as a side-effect of merely being
  imported.  This allows these tests to be run in more natural and
  flexible ways as unittests, outside the regrtest framework.

- regrtest.py is much better integrated with unittest and doctest now,
  especially in regard to reporting errors.

Windows
-------

- Large file support now also works for files > 4GB, on filesystems
  that support it (NTFS under Windows 2000).  See "What's New in
  Python 2.2a3" for more detail.


What's New in Python 2.2a3?
===========================

*Release Date: 07-Sep-2001*

Core
----

- Conversion of long to float now raises OverflowError if the long is too
  big to represent as a C double.

- The 3-argument builtin pow() no longer allows a third non-None argument
  if either of the first two arguments is a float, or if both are of
  integer types and the second argument is negative (in which latter case
  the arguments are converted to float, so this is really the same
  restriction).

- The builtin dir() now returns more information, and sometimes much
  more, generally naming all attributes of an object, and all attributes
  reachable from the object via its class, and from its class's base
  classes, and so on from them too.  Example:  in 2.2a2, dir([]) returned
  an empty list.  In 2.2a3,

  >>> dir([])
  ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
   '__eq__', '__ge__', '__getattr__', '__getitem__', '__getslice__',
   '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__le__',
   '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__repr__',
   '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__',
   'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
   'reverse', 'sort']

  dir(module) continues to return only the module's attributes, though.

- Overflowing operations on plain ints now return a long int rather
  than raising OverflowError.  This is a partial implementation of PEP
  237.  You can use -Wdefault::OverflowWarning to enable a warning for
  this situation, and -Werror::OverflowWarning to revert to the old
  OverflowError exception.

- A new command line option, -Q<arg>, is added to control run-time
  warnings for the use of classic division.  (See PEP 238.)  Possible
  values are -Qold, -Qwarn, -Qwarnall, and -Qnew.  The default is
  -Qold, meaning the / operator has its classic meaning and no
  warnings are issued.  Using -Qwarn issues a run-time warning about
  all uses of classic division for int and long arguments; -Qwarnall
  also warns about classic division for float and complex arguments
  (for use with fixdiv.py).
  [Note:  the remainder of this item (preserved below) became
  obsolete in 2.2c1 -- -Qnew has global effect in 2.2] ::

    Using -Qnew is questionable; it turns on new division by default, but
    only in the __main__ module.  You can usefully combine -Qwarn or
    -Qwarnall and -Qnew: this gives the __main__ module new division, and
    warns about classic division everywhere else.

- Many built-in types can now be subclassed.  This applies to int,
  long, float, str, unicode, and tuple.  (The types complex, list and
  dictionary can also be subclassed; this was introduced earlier.)
  Note that restrictions apply when subclassing immutable built-in
  types: you can only affect the value of the instance by overloading
  __new__.  You can add mutable attributes, and the subclass instances
  will have a __dict__ attribute, but you cannot change the "value"
  (as implemented by the base class) of an immutable subclass instance
  once it is created.

- The dictionary constructor now takes an optional argument, a
  mapping-like object, and initializes the dictionary from its
  (key, value) pairs.

- A new built-in type, super, has been added.  This facilitates making
  "cooperative super calls" in a multiple inheritance setting.  For an
  explanation, see http://www.python.org/2.2/descrintro.html#cooperation

- A new built-in type, property, has been added.  This enables the
  creation of "properties".  These are attributes implemented by
  getter and setter functions (or only one of these for read-only or
  write-only attributes), without the need to override __getattr__.
  See http://www.python.org/2.2/descrintro.html#property

- The syntax of floating-point and imaginary literals has been
  liberalized, to allow leading zeroes.  Examples of literals now
  legal that were SyntaxErrors before:

      00.0    0e3   0100j   07.5   00000000000000000008.

- An old tokenizer bug allowed floating point literals with an incomplete
  exponent, such as 1e and 3.1e-.  Such literals now raise SyntaxError.

Library
-------

- telnetlib includes symbolic names for the options, and support for
  setting an option negotiation callback. It also supports processing
  of suboptions.

- The new C standard no longer requires that math libraries set errno to
  ERANGE on overflow.  For platform libraries that exploit this new
  freedom, Python's overflow-checking was wholly broken.  A new overflow-
  checking scheme attempts to repair that, but may not be reliable on all
  platforms (C doesn't seem to provide anything both useful and portable
  in this area anymore).

- Asynchronous timeout actions are available through the new class
  threading.Timer.

- math.log and math.log10 now return sensible results for even huge
  long arguments.  For example, math.log10(10 ** 10000) ~= 10000.0.

- A new function, imp.lock_held(), returns 1 when the import lock is
  currently held.  See the docs for the imp module.

- pickle, cPickle and marshal on 32-bit platforms can now correctly read
  dumps containing ints written on platforms where Python ints are 8 bytes.
  When read on a box where Python ints are 4 bytes, such values are
  converted to Python longs.

- In restricted execution mode (using the rexec module), unmarshalling
  code objects is no longer allowed.  This plugs a security hole.

- unittest.TestResult instances no longer store references to tracebacks
  generated by test failures. This prevents unexpected dangling references
  to objects that should be garbage collected between tests.

Tools
-----

- Tools/scripts/fixdiv.py has been added which can be used to fix
  division operators as per PEP 238.

Build
-----

- If you are an adventurous person using Mac OS X you may want to look at
  Mac/OSX. There is a Makefile there that will build Python as a real Mac
  application, which can be used for experimenting with Carbon or Cocoa.
  Discussion of this on pythonmac-sig, please.

C API
-----

- New function PyObject_Dir(obj), like Python __builtin__.dir(obj).

- Note that PyLong_AsDouble can fail!  This has always been true, but no
  callers checked for it.  It's more likely to fail now, because overflow
  errors are properly detected now.  The proper way to check::

      double x = PyLong_AsDouble(some_long_object);
      if (x == -1.0 && PyErr_Occurred()) {
              /* The conversion failed. */
      }

- The GC API has been changed.  Extensions that use the old API will still
  compile but will not participate in GC.  To upgrade an extension
  module:

    - rename Py_TPFLAGS_GC to PyTPFLAGS_HAVE_GC

    - use PyObject_GC_New or PyObject_GC_NewVar to allocate objects and
      PyObject_GC_Del to deallocate them

    - rename PyObject_GC_Init to PyObject_GC_Track and PyObject_GC_Fini
      to PyObject_GC_UnTrack

    - remove PyGC_HEAD_SIZE from object size calculations

    - remove calls to PyObject_AS_GC and PyObject_FROM_GC

- Two new functions: PyString_FromFormat() and PyString_FromFormatV().
  These can be used safely to construct string objects from a
  sprintf-style format string (similar to the format string supported
  by PyErr_Format()).

New platforms
-------------

- Stephen Hansen contributed patches sufficient to get a clean compile
  under Borland C (Windows), but he reports problems running it and ran
  out of time to complete the port.  Volunteers?  Expect a MemoryError
  when importing the types module; this is probably shallow, and
  causing later failures too.

Tests
-----

Windows
-------

- Large file support is now enabled on Win32 platforms as well as on
  Win64.  This means that, for example, you can use f.tell() and f.seek()
  to manipulate files larger than 2 gigabytes (provided you have enough
  disk space, and are using a Windows filesystem that supports large
  partitions).  Windows filesystem limits:  FAT has a 2GB (gigabyte)
  filesize limit, and large file support makes no difference there.
  FAT32's limit is 4GB, and files >= 2GB are easier to use from Python now.
  NTFS has no practical limit on file size, and files of any size can be
  used from Python now.

- The w9xpopen hack is now used on Windows NT and 2000 too when COMPSPEC
  points to command.com (patch from Brian Quinlan).


What's New in Python 2.2a2?
===========================

*Release Date: 22-Aug-2001*

Build
-----

- Tim Peters developed a brand new Windows installer using Wise 8.1,
  generously donated to us by Wise Solutions.

- configure supports a new option --enable-unicode, with the values
  ucs2 and ucs4 (new in 2.2a1). With --disable-unicode, the Unicode
  type and supporting code is completely removed from the interpreter.

- A new configure option --enable-framework builds a Mac OS X framework,
  which "make frameworkinstall" will install. This provides a starting
  point for more mac-like functionality, join pythonmac-sig@python.org
  if you are interested in helping.

- The NeXT platform is no longer supported.

- The 'new' module is now statically linked.

Tools
-----

- The new Tools/scripts/cleanfuture.py can be used to automatically
  edit out obsolete future statements from Python source code.  See
  the module docstring for details.

Tests
-----

- regrtest.py now knows which tests are expected to be skipped on some
  platforms, allowing clearer test result output to be given.  regrtest
  also has optional --use/-u switch to run normally disabled tests
  which require network access or consume significant disk resources.

- Several new tests in the standard test suite, with special thanks to
  Nick Mathewson.

Core
----

- The floor division operator // has been added as outlined in PEP
  238.  The / operator still provides classic division (and will until
  Python 3.0) unless "from __future__ import division" is included, in
  which case the / operator will provide true division.  The operator
  module provides truediv() and floordiv() functions.  Augmented
  assignment variants are included, as are the equivalent overloadable
  methods and C API methods.  See the PEP for a full discussion:
  <http://python.sf.net/peps/pep-0238.html>

- Future statements are now effective in simulated interactive shells
  (like IDLE).  This should "just work" by magic, but read Michael
  Hudson's "Future statements in simulated shells" PEP 264 for full
  details:  <http://python.sf.net/peps/pep-0264.html>.

- The type/class unification (PEP 252-253) was integrated into the
  trunk and is not so tentative any more (the exact specification of
  some features is still tentative).  A lot of work has done on fixing
  bugs and adding robustness and features (performance still has to
  come a long way).

- Warnings about a mismatch in the Python API during extension import
  now use the Python warning framework (which makes it possible to
  write filters for these warnings).

- A function's __dict__ (aka func_dict) will now always be a
  dictionary.  It used to be possible to delete it or set it to None,
  but now both actions raise TypeErrors.  It is still legal to set it
  to a dictionary object.  Getting func.__dict__ before any attributes
  have been assigned now returns an empty dictionary instead of None.

- A new command line option, -E, was added which disables the use of
  all environment variables, or at least those that are specifically
  significant to Python.  Usually those have a name starting with
  "PYTHON".  This was used to fix a problem where the tests fail if
  the user happens to have PYTHONHOME or PYTHONPATH pointing to an
  older distribution.

Library
-------

- New class Differ and new functions ndiff() and restore() in difflib.py.
  These package the algorithms used by the popular Tools/scripts/ndiff.py,
  for programmatic reuse.

- New function xml.sax.saxutils.quoteattr():  Quote an XML attribute
  value using the minimal quoting required for the value; more
  reliable than using xml.sax.saxutils.escape() for attribute values.

- Readline completion support for cmd.Cmd was added.

- Calling os.tempnam() or os.tmpnam() generate RuntimeWarnings.

- Added function threading.BoundedSemaphore()

- Added Ka-Ping Yee's cgitb.py module.

- The 'new' module now exposes the CO_xxx flags.

- The gc module offers the get_referents function.

New platforms
-------------

C API
-----

- Two new APIs PyOS_snprintf() and PyOS_vsnprintf() were added
  which provide a cross-platform implementations for the
  relatively new snprintf()/vsnprintf() C lib APIs. In contrast to
  the standard sprintf() and vsprintf() C lib APIs, these versions
  apply bounds checking on the used buffer which enhances protection
  against buffer overruns.

- Unicode APIs now use name mangling to assure that mixing interpreters
  and extensions using different Unicode widths is rendered next to
  impossible. Trying to import an incompatible Unicode-aware extension
  will result in an ImportError.  Unicode extensions writers must make
  sure to check the Unicode width compatibility in their extensions by
  using at least one of the mangled Unicode APIs in the extension.

- Two new flags METH_NOARGS and METH_O are available in method definition
  tables to simplify implementation of methods with no arguments and a
  single untyped argument. Calling such methods is more efficient than
  calling corresponding METH_VARARGS methods. METH_OLDARGS is now
  deprecated.

Windows
-------

- "import module" now compiles module.pyw if it exists and nothing else
  relevant is found.


What's New in Python 2.2a1?
===========================

*Release date: 18-Jul-2001*

Core
----

- TENTATIVELY, a large amount of code implementing much of what's
  described in PEP 252 (Making Types Look More Like Classes) and PEP
  253 (Subtyping Built-in Types) was added.  This will be released
  with Python 2.2a1.  Documentation will be provided separately
  through http://www.python.org/2.2/.  The purpose of releasing this
  with Python 2.2a1 is to test backwards compatibility.  It is
  possible, though not likely, that a decision is made not to release
  this code as part of 2.2 final, if any serious backwards
  incompatibilities are found during alpha testing that cannot be
  repaired.

- Generators were added; this is a new way to create an iterator (see
  below) using what looks like a simple function containing one or
  more 'yield' statements.  See PEP 255.  Since this adds a new
  keyword to the language, this feature must be enabled by including a
  future statement: "from __future__ import generators" (see PEP 236).
  Generators will become a standard feature in a future release
  (probably 2.3).  Without this future statement, 'yield' remains an
  ordinary identifier, but a warning is issued each time it is used.
  (These warnings currently don't conform to the warnings framework of
  PEP 230; we intend to fix this in 2.2a2.)

- The UTF-16 codec was modified to be more RFC compliant. It will now
  only remove BOM characters at the start of the string and then
  only if running in native mode (UTF-16-LE and -BE won't remove a
  leading BMO character).

- Strings now have a new method .decode() to complement the already
  existing .encode() method. These two methods provide direct access
  to the corresponding decoders and encoders of the registered codecs.

  To enhance the usability of the .encode() method, the special
  casing of Unicode object return values was dropped (Unicode objects
  were auto-magically converted to string using the default encoding).

  Both methods will now return whatever the codec in charge of the
  requested encoding returns as object, e.g. Unicode codecs will
  return Unicode objects when decoding is requested ("äöü".decode("latin-1")
  will return u"äöü"). This enables codec writer to create codecs
  for various simple to use conversions.

  New codecs were added to demonstrate these new features (the .encode()
  and .decode() columns indicate the type of the returned objects):

  +---------+-----------+-----------+-----------------------------+
  |Name     | .encode() | .decode() | Description                 |
  +=========+===========+===========+=============================+
  |uu       | string    | string    | UU codec (e.g. for email)   |
  +---------+-----------+-----------+-----------------------------+
  |base64   | string    | string    | base64 codec                |
  +---------+-----------+-----------+-----------------------------+
  |quopri   | string    | string    | quoted-printable codec      |
  +---------+-----------+-----------+-----------------------------+
  |zlib     | string    | string    | zlib compression            |
  +---------+-----------+-----------+-----------------------------+
  |hex      | string    | string    | 2-byte hex codec            |
  +---------+-----------+-----------+-----------------------------+
  |rot-13   | string    | Unicode   | ROT-13 Unicode charmap codec|
  +---------+-----------+-----------+-----------------------------+

- Some operating systems now support the concept of a default Unicode
  encoding for file system operations.  Notably, Windows supports 'mbcs'
  as the default.  The Macintosh will also adopt this concept in the medium
  term, although the default encoding for that platform will be other than
  'mbcs'.

  On operating system that support non-ASCII filenames, it is common for
  functions that return filenames (such as os.listdir()) to return Python
  string objects pre-encoded using the default file system encoding for
  the platform.  As this encoding is likely to be different from Python's
  default encoding, converting this name to a Unicode object before passing
  it back to the Operating System would result in a Unicode error, as Python
  would attempt to use its default encoding (generally ASCII) rather than
  the default encoding for the file system.

  In general, this change simply removes surprises when working with
  Unicode and the file system, making these operations work as you expect,
  increasing the transparency of Unicode objects in this context.
  See [????] for more details, including examples.

- Float (and complex) literals in source code were evaluated to full
  precision only when running from a .py file; the same code loaded from a
  .pyc (or .pyo) file could suffer numeric differences starting at about the
  12th significant decimal digit.  For example, on a machine with IEEE-754
  floating arithmetic,

      x = 9007199254740992.0
      print long(x)

  printed 9007199254740992 if run directly from .py, but 9007199254740000
  if from a compiled (.pyc or .pyo) file.  This was due to marshal using
  str(float) instead of repr(float) when building code objects.  marshal
  now uses repr(float) instead, which should reproduce floats to full
  machine precision (assuming the platform C float<->string I/O conversion
  functions are of good quality).

  This may cause floating-point results to change in some cases, and
  usually for the better, but may also cause numerically unstable
  algorithms to break.

- The implementation of dicts suffers fewer collisions, which has speed
  benefits.  However, the order in which dict entries appear in dict.keys(),
  dict.values() and dict.items() may differ from previous releases for a
  given dict.  Nothing is defined about this order, so no program should
  rely on it.  Nevertheless, it's easy to write test cases that rely on the
  order by accident, typically because of printing the str() or repr() of a
  dict to an "expected results" file.  See Lib/test/test_support.py's new
  sortdict(dict) function for a simple way to display a dict in sorted
  order.

- Many other small changes to dicts were made, resulting in faster
  operation along the most common code paths.

- Dictionary objects now support the "in" operator: "x in dict" means
  the same as dict.has_key(x).

- The update() method of dictionaries now accepts generic mapping
  objects.  Specifically the argument object must support the .keys()
  and __getitem__() methods.  This allows you to say, for example,
  {}.update(UserDict())

- Iterators were added; this is a generalized way of providing values
  to a for loop.  See PEP 234.  There's a new built-in function iter()
  to return an iterator.  There's a new protocol to get the next value
  from an iterator using the next() method (in Python) or the
  tp_iternext slot (in C).  There's a new protocol to get iterators
  using the __iter__() method (in Python) or the tp_iter slot (in C).
  Iterating (i.e. a for loop) over a dictionary generates its keys.
  Iterating over a file generates its lines.

- The following functions were generalized to work nicely with iterator
  arguments::

    map(), filter(), reduce(), zip()
    list(), tuple() (PySequence_Tuple() and PySequence_Fast() in C API)
    max(), min()
    join() method of strings
    extend() method of lists
    'x in y' and 'x not in y' (PySequence_Contains() in C API)
    operator.countOf() (PySequence_Count() in C API)
    right-hand side of assignment statements with multiple targets, such as ::
        x, y, z = some_iterable_object_returning_exactly_3_values

- Accessing module attributes is significantly faster (for example,
  random.random or os.path or yourPythonModule.yourAttribute).

- Comparing dictionary objects via == and != is faster, and now works even
  if the keys and values don't support comparisons other than ==.

- Comparing dictionaries in ways other than == and != is slower:  there were
  insecurities in the dict comparison implementation that could cause Python
  to crash if the element comparison routines for the dict keys and/or
  values mutated the dicts.  Making the code bulletproof slowed it down.

- Collisions in dicts are resolved via a new approach, which can help
  dramatically in bad cases.  For example, looking up every key in a dict
  d with d.keys() == [i << 16 for i in range(20000)] is approximately 500x
  faster now.  Thanks to Christian Tismer for pointing out the cause and
  the nature of an effective cure (last December! better late than never).

- repr() is much faster for large containers (dict, list, tuple).


Library
-------

- The constants ascii_letters, ascii_lowercase. and ascii_uppercase
  were added to the string module.  These a locale-independent
  constants, unlike letters, lowercase, and uppercase.  These are now
  use in appropriate locations in the standard library.

- The flags used in dlopen calls can now be configured using
  sys.setdlopenflags and queried using sys.getdlopenflags.

- Fredrik Lundh's xmlrpclib is now a standard library module.  This
  provides full client-side XML-RPC support.  In addition,
  Demo/xmlrpc/ contains two server frameworks (one SocketServer-based,
  one asyncore-based).  Thanks to Eric Raymond for the documentation.

- The xrange() object is simplified: it no longer supports slicing,
  repetition, comparisons, efficient 'in' checking, the tolist()
  method, or the start, stop and step attributes.  See PEP 260.

- A new function fnmatch.filter to filter lists of file names was added.

- calendar.py uses month and day names based on the current locale.

- strop is now *really* obsolete (this was announced before with 1.6),
  and issues DeprecationWarning when used (except for the four items
  that are still imported into string.py).

- Cookie.py now sorts key+value pairs by key in output strings.

- pprint.isrecursive(object) didn't correctly identify recursive objects.
  Now it does.

- pprint functions now much faster for large containers (tuple, list, dict).

- New 'q' and 'Q' format codes in the struct module, corresponding to C
  types "long long" and "unsigned long long" (on Windows, __int64).  In
  native mode, these can be used only when the platform C compiler supports
  these types (when HAVE_LONG_LONG is #define'd by the Python config
  process), and then they inherit the sizes and alignments of the C types.
  In standard mode, 'q' and 'Q' are supported on all platforms, and are
  8-byte integral types.

- The site module installs a new built-in function 'help' that invokes
  pydoc.help.  It must be invoked as 'help()'; when invoked as 'help',
  it displays a message reminding the user to use 'help()' or
  'help(object)'.

Tests
-----

- New test_mutants.py runs dict comparisons where the key and value
  comparison operators mutate the dicts randomly during comparison.  This
  rapidly causes Python to crash under earlier releases (not for the faint
  of heart:  it can also cause Win9x to freeze or reboot!).

- New test_pprint.py verifies that pprint.isrecursive() and
  pprint.isreadable() return sensible results.  Also verifies that simple
  cases produce correct output.

C API
-----

- Removed the unused last_is_sticky argument from the internal
  _PyTuple_Resize().  If this affects you, you were cheating.

What's New in Python 2.1 (final)?
=================================

We only changed a few things since the last release candidate, all in
Python library code:

- A bug in the locale module was fixed that affected locales which
  define no grouping for numeric formatting.

- A few bugs in the weakref module's implementations of weak
  dictionaries (WeakValueDictionary and WeakKeyDictionary) were fixed,
  and the test suite was updated to check for these bugs.

- An old bug in the os.path.walk() function (introduced in Python
  2.0!) was fixed: a non-existent file would cause an exception
  instead of being ignored.

- Fixed a few bugs in the new symtable module found by Neil Norwitz's
  PyChecker.


What's New in Python 2.1c2?
===========================

A flurry of small changes, and one showstopper fixed in the nick of
time made it necessary to release another release candidate.  The list
here is the *complete* list of patches (except version updates):

Core

- Tim discovered a nasty bug in the dictionary code, caused by
  PyDict_Next() calling dict_resize(), and the GC code's use of
  PyDict_Next() violating an assumption in dict_items().  This was
  fixed with considerable amounts of band-aid, but the net effect is a
  saner and more robust implementation.

- Made a bunch of symbols static that were accidentally global.

Build and Ports

- The setup.py script didn't check for a new enough version of zlib
  (1.1.3 is needed).  Now it does.

- Changed "make clean" target to also remove shared libraries.

- Added a more general warning about the SGI Irix optimizer to README.

Library

- Fix a bug in urllib.basejoin("http://host", "../file.html") which
  omitted the slash between host and file.html.

- The mailbox module's _Mailbox class contained a completely broken
  and undocumented seek() method.  Ripped it out.

- Fixed a bunch of typos in various library modules (urllib2, smtpd,
  sgmllib, netrc, chunk) found by Neil Norwitz's PyChecker.

- Fixed a few last-minute bugs in unittest.

Extensions

- Reverted the patch to the OpenSSL code in socketmodule.c to support
  RAND_status() and the EGD, and the subsequent patch that tried to
  fix it for pre-0.9.5 versions; the problem with the patch is that on
  some systems it issues a warning whenever socket is imported, and
  that's unacceptable.

Tests

- Fixed the pickle tests to work with "import test.test_pickle".

- Tweaked test_locale.py to actually run the test Windows.

- In distutils/archive_util.py, call zipfile.ZipFile() with mode "w",
  not "wb" (which is not a valid mode at all).

- Fix pstats browser crashes.  Import readline if it exists to make
  the user interface nicer.

- Add "import thread" to the top of test modules that import the
  threading module (test_asynchat and test_threadedtempfile).  This
  prevents test failures caused by a broken threading module resulting
  from a previously caught failed import.

- Changed test_asynchat.py to set the SO_REUSEADDR option; this was
  needed on some platforms (e.g. Solaris 8) when the tests are run
  twice in succession.

- Skip rather than fail test_sunaudiodev if no audio device is found.


What's New in Python 2.1c1?
===========================

This list was significantly updated when 2.1c2 was released; the 2.1c1
release didn't mention most changes that were actually part of 2.1c1:

Legal

- Copyright was assigned to the Python Software Foundation (PSF) and a
  PSF license (very similar to the CNRI license) was added.

- The CNRI copyright notice was updated to include 2001.

Core

- After a public outcry, assignment to __debug__ is no longer illegal;
  instead, a warning is issued.  It will become illegal in 2.2.

- Fixed a core dump with "%#x" % 0, and changed the semantics so that
  "%#x" now always prepends "0x", even if the value is zero.

- Fixed some nits in the bytecode compiler.

- Fixed core dumps when calling certain kinds of non-functions.

- Fixed various core dumps caused by reference count bugs.

Build and Ports

- Use INSTALL_SCRIPT to install script files.

- New port: SCO Unixware 7, by Billy G. Allie.

- Updated RISCOS port.

- Updated BeOS port and notes.

- Various other porting problems resolved.

Library

- The TERMIOS and SOCKET modules are now truly obsolete and
  unnecessary.  Their symbols are incorporated in the termios and
  socket modules.

- Fixed some 64-bit bugs in pickle, cPickle, and struct, and added
  better tests for pickling.

- threading: make Condition.wait() robust against KeyboardInterrupt.

- zipfile: add support to zipfile to support opening an archive
  represented by an open file rather than a file name.  Fix bug where
  the archive was not properly closed.  Fixed a bug in this bugfix
  where flush() was called for a read-only file.

- imputil: added an uninstall() method to the ImportManager.

- Canvas: fixed bugs in lower() and tkraise() methods.

- SocketServer: API change (added overridable close_request() method)
  so that the TCP server can explicitly close the request.

- pstats: Eric Raymond added a simple interactive statistics browser,
  invoked when the module is run as a script.

- locale: fixed a problem in format().

- webbrowser: made it work when the BROWSER environment variable has a
  value like "/usr/bin/netscape".  Made it auto-detect Konqueror for
  KDE 2.  Fixed some other nits.

- unittest: changes to allow using a different exception than
  AssertionError, and added a few more function aliases.  Some other
  small changes.

- urllib, urllib2: fixed redirect problems and a coupleof other nits.

- asynchat: fixed a critical bug in asynchat that slipped through the
  2.1b2 release.  Fixed another rare bug.

- Fix some unqualified except: clauses (always a bad code example).

XML

- pyexpat: new API get_version_string().

- Fixed some minidom bugs.

Extensions

- Fixed a core dump in _weakref.  Removed the weakref.mapping()
  function (it adds nothing to the API).

- Rationalized the use of header files in the readline module, to make
  it compile (albeit with some warnings) with the very recent readline
  4.2, without breaking for earlier versions.

- Hopefully fixed a buffering problem in linuxaudiodev.

- Attempted a fix to make the OpenSSL support in the socket module
  work again with pre-0.9.5 versions of OpenSSL.

Tests

- Added a test case for asynchat and asyncore.

- Removed coupling between tests where one test failing could break
  another.

Tools

- Ping added an interactive help browser to pydoc, fixed some nits
  in the rest of the pydoc code, and added some features to his
  inspect module.

- An updated python-mode.el version 4.1 which integrates Ken
  Manheimer's pdbtrack.el.  This makes debugging Python code via pdb
  much nicer in XEmacs and Emacs.  When stepping through your program
  with pdb, in either the shell window or the *Python* window, the
  source file and line will be tracked by an arrow.  Very cool!

- IDLE: syntax warnings in interactive mode are changed into errors.

- Some improvements to Tools/webchecker (ignore some more URL types,
  follow some more links).

- Brought the Tools/compiler package up to date.


What's New in Python 2.1 beta 2?
================================

(Unlisted are many fixed bugs, more documentation, etc.)

Core language, builtins, and interpreter

- The nested scopes work (enabled by "from __future__ import
  nested_scopes") is completed; in particular, the future now extends
  into code executed through exec, eval() and execfile(), and into the
  interactive interpreter.

- When calling a base class method (e.g. BaseClass.__init__(self)),
  this is now allowed even if self is not strictly spoken a class
  instance (e.g. when using metaclasses or the Don Beaudry hook).

- Slice objects are now comparable but not hashable; this prevents
  dict[:] from being accepted but meaningless.

- Complex division is now calculated using less braindead algorithms.
  This doesn't change semantics except it's more likely to give useful
  results in extreme cases.  Complex repr() now uses full precision
  like float repr().

- sgmllib.py now calls handle_decl() for simple <!...> declarations.

- It is illegal to assign to the name __debug__, which is set when the
  interpreter starts.  It is effectively a compile-time constant.

- A warning will be issued if a global statement for a variable
  follows a use or assignment of that variable.

Standard library

- unittest.py, a unit testing framework by Steve Purcell (PyUNIT,
  inspired by JUnit), is now part of the standard library.  You now
  have a choice of two testing frameworks: unittest requires you to
  write testcases as separate code, doctest gathers them from
  docstrings.  Both approaches have their advantages and
  disadvantages.

- A new module Tix was added, which wraps the Tix extension library
  for Tk.  With that module, it is not necessary to statically link
  Tix with _tkinter, since Tix will be loaded with Tcl's "package
  require" command.  See Demo/tix/.

- tzparse.py is now obsolete.

- In gzip.py, the seek() and tell() methods are removed -- they were
  non-functional anyway, and it's better if callers can test for their
  existence with hasattr().

Python/C API

- PyDict_Next(): it is now safe to call PyDict_SetItem() with a key
  that's already in the dictionary during a PyDict_Next() iteration.
  This used to fail occasionally when a dictionary resize operation
  could be triggered that would rehash all the keys.  All other
  modifications to the dictionary are still off-limits during a
  PyDict_Next() iteration!

- New extended APIs related to passing compiler variables around.

- New abstract APIs PyObject_IsInstance(), PyObject_IsSubclass()
  implement isinstance() and issubclass().

- Py_BuildValue() now has a "D" conversion to create a Python complex
  number from a Py_complex C value.

- Extensions types which support weak references must now set the
  field allocated for the weak reference machinery to NULL themselves;
  this is done to avoid the cost of checking each object for having a
  weakly referencable type in PyObject_INIT(), since most types are
  not weakly referencable.

- PyFrame_FastToLocals() and PyFrame_LocalsToFast() copy bindings for
  free variables and cell variables to and from the frame's f_locals.

- Variants of several functions defined in pythonrun.h have been added
  to support the nested_scopes future statement.  The variants all end
  in Flags and take an extra argument, a PyCompilerFlags *; examples:
  PyRun_AnyFileExFlags(), PyRun_InteractiveLoopFlags().  These
  variants may be removed in Python 2.2, when nested scopes are
  mandatory.

Distutils

- the sdist command now writes a PKG-INFO file, as described in PEP 241,
  into the release tree.

- several enhancements to the bdist_wininst command from Thomas Heller
  (an uninstaller, more customization of the installer's display)

- from Jack Jansen: added Mac-specific code to generate a dialog for
  users to specify the command-line (because providing a command-line with
  MacPython is awkward).  Jack also made various fixes for the Mac
  and the Metrowerks compiler.

- added 'platforms' and 'keywords' to the set of metadata that can be
  specified for a distribution.

- applied patches from Jason Tishler to make the compiler class work with
  Cygwin.


What's New in Python 2.1 beta 1?
================================

Core language, builtins, and interpreter

- Following an outcry from the community about the amount of code
  broken by the nested scopes feature introduced in 2.1a2, we decided
  to make this feature optional, and to wait until Python 2.2 (or at
  least 6 months) to make it standard.  The option can be enabled on a
  per-module basis by adding "from __future__ import nested_scopes" at
  the beginning of a module (before any other statements, but after
  comments and an optional docstring).  See PEP 236 (Back to the
  __future__) for a description of the __future__ statement.  PEP 227
  (Statically Nested Scopes) has been updated to reflect this change,
  and to clarify the semantics in a number of endcases.

- The nested scopes code, when enabled, has been hardened, and most
  bugs and memory leaks in it have been fixed.

- Compile-time warnings are now generated for a number of conditions
  that will break or change in meaning when nested scopes are enabled:

  - Using "from...import *" or "exec" without in-clause in a function
    scope that also defines a lambda or nested function with one or
    more free (non-local) variables.  The presence of the import* or
    bare exec makes it impossible for the compiler to determine the
    exact set of local variables in the outer scope, which makes it
    impossible to determine the bindings for free variables in the
    inner scope.  To avoid the warning about import *, change it into
    an import of explicitly name object, or move the import* statement
    to the global scope; to avoid the warning about bare exec, use
    exec...in... (a good idea anyway -- there's a possibility that
    bare exec will be deprecated in the future).

  - Use of a global variable in a nested scope with the same name as a
    local variable in a surrounding scope.  This will change in
    meaning with nested scopes: the name in the inner scope will
    reference the variable in the outer scope rather than the global
    of the same name.  To avoid the warning, either rename the outer
    variable, or use a global statement in the inner function.

- An optional object allocator has been included.  This allocator is
  optimized for Python objects and should be faster and use less memory
  than the standard system allocator.  It is not enabled by default
  because of possible thread safety problems.  The allocator is only
  protected by the Python interpreter lock and it is possible that some
  extension modules require a thread safe allocator.  The object
  allocator can be enabled by providing the "--with-pymalloc" option to
  configure.

Standard library

- pyexpat now detects the expat version if expat.h defines it. A
  number of additional handlers are provided, which are only available
  since expat 1.95. In addition, the methods SetParamEntityParsing and
  GetInputContext of Parser objects are available with 1.95.x
  only. Parser objects now provide the ordered_attributes and
  specified_attributes attributes. A new module expat.model was added,
  which offers a number of additional constants if 1.95.x is used.

- xml.dom offers the new functions registerDOMImplementation and
  getDOMImplementation.

- xml.dom.minidom offers a toprettyxml method. A number of DOM
  conformance issues have been resolved. In particular, Element now
  has a hasAttributes method, and the handling of namespaces was
  improved.

- Ka-Ping Yee contributed two new modules: inspect.py, a module for
  getting information about live Python code, and pydoc.py, a module
  for interactively converting docstrings to HTML or text.
  Tools/scripts/pydoc, which is now automatically installed into
  <prefix>/bin, uses pydoc.py to display documentation; try running
  "pydoc -h" for instructions.  "pydoc -g" pops up a small GUI that
  lets you browse the module docstrings using a web browser.

- New library module difflib.py, primarily packaging the SequenceMatcher
  class at the heart of the popular ndiff.py file-comparison tool.

- doctest.py (a framework for verifying Python code examples in docstrings)
  is now part of the std library.

Windows changes

- A new entry in the Start menu, "Module Docs", runs "pydoc -g" -- a
  small GUI that lets you browse the module docstrings using your
  default web browser.

- Import is now case-sensitive.  PEP 235 (Import on Case-Insensitive
  Platforms) is implemented.  See

      http://python.sourceforge.net/peps/pep-0235.html

  for full details, especially the "Current Lower-Left Semantics" section.
  The new Windows import rules are simpler than before:

  A. If the PYTHONCASEOK environment variable exists, same as
     before:  silently accept the first case-insensitive match of any
     kind; raise ImportError if none found.

  B. Else search sys.path for the first case-sensitive match; raise
     ImportError if none found.

  The same rules have been implemented on other platforms with case-
  insensitive but case-preserving filesystems too (including Cygwin, and
  several flavors of Macintosh operating systems).

- winsound module:  Under Win9x, winsound.Beep() now attempts to simulate
  what it's supposed to do (and does do under NT and 2000) via direct
  port manipulation.  It's unknown whether this will work on all systems,
  but it does work on my Win98SE systems now and was known to be useless on
  all Win9x systems before.

- Build:  Subproject _test (effectively) renamed to _testcapi.

New platforms

- 2.1 should compile and run out of the box under MacOS X, even using HFS+.
  Thanks to Steven Majewski!

- 2.1 should compile and run out of the box on Cygwin.  Thanks to Jason
  Tishler!

- 2.1 contains new files and patches for RISCOS, thanks to Dietmar
  Schwertberger!  See RISCOS/README for more information -- it seems
  that because of the bizarre filename conventions on RISCOS, no port
  to that platform is easy.


What's New in Python 2.1 alpha 2?
=================================

Core language, builtins, and interpreter

- Scopes nest.  If a name is used in a function or class, but is not
  local, the definition in the nearest enclosing function scope will
  be used.  One consequence of this change is that lambda statements
  could reference variables in the namespaces where the lambda is
  defined.  In some unusual cases, this change will break code.

  In all previous version of Python, names were resolved in exactly
  three namespaces -- the local namespace, the global namespace, and
  the builtins namespace.  According to this old definition, if a
  function A is defined within a function B, the names bound in B are
  not visible in A.  The new rules make names bound in B visible in A,
  unless A contains a name binding that hides the binding in B.

  Section 4.1 of the reference manual describes the new scoping rules
  in detail.  The test script in Lib/test/test_scope.py demonstrates
  some of the effects of the change.

  The new rules will cause existing code to break if it defines nested
  functions where an outer function has local variables with the same
  name as globals or builtins used by the inner function.  Example:

    def munge(str):
        def helper(x):
            return str(x)
        if type(str) != type(''):
            str = helper(str)
        return str.strip()

  Under the old rules, the name str in helper() is bound to the
  built-in function str().  Under the new rules, it will be bound to
  the argument named str and an error will occur when helper() is
  called.

- The compiler will report a SyntaxError if "from ... import *" occurs
  in a function or class scope.  The language reference has documented
  that this case is illegal, but the compiler never checked for it.
  The recent introduction of nested scope makes the meaning of this
  form of name binding ambiguous.  In a future release, the compiler
  may allow this form when there is no possibility of ambiguity.

- repr(string) is easier to read, now using hex escapes instead of octal,
  and using \t, \n and \r instead of \011, \012 and \015 (respectively):

  >>> "\texample \r\n" + chr(0) + chr(255)
  '\texample \r\n\x00\xff'         # in 2.1
  '\011example \015\012\000\377'   # in 2.0

- Functions are now compared and hashed by identity, not by value, since
  the func_code attribute is writable.

- Weak references (PEP 205) have been added.  This involves a few
  changes in the core, an extension module (_weakref), and a Python
  module (weakref).  The weakref module is the public interface.  It
  includes support for "explicit" weak references, proxy objects, and
  mappings with weakly held values.

- A 'continue' statement can now appear in a try block within the body
  of a loop.  It is still not possible to use continue in a finally
  clause.

Standard library

- mailbox.py now has a new class, PortableUnixMailbox which is
  identical to UnixMailbox but uses a more portable scheme for
  determining From_ separators.  Also, the constructors for all the
  classes in this module have a new optional `factory' argument, which
  is a callable used when new message classes must be instantiated by
  the next() method.

- random.py is now self-contained, and offers all the functionality of
  the now-deprecated whrandom.py.  See the docs for details.  random.py
  also supports new functions getstate() and setstate(), for saving
  and restoring the internal state of the generator; and jumpahead(n),
  for quickly forcing the internal state to be the same as if n calls to
  random() had been made.  The latter is particularly useful for multi-
  threaded programs, creating one instance of the random.Random() class for
  each thread, then using .jumpahead() to force each instance to use a
  non-overlapping segment of the full period.

- random.py's seed() function is new.  For bit-for-bit compatibility with
  prior releases, use the whseed function instead.  The new seed function
  addresses two problems:  (1) The old function couldn't produce more than
  about 2**24 distinct internal states; the new one about 2**45 (the best
  that can be done in the Wichmann-Hill generator).  (2) The old function
  sometimes produced identical internal states when passed distinct
  integers, and there was no simple way to predict when that would happen;
  the new one guarantees to produce distinct internal states for all
  arguments in [0, 27814431486576L).

- The socket module now supports raw packets on Linux.  The socket
  family is AF_PACKET.

- test_capi.py is a start at running tests of the Python C API.  The tests
  are implemented by the new Modules/_testmodule.c.

- A new extension module, _symtable, provides provisional access to the
  internal symbol table used by the Python compiler.  A higher-level
  interface will be added on top of _symtable in a future release.

- Removed the obsolete soundex module.

- xml.dom.minidom now uses the standard DOM exceptions. Node supports
  the isSameNode method; NamedNodeMap the get method.

- xml.sax.expatreader supports the lexical handler property; it
  generates comment, startCDATA, and endCDATA events.

Windows changes

- Build procedure:  the zlib project is built in a different way that
  ensures the zlib header files used can no longer get out of synch with
  the zlib binary used.  See PCbuild\readme.txt for details.  Your old
  zlib-related directories can be deleted; you'll need to download fresh
  source for zlib and unpack it into a new directory.

- Build:  New subproject _test for the benefit of test_capi.py (see above).

- Build:  New subproject _symtable, for new DLL _symtable.pyd (a nascent
  interface to some Python compiler internals).

- Build:  Subproject ucnhash is gone, since the code was folded into the
  unicodedata subproject.

What's New in Python 2.1 alpha 1?
=================================

Core language, builtins, and interpreter

- There is a new Unicode companion to the PyObject_Str() API
  called PyObject_Unicode(). It behaves in the same way as the
  former, but assures that the returned value is a Unicode object
  (applying the usual coercion if necessary).

- The comparison operators support "rich comparison overloading" (PEP
  207).  C extension types can provide a rich comparison function in
  the new tp_richcompare slot in the type object.  The cmp() function
  and the C function PyObject_Compare() first try the new rich
  comparison operators before trying the old 3-way comparison.  There
  is also a new C API PyObject_RichCompare() (which also falls back on
  the old 3-way comparison, but does not constrain the outcome of the
  rich comparison to a Boolean result).

  The rich comparison function takes two objects (at least one of
  which is guaranteed to have the type that provided the function) and
  an integer indicating the opcode, which can be Py_LT, Py_LE, Py_EQ,
  Py_NE, Py_GT, Py_GE (for <, <=, ==, !=, >, >=), and returns a Python
  object, which may be NotImplemented (in which case the tp_compare
  slot function is used as a fallback, if defined).

  Classes can overload individual comparison operators by defining one
  or more of the methods__lt__, __le__, __eq__, __ne__, __gt__,
  __ge__.  There are no explicit "reflected argument" versions of
  these; instead, __lt__ and __gt__ are each other's reflection,
  likewise for__le__ and __ge__; __eq__ and __ne__ are their own
  reflection (similar at the C level).  No other implications are
  made; in particular, Python does not assume that == is the Boolean
  inverse of !=, or that < is the Boolean inverse of >=.  This makes
  it possible to define types with partial orderings.

  Classes or types that want to implement (in)equality tests but not
  the ordering operators (i.e. unordered types) should implement ==
  and !=, and raise an error for the ordering operators.

  It is possible to define types whose rich comparison results are not
  Boolean; e.g. a matrix type might want to return a matrix of bits
  for A < B, giving elementwise comparisons.  Such types should ensure
  that any interpretation of their value in a Boolean context raises
  an exception, e.g. by defining __nonzero__ (or the tp_nonzero slot
  at the C level) to always raise an exception.

- Complex numbers use rich comparisons to define == and != but raise
  an exception for <, <=, > and >=.  Unfortunately, this also means
  that cmp() of two complex numbers raises an exception when the two
  numbers differ.  Since it is not mathematically meaningful to compare
  complex numbers except for equality, I hope that this doesn't break
  too much code.

- The outcome of comparing non-numeric objects of different types is
  not defined by the language, other than that it's arbitrary but
  consistent (see the Reference Manual).  An implementation detail changed
  in 2.1a1 such that None now compares less than any other object.  Code
  relying on this new behavior (like code that relied on the previous
  behavior) does so at its own risk.

- Functions and methods now support getting and setting arbitrarily
  named attributes (PEP 232).  Functions have a new __dict__
  (a.k.a. func_dict) which hold the function attributes.  Methods get
  and set attributes on their underlying im_func.  It is a TypeError
  to set an attribute on a bound method.

- The xrange() object implementation has been improved so that
  xrange(sys.maxint) can be used on 64-bit platforms.  There's still a
  limitation that in this case len(xrange(sys.maxint)) can't be
  calculated, but the common idiom "for i in xrange(sys.maxint)" will
  work fine as long as the index i doesn't actually reach 2**31.
  (Python uses regular ints for sequence and string indices; fixing
  that is much more work.)

- Two changes to from...import:

  1) "from M import X" now works even if (after loading module M)
     sys.modules['M'] is not a real module; it's basically a getattr()
     operation with AttributeError exceptions changed into ImportError.

  2) "from M import *" now looks for M.__all__ to decide which names to
     import; if M.__all__ doesn't exist, it uses M.__dict__.keys() but
     filters out names starting with '_' as before.  Whether or not
     __all__ exists, there's no restriction on the type of M.

- File objects have a new method, xreadlines().  This is the fastest
  way to iterate over all lines in a file:

  for line in file.xreadlines():
      ...do something to line...

  See the xreadlines module (mentioned below) for how to do this for
  other file-like objects.

- Even if you don't use file.xreadlines(), you may expect a speedup on
  line-by-line input.  The file.readline() method has been optimized
  quite a bit in platform-specific ways:  on systems (like Linux) that
  support flockfile(), getc_unlocked(), and funlockfile(), those are
  used by default.  On systems (like Windows) without getc_unlocked(),
  a complicated (but still thread-safe) method using fgets() is used by
  default.

  You can force use of the fgets() method by #define'ing
  USE_FGETS_IN_GETLINE at build time (it may be faster than
  getc_unlocked()).

  You can force fgets() not to be used by #define'ing
  DONT_USE_FGETS_IN_GETLINE (this is the first thing to try if std test
  test_bufio.py fails -- and let us know if it does!).

- In addition, the fileinput module, while still slower than the other
  methods on most platforms, has been sped up too, by using
  file.readlines(sizehint).

- Support for run-time warnings has been added, including a new
  command line option (-W) to specify the disposition of warnings.
  See the description of the warnings module below.

- Extensive changes have been made to the coercion code.  This mostly
  affects extension modules (which can now implement mixed-type
  numerical operators without having to use coercion), but
  occasionally, in boundary cases the coercion semantics have changed
  subtly.  Since this was a terrible gray area of the language, this
  is considered an improvement.  Also note that __rcmp__ is no longer
  supported -- instead of calling __rcmp__, __cmp__ is called with
  reflected arguments.

- In connection with the coercion changes, a new built-in singleton
  object, NotImplemented is defined.  This can be returned for
  operations that wish to indicate they are not implemented for a
  particular combination of arguments.  From C, this is
  Py_NotImplemented.

- The interpreter accepts now bytecode files on the command line even
  if they do not have a .pyc or .pyo extension. On Linux, after executing

import imp,sys,string
magic = string.join(["\\x%.2x" % ord(c) for c in imp.get_magic()],"")
reg = ':pyc:M::%s::%s:' % (magic, sys.executable)
open("/proc/sys/fs/binfmt_misc/register","wb").write(reg)

  any byte code file can be used as an executable (i.e. as an argument
  to execve(2)).

- %[xXo] formats of negative Python longs now produce a sign
  character.  In 1.6 and earlier, they never produced a sign,
  and raised an error if the value of the long was too large
  to fit in a Python int.  In 2.0, they produced a sign if and
  only if too large to fit in an int.  This was inconsistent
  across platforms (because the size of an int varies across
  platforms), and inconsistent with hex() and oct().  Example:

  >>> "%x" % -0x42L
  '-42'      # in 2.1
  'ffffffbe' # in 2.0 and before, on 32-bit machines
  >>> hex(-0x42L)
  '-0x42L'   # in all versions of Python

  The behavior of %d formats for negative Python longs remains
  the same as in 2.0 (although in 1.6 and before, they raised
  an error if the long didn't fit in a Python int).

  %u formats don't make sense for Python longs, but are allowed
  and treated the same as %d in 2.1.  In 2.0, a negative long
  formatted via %u produced a sign if and only if too large to
  fit in an int.  In 1.6 and earlier, a negative long formatted
  via %u raised an error if it was too big to fit in an int.

- Dictionary objects have an odd new method, popitem().  This removes
  an arbitrary item from the dictionary and returns it (in the form of
  a (key, value) pair).  This can be useful for algorithms that use a
  dictionary as a bag of "to do" items and repeatedly need to pick one
  item.  Such algorithms normally end up running in quadratic time;
  using popitem() they can usually be made to run in linear time.

Standard library

- In the time module, the time argument to the functions strftime,
  localtime, gmtime, asctime and ctime is now optional, defaulting to
  the current time (in the local timezone).

- The ftplib module now defaults to passive mode, which is deemed a
  more useful default given that clients are often inside firewalls
  these days.  Note that this could break if ftplib is used to connect
  to a *server* that is inside a firewall, from outside; this is
  expected to be a very rare situation.  To fix that, you can call
  ftp.set_pasv(0).

- The module site now treats .pth files not only for path configuration,
  but also supports extensions to the initialization code: Lines starting
  with import are executed.

- There's a new module, warnings, which implements a mechanism for
  issuing and filtering warnings.  There are some new built-in
  exceptions that serve as warning categories, and a new command line
  option, -W, to control warnings (e.g. -Wi ignores all warnings, -We
  turns warnings into errors).  warnings.warn(message[, category])
  issues a warning message; this can also be called from C as
  PyErr_Warn(category, message).

- A new module xreadlines was added.  This exports a single factory
  function, xreadlines().  The intention is that this code is the
  absolutely fastest way to iterate over all lines in an open
  file(-like) object:

  import xreadlines
  for line in xreadlines.xreadlines(file):
      ...do something to line...

  This is equivalent to the previous the speed record holder using
  file.readlines(sizehint).  Note that if file is a real file object
  (as opposed to a file-like object), this is equivalent:

  for line in file.xreadlines():
      ...do something to line...

- The bisect module has new functions bisect_left, insort_left,
  bisect_right and insort_right.  The old names bisect and insort
  are now aliases for bisect_right and insort_right.  XXX_right
  and XXX_left methods differ in what happens when the new element
  compares equal to one or more elements already in the list:  the
  XXX_left methods insert to the left, the XXX_right methods to the
  right.  Code that doesn't care where equal elements end up should
  continue to use the old, short names ("bisect" and "insort").

- The new curses.panel module wraps the panel library that forms part
  of SYSV curses and ncurses.  Contributed by Thomas Gellekum.

- The SocketServer module now sets the allow_reuse_address flag by
  default in the TCPServer class.

- A new function, sys._getframe(), returns the stack frame pointer of
  the caller.  This is intended only as a building block for
  higher-level mechanisms such as string interpolation.

- The pyexpat module supports a number of new handlers, which are
  available only in expat 1.2. If invocation of a callback fails, it
  will report an additional frame in the traceback. Parser objects
  participate now in garbage collection. If expat reports an unknown
  encoding, pyexpat will try to use a Python codec; that works only
  for single-byte charsets. The parser type objects is exposed as
  XMLParserObject.

- xml.dom now offers standard definitions for symbolic node type and
  exception code constants, and a hierarchy of DOM exceptions. minidom
  was adjusted to use them.

- The conformance of xml.dom.minidom to the DOM specification was
  improved. It detects a number of additional error cases; the
  previous/next relationship works even when the tree is modified;
  Node supports the normalize() method; NamedNodeMap, DocumentType and
  DOMImplementation classes were added; Element supports the
  hasAttribute and hasAttributeNS methods; and Text supports the splitText
  method.

Build issues

- For Unix (and Unix-compatible) builds, configuration and building of
  extension modules is now greatly automated.  Rather than having to
  edit the Modules/Setup file to indicate which modules should be
  built and where their include files and libraries are, a
  distutils-based setup.py script now takes care of building most
  extension modules.  All extension modules built this way are built
  as shared libraries.  Only a few modules that must be linked
  statically are still listed in the Setup file; you won't need to
  edit their configuration.

- Python should now build out of the box on Cygwin.  If it doesn't,
  mail to Jason Tishler (jlt63 at users.sourceforge.net).

- Python now always uses its own (renamed) implementation of getopt()
  -- there's too much variation among C library getopt()
  implementations.

- C++ compilers are better supported; the CXX macro is always set to a
  C++ compiler if one is found.

Windows changes

- select module:  By default under Windows, a select() call
  can specify no more than 64 sockets.  Python now boosts
  this Microsoft default to 512.  If you need even more than
  that, see the MS docs (you'll need to #define FD_SETSIZE
  and recompile Python from source).

- Support for Windows 3.1, DOS and OS/2 is gone.  The Lib/dos-8x3
  subdirectory is no more!


What's New in Python 2.0?
=========================

Below is a list of all relevant changes since release 1.6.  Older
changes are in the file HISTORY.  If you are making the jump directly
from Python 1.5.2 to 2.0, make sure to read the section for 1.6 in the
HISTORY file!  Many important changes listed there.

Alternatively, a good overview of the changes between 1.5.2 and 2.0 is
the document "What's New in Python 2.0" by Kuchling and Moshe Zadka:
http://www.amk.ca/python/2.0/.

--Guido van Rossum (home page: http://www.pythonlabs.com/~guido/)

======================================================================

What's new in 2.0 (since release candidate 1)?
==============================================

Standard library

- The copy_reg module was modified to clarify its intended use: to
  register pickle support for extension types, not for classes.
  pickle() will raise a TypeError if it is passed a class.

- Fixed a bug in gettext's "normalize and expand" code that prevented
  it from finding an existing .mo file.

- Restored support for HTTP/0.9 servers in httplib.

- The math module was changed to stop raising OverflowError in case of
  underflow, and return 0 instead in underflow cases.  Whether Python
  used to raise OverflowError in case of underflow was platform-
  dependent (it did when the platform math library set errno to ERANGE
  on underflow).

- Fixed a bug in StringIO that occurred when the file position was not
  at the end of the file and write() was called with enough data to
  extend past the end of the file.

- Fixed a bug that caused Tkinter error messages to get lost on
  Windows.  The bug was fixed by replacing direct use of
  interp->result with Tcl_GetStringResult(interp).

- Fixed bug in urllib2 that caused it to fail when it received an HTTP
  redirect response.

- Several changes were made to distutils: Some debugging code was
  removed from util.  Fixed the installer used when an external zip
  program (like WinZip) is not found; the source code for this
  installer is in Misc/distutils.  check_lib() was modified to behave
  more like AC_CHECK_LIB by add other_libraries() as a parameter.  The
  test for whether installed modules are on sys.path was changed to
  use both normcase() and normpath().

- Several minor bugs were fixed in the xml package (the minidom,
  pulldom, expatreader, and saxutils modules).

- The regression test driver (regrtest.py) behavior when invoked with
  -l changed: It now reports a count of objects that are recognized as
  garbage but not freed by the garbage collector.

- The regression test for the math module was changed to test
  exceptional behavior when the test is run in verbose mode.  Python
  cannot yet guarantee consistent exception behavior across platforms,
  so the exception part of test_math is run only in verbose mode, and
  may fail on your platform.

Internals

- PyOS_CheckStack() has been disabled on Win64, where it caused
  test_sre to fail.

Build issues

- Changed compiler flags, so that gcc is always invoked with -Wall and
  -Wstrict-prototypes.  Users compiling Python with GCC should see
  exactly one warning, except if they have passed configure the
  --with-pydebug flag.  The expected warning is for getopt() in
  Modules/main.c.  This warning will be fixed for Python 2.1.

- Fixed configure to add -threads argument during linking on OSF1.

Tools and other miscellany

- The compiler in Tools/compiler was updated to support the new
  language features introduced in 2.0: extended print statement, list
  comprehensions, and augmented assignments.  The new compiler should
  also be backwards compatible with Python 1.5.2; the compiler will
  always generate code for the version of the interpreter it runs
  under.

What's new in 2.0 release candidate 1 (since beta 2)?
=====================================================

What is release candidate 1?

We believe that release candidate 1 will fix all known bugs that we
intend to fix for the 2.0 final release.  This release should be a bit
more stable than the previous betas.  We would like to see even more
widespread testing before the final release, so we are producing this
release candidate.  The final release will be exactly the same unless
any show-stopping (or brown bag) bugs are found by testers of the
release candidate.

All the changes since the last beta release are bug fixes or changes
to support building Python for specific platforms.

Core language, builtins, and interpreter

- A bug that caused crashes when __coerce__ was used with augmented
  assignment, e.g. +=, was fixed.

- Raise ZeroDivisionError when raising zero to a negative number,
  e.g. 0.0 ** -2.0.  Note that math.pow is unrelated to the built-in
  power operator and the result of math.pow(0.0, -2.0) will vary by
  platform.  On Linux, it raises a ValueError.

- A bug in Unicode string interpolation was fixed that occasionally
  caused errors with formats including "%%".  For example, the
  following expression "%% %s" % u"abc" no longer raises a TypeError.

- Compilation of deeply nested expressions raises MemoryError instead
  of SyntaxError, e.g. eval("[" * 50 + "]" * 50).

- In 2.0b2 on Windows, the interpreter wrote .pyc files in text mode,
  rendering them useless.  They are now written in binary mode again.

Standard library

- Keyword arguments are now accepted for most pattern and match object
  methods in SRE, the standard regular expression engine.

- In SRE, fixed error with negative lookahead and lookbehind that
  manifested itself as a runtime error in patterns like "(?<!abc)(def)".

- Several bugs in the Unicode handling and error handling in _tkinter
  were fixed.

- Fix memory management errors in Merge() and Tkapp_Call() routines.

- Several changes were made to cStringIO to make it compatible with
  the file-like object interface and with StringIO.  If operations are
  performed on a closed object, an exception is raised.  The truncate
  method now accepts a position argument and readline accepts a size
  argument.

- There were many changes made to the linuxaudiodev module and its
  test suite; as a result, a short, unexpected audio sample should now
  play when the regression test is run.

  Note that this module is named poorly, because it should work
  correctly on any platform that supports the Open Sound System
  (OSS).

  The module now raises exceptions when errors occur instead of
  crashing.  It also defines the AFMT_A_LAW format (logarithmic A-law
  audio) and defines a getptr() method that calls the
  SNDCTL_DSP_GETxPTR ioctl defined in the OSS Programmer's Guide.

- The library_version attribute, introduced in an earlier beta, was
  removed because it can not be supported with early versions of the C
  readline library, which provides no way to determine the version at
  compile-time.

- The binascii module is now enabled on Win64.

- tokenize.py no longer suffers "recursion depth" errors when parsing
  programs with very long string literals.

Internals

- Fixed several buffer overflow vulnerabilities in calculate_path(),
  which is called when the interpreter starts up to determine where
  the standard library is installed.  These vulnerabilities affect all
  previous versions of Python and can be exploited by setting very
  long values for PYTHONHOME or argv[0].  The risk is greatest for a
  setuid Python script, although use of the wrapper in
  Misc/setuid-prog.c will eliminate the vulnerability.

- Fixed garbage collection bugs in instance creation that were
  triggered when errors occurred during initialization.  The solution,
  applied in cPickle and in PyInstance_New(), is to call
  PyObject_GC_Init() after the initialization of the object's
  container attributes is complete.

- pyexpat adds definitions of PyModule_AddStringConstant and
  PyModule_AddObject if the Python version is less than 2.0, which
  provides compatibility with PyXML on Python 1.5.2.

- If the platform has a bogus definition for LONG_BIT (the number of
  bits in a long), an error will be reported at compile time.

- Fix bugs in _PyTuple_Resize() which caused hard-to-interpret garbage
  collection crashes and possibly other, unreported crashes.

- Fixed a memory leak in _PyUnicode_Fini().

Build issues

- configure now accepts a --with-suffix option that specifies the
  executable suffix.  This is useful for builds on Cygwin and Mac OS
  X, for example.

- The mmap.PAGESIZE constant is now initialized using sysconf when
  possible, which eliminates a dependency on -lucb for Reliant UNIX.

- The md5 file should now compile on all platforms.

- The select module now compiles on platforms that do not define
  POLLRDNORM and related constants.

- Darwin (Mac OS X):  Initial support for static builds on this
  platform.

- BeOS: A number of changes were made to the build and installation
  process.  ar-fake now operates on a directory of object files.
  dl_export.h is gone, and its macros now appear on the mwcc command
  line during build on PPC BeOS.

- Platform directory in lib/python2.0 is "plat-beos5" (or
  "plat-beos4", if building on BeOS 4.5), rather than "plat-beos".

- Cygwin: Support for shared libraries, Tkinter, and sockets.

- SunOS 4.1.4_JL: Fix test for directory existence in configure.

Tools and other miscellany

- Removed debugging prints from main used with freeze.

- IDLE auto-indent no longer crashes when it encounters Unicode
  characters.

What's new in 2.0 beta 2 (since beta 1)?
========================================

Core language, builtins, and interpreter

- Add support for unbounded ints in %d,i,u,x,X,o formats; for example
  "%d" % 2L**64 == "18446744073709551616".

- Add -h and -V command line options to print the usage message and
  Python version number and exit immediately.

- eval() and exec accept Unicode objects as code parameters.

- getattr() and setattr() now also accept Unicode objects for the
  attribute name, which are converted to strings using the default
  encoding before lookup.

- Multiplication on string and Unicode now does proper bounds
  checking; e.g. 'a' * 65536 * 65536 will raise ValueError, "repeated
  string is too long."

- Better error message when continue is found in try statement in a
  loop.


Standard library and extensions

- socket module: the OpenSSL code now adds support for RAND_status()
  and EGD (Entropy Gathering Device).

- array: reverse() method of array now works.  buffer_info() now does
  argument checking; it still takes no arguments.

- asyncore/asynchat: Included most recent version from Sam Rushing.

- cgi: Accept '&' or ';' as separator characters when parsing form data.

- CGIHTTPServer: Now works on Windows (and perhaps even Mac).

- ConfigParser: When reading the file, options spelled in upper case
  letters are now correctly converted to lowercase.

- copy: Copy Unicode objects atomically.

- cPickle: Fail gracefully when copy_reg can't be imported.

- cStringIO: Implemented readlines() method.

- dbm: Add get() and setdefault() methods to dbm object.  Add constant
  `library' to module that names the library used.  Added doc strings
  and method names to error messages.  Uses configure to determine
  which ndbm.h file to include; Berkeley DB's nbdm and GDBM's ndbm is
  now available options.

- distutils: Update to version 0.9.3.

- dl: Add several dl.RTLD_ constants.

- fpectl: Now supported on FreeBSD.

- gc: Add DEBUG_SAVEALL option.  When enabled all garbage objects
  found by the collector will be saved in gc.garbage.  This is useful
  for debugging a program that creates reference cycles.

- httplib: Three changes: Restore support for set_debuglevel feature
  of HTTP class.  Do not close socket on zero-length response.  Do not
  crash when server sends invalid content-length header.

- mailbox: Mailbox class conforms better to qmail specifications.

- marshal: When reading a short, sign-extend on platforms where shorts
  are bigger than 16 bits.  When reading a long, repair the unportable
  sign extension that was being done for 64-bit machines.  (It assumed
  that signed right shift sign-extends.)

- operator: Add contains(), invert(), __invert__() as aliases for
  __contains__(), inv(), and __inv__() respectively.

- os: Add support for popen2() and popen3() on all platforms where
  fork() exists.  (popen4() is still in the works.)

- os: (Windows only:) Add startfile() function that acts like double-
  clicking on a file in Explorer (or passing the file name to the
  DOS "start" command).

- os.path: (Windows, DOS:) Treat trailing colon correctly in
  os.path.join.  os.path.join("a:", "b") yields "a:b".

- pickle: Now raises ValueError when an invalid pickle that contains
  a non-string repr where a string repr was expected.  This behavior
  matches cPickle.

- posixfile: Remove broken __del__() method.

- py_compile: support CR+LF line terminators in source file.

- readline: Does not immediately exit when ^C is hit when readline and
  threads are configured.  Adds definition of rl_library_version.  (The
  latter addition requires GNU readline 2.2 or later.)

- rfc822: Domain literals returned by AddrlistClass method
  getdomainliteral() are now properly wrapped in brackets.

- site: sys.setdefaultencoding() should only be called in case the
  standard default encoding ("ascii") is changed. This saves quite a
  few cycles during startup since the first call to
  setdefaultencoding() will initialize the codec registry and the
  encodings package.

- socket: Support for size hint in readlines() method of object returned
  by makefile().

- sre: Added experimental expand() method to match objects.  Does not
  use buffer interface on Unicode strings.  Does not hang if group id
  is followed by whitespace.

- StringIO: Size hint in readlines() is now supported as documented.

- struct: Check ranges for bytes and shorts.

- urllib: Improved handling of win32 proxy settings. Fixed quote and
  quote_plus functions so that the always encode a comma.

- Tkinter: Image objects are now guaranteed to have unique ids.  Set
  event.delta to zero if Tk version doesn't support mousewheel.
  Removed some debugging prints.

- UserList: now implements __contains__().

- webbrowser: On Windows, use os.startfile() instead of os.popen(),
  which works around a bug in Norton AntiVirus 2000 that leads directly
  to a Blue Screen freeze.

- xml: New version detection code allows PyXML to override standard
  XML package if PyXML version is greater than 0.6.1.

- xml.dom: DOM level 1 support for basic XML.  Includes xml.dom.minidom
  (conventional DOM), and xml.dom.pulldom, which allows building the DOM
  tree only for nodes which are sufficiently interesting to a specific
  application.  Does not provide the HTML-specific extensions.  Still
  undocumented.

- xml.sax: SAX 2 support for Python, including all the handler
  interfaces needed to process XML 1.0 compliant XML.  Some
  documentation is already available.

- pyexpat: Renamed to xml.parsers.expat since this is part of the new,
  packagized XML support.


C API

- Add three new convenience functions for module initialization --
  PyModule_AddObject(), PyModule_AddIntConstant(), and
  PyModule_AddStringConstant().

- Cleaned up definition of NULL in C source code; all definitions were
  removed and add #error to Python.h if NULL isn't defined after
  #include of stdio.h.

- Py_PROTO() macros that were removed in 2.0b1 have been restored for
  backwards compatibility (at the source level) with old extensions.

- A wrapper API was added for signal() and sigaction().  Instead of
  either function, always use PyOS_getsig() to get a signal handler
  and PyOS_setsig() to set one.  A new convenience typedef
  PyOS_sighandler_t is defined for the type of signal handlers.

- Add PyString_AsStringAndSize() function that provides access to the
  internal data buffer and size of a string object -- or the default
  encoded version of a Unicode object.

- PyString_Size() and PyString_AsString() accept Unicode objects.

- The standard header <limits.h> is now included by Python.h (if it
  exists).  INT_MAX and LONG_MAX will always be defined, even if
  <limits.h> is not available.

- PyFloat_FromString takes a second argument, pend, that was
  effectively useless.  It is now officially useless but preserved for
  backwards compatibility.  If the pend argument is not NULL, *pend is
  set to NULL.

- PyObject_GetAttr() and PyObject_SetAttr() now accept Unicode objects
  for the attribute name.  See note on getattr() above.

- A few bug fixes to argument processing for Unicode.
  PyArg_ParseTupleAndKeywords() now accepts "es#" and "es".
  PyArg_Parse() special cases "s#" for Unicode objects; it returns a
  pointer to the default encoded string data instead of to the raw
  UTF-16.

- Py_BuildValue accepts B format (for bgen-generated code).


Internals

- On Unix, fix code for finding Python installation directory so that
  it works when argv[0] is a relative path.

- Added a true unicode_internal_encode() function and fixed the
  unicode_internal_decode function() to support Unicode objects directly
  rather than by generating a copy of the object.

- Several of the internal Unicode tables are much smaller now, and
  the source code should be much friendlier to weaker compilers.

- In the garbage collector: Fixed bug in collection of tuples.  Fixed
  bug that caused some instances to be removed from the container set
  while they were still live.  Fixed parsing in gc.set_debug() for
  platforms where sizeof(long) > sizeof(int).

- Fixed refcount problem in instance deallocation that only occurred
  when Py_REF_DEBUG was defined and Py_TRACE_REFS was not.

- On Windows, getpythonregpath is now protected against null data in
  registry key.

- On Unix, create .pyc/.pyo files with O_EXCL flag to avoid a race
  condition.


Build and platform-specific issues

- Better support of GNU Pth via --with-pth configure option.

- Python/C API now properly exposed to dynamically-loaded extension
  modules on Reliant UNIX.

- Changes for the benefit of SunOS 4.1.4 (really!).  mmapmodule.c:
  Don't define MS_SYNC to be zero when it is undefined.  Added missing
  prototypes in posixmodule.c.

- Improved support for HP-UX build.  Threads should now be correctly
  configured (on HP-UX 10.20 and 11.00).

- Fix largefile support on older NetBSD systems and OpenBSD by adding
  define for TELL64.


Tools and other miscellany

- ftpmirror: Call to main() is wrapped in if __name__ == "__main__".

- freeze: The modulefinder now works with 2.0 opcodes.

- IDLE:
  Move hackery of sys.argv until after the Tk instance has been
  created, which allows the application-specific Tkinter
  initialization to be executed if present; also pass an explicit
  className parameter to the Tk() constructor.


What's new in 2.0 beta 1?
=========================

Source Incompatibilities
------------------------

None.  Note that 1.6 introduced several incompatibilities with 1.5.2,
such as single-argument append(), connect() and bind(), and changes to
str(long) and repr(float).


Binary Incompatibilities
------------------------

- Third party extensions built for Python 1.5.x or 1.6 cannot be used
with Python 2.0; these extensions will have to be rebuilt for Python
2.0.

- On Windows, attempting to import a third party extension built for
Python 1.5.x or 1.6 results in an immediate crash; there's not much we
can do about this.  Check your PYTHONPATH environment variable!

- Python bytecode files (*.pyc and *.pyo) are not compatible between
releases.


Overview of Changes Since 1.6
-----------------------------

There are many new modules (including brand new XML support through
the xml package, and i18n support through the gettext module); a list
of all new modules is included below.  Lots of bugs have been fixed.

The process for making major new changes to the language has changed
since Python 1.6.  Enhancements must now be documented by a Python
Enhancement Proposal (PEP) before they can be accepted.

There are several important syntax enhancements, described in more
detail below:

  - Augmented assignment, e.g. x += 1

  - List comprehensions, e.g. [x**2 for x in range(10)]

  - Extended import statement, e.g. import Module as Name

  - Extended print statement, e.g. print >> file, "Hello"

Other important changes:

  - Optional collection of cyclical garbage

Python Enhancement Proposal (PEP)
---------------------------------

PEP stands for Python Enhancement Proposal.  A PEP is a design
document providing information to the Python community, or describing
a new feature for Python.  The PEP should provide a concise technical
specification of the feature and a rationale for the feature.

We intend PEPs to be the primary mechanisms for proposing new
features, for collecting community input on an issue, and for
documenting the design decisions that have gone into Python.  The PEP
author is responsible for building consensus within the community and
documenting dissenting opinions.

The PEPs are available at http://python.sourceforge.net/peps/.

Augmented Assignment
--------------------

This must have been the most-requested feature of the past years!
Eleven new assignment operators were added:

    += -= *= /= %= **= <<= >>= &= ^= |=

For example,

    A += B

is similar to

    A = A + B

except that A is evaluated only once (relevant when A is something
like dict[index].attr).

However, if A is a mutable object, A may be modified in place.  Thus,
if A is a number or a string, A += B has the same effect as A = A+B
(except A is only evaluated once); but if a is a list, A += B has the
same effect as A.extend(B)!

Classes and built-in object types can override the new operators in
order to implement the in-place behavior; the not-in-place behavior is
used automatically as a fallback when an object doesn't implement the
in-place behavior.  For classes, the method name is derived from the
method name for the corresponding not-in-place operator by inserting
an 'i' in front of the name, e.g. __iadd__ implements in-place
__add__.

Augmented assignment was implemented by Thomas Wouters.


List Comprehensions
-------------------

This is a flexible new notation for lists whose elements are computed
from another list (or lists).  The simplest form is:

    [<expression> for <variable> in <sequence>]

For example, [i**2 for i in range(4)] yields the list [0, 1, 4, 9].
This is more efficient than a for loop with a list.append() call.

You can also add a condition:

    [<expression> for <variable> in <sequence> if <condition>]

For example, [w for w in words if w == w.lower()] would yield the list
of words that contain no uppercase characters.  This is more efficient
than a for loop with an if statement and a list.append() call.

You can also have nested for loops and more than one 'if' clause.  For
example, here's a function that flattens a sequence of sequences::

    def flatten(seq):
        return [x for subseq in seq for x in subseq]

    flatten([[0], [1,2,3], [4,5], [6,7,8,9], []])

This prints

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

List comprehensions originated as a patch set from Greg Ewing; Skip
Montanaro and Thomas Wouters also contributed.  Described by PEP 202.


Extended Import Statement
-------------------------

Many people have asked for a way to import a module under a different
name.  This can be accomplished like this:

    import foo
    bar = foo
    del foo

but this common idiom gets old quickly.  A simple extension of the
import statement now allows this to be written as follows:

    import foo as bar

There's also a variant for 'from ... import':

    from foo import bar as spam

This also works with packages; e.g. you can write this:

    import test.regrtest as regrtest

Note that 'as' is not a new keyword -- it is recognized only in this
context (this is only possible because the syntax for the import
statement doesn't involve expressions).

Implemented by Thomas Wouters.  Described by PEP 221.


Extended Print Statement
------------------------

Easily the most controversial new feature, this extension to the print
statement adds an option to make the output go to a different file
than the default sys.stdout.

For example, to write an error message to sys.stderr, you can now
write:

    print >> sys.stderr, "Error: bad dog!"

As a special feature, if the expression used to indicate the file
evaluates to None, the current value of sys.stdout is used.  Thus:

    print >> None, "Hello world"

is equivalent to

    print "Hello world"

Design and implementation by Barry Warsaw.  Described by PEP 214.


Optional Collection of Cyclical Garbage
---------------------------------------

Python is now equipped with a garbage collector that can hunt down
cyclical references between Python objects.  It's no replacement for
reference counting; in fact, it depends on the reference counts being
correct, and decides that a set of objects belong to a cycle if all
their reference counts can be accounted for from their references to
each other.  This devious scheme was first proposed by Eric Tiedemann,
and brought to implementation by Neil Schemenauer.

There's a module "gc" that lets you control some parameters of the
garbage collection.  There's also an option to the configure script
that lets you enable or disable the garbage collection.  In 2.0b1,
it's on by default, so that we (hopefully) can collect decent user
experience with this new feature.  There are some questions about its
performance.  If it proves to be too much of a problem, we'll turn it
off by default in the final 2.0 release.


Smaller Changes
---------------

A new function zip() was added.  zip(seq1, seq2, ...) is equivalent to
map(None, seq1, seq2, ...) when the sequences have the same length;
i.e. zip([1,2,3], [10,20,30]) returns [(1,10), (2,20), (3,30)].  When
the lists are not all the same length, the shortest list wins:
zip([1,2,3], [10,20]) returns [(1,10), (2,20)].  See PEP 201.

sys.version_info is a tuple (major, minor, micro, level, serial).

Dictionaries have an odd new method, setdefault(key, default).
dict.setdefault(key, default) returns dict[key] if it exists; if not,
it sets dict[key] to default and returns that value.  Thus:

    dict.setdefault(key, []).append(item)

does the same work as this common idiom:

    if not dict.has_key(key):
        dict[key] = []
    dict[key].append(item)

There are two new variants of SyntaxError that are raised for
indentation-related errors: IndentationError and TabError.

Changed \x to consume exactly two hex digits; see PEP 223.  Added \U
escape that consumes exactly eight hex digits.

The limits on the size of expressions and file in Python source code
have been raised from 2**16 to 2**32.  Previous versions of Python
were limited because the maximum argument size the Python VM accepted
was 2**16.  This limited the size of object constructor expressions,
e.g. [1,2,3] or {'a':1, 'b':2}, and the size of source files.  This
limit was raised thanks to a patch by Charles Waldman that effectively
fixes the problem.  It is now much more likely that you will be
limited by available memory than by an arbitrary limit in Python.

The interpreter's maximum recursion depth can be modified by Python
programs using sys.getrecursionlimit and sys.setrecursionlimit.  This
limit is the maximum number of recursive calls that can be made by
Python code.  The limit exists to prevent infinite recursion from
overflowing the C stack and causing a core dump.  The default value is
1000.  The maximum safe value for a particular platform can be found
by running Tools/scripts/find_recursionlimit.py.

New Modules and Packages
------------------------

atexit - for registering functions to be called when Python exits.

imputil - Greg Stein's alternative API for writing custom import
hooks.

pyexpat - an interface to the Expat XML parser, contributed by Paul
Prescod.

xml - a new package with XML support code organized (so far) in three
subpackages: xml.dom, xml.sax, and xml.parsers.  Describing these
would fill a volume.  There's a special feature whereby a
user-installed package named _xmlplus overrides the standard
xmlpackage; this is intended to give the XML SIG a hook to distribute
backwards-compatible updates to the standard xml package.

webbrowser - a platform-independent API to launch a web browser.


Changed Modules
---------------

array -- new methods for array objects: count, extend, index, pop, and
remove

binascii -- new functions b2a_hex and a2b_hex that convert between
binary data and its hex representation

calendar -- Many new functions that support features including control
over which day of the week is the first day, returning strings instead
of printing them.  Also new symbolic constants for days of week,
e.g. MONDAY, ..., SUNDAY.

cgi -- FieldStorage objects have a getvalue method that works like a
dictionary's get method and returns the value attribute of the object.

ConfigParser -- The parser object has new methods has_option,
remove_section, remove_option, set, and write.  They allow the module
to be used for writing config files as well as reading them.

ftplib -- ntransfercmd(), transfercmd(), and retrbinary() all now
optionally support the RFC 959 REST command.

gzip -- readline and readlines now accept optional size arguments

httplib -- New interfaces and support for HTTP/1.1 by Greg Stein.  See
the module doc strings for details.

locale -- implement getdefaultlocale for Win32 and Macintosh

marshal -- no longer dumps core when marshaling deeply nested or
recursive data structures

os -- new functions isatty, seteuid, setegid, setreuid, setregid

os/popen2 -- popen2/popen3/popen4 support under Windows.  popen2/popen3
support under Unix.

os/pty -- support for openpty and forkpty

os.path -- fix semantics of os.path.commonprefix

smtplib -- support for sending very long messages

socket -- new function getfqdn()

readline -- new functions to read, write and truncate history files.
The readline section of the library reference manual contains an
example.

select -- add interface to poll system call

shutil -- new copyfileobj function

SimpleHTTPServer, CGIHTTPServer -- Fix problems with buffering in the
HTTP server.

Tkinter -- optimization of function flatten

urllib -- scans environment variables for proxy configuration,
e.g. http_proxy.

whichdb -- recognizes dumbdbm format


Obsolete Modules
----------------

None.  However note that 1.6 made a whole slew of modules obsolete:
stdwin, soundex, cml, cmpcache, dircache, dump, find, grep, packmail,
poly, zmod, strop, util, whatsound.


Changed, New, Obsolete Tools
----------------------------

None.


C-level Changes
---------------

Several cleanup jobs were carried out throughout the source code.

All C code was converted to ANSI C; we got rid of all uses of the
Py_PROTO() macro, which makes the header files a lot more readable.

Most of the portability hacks were moved to a new header file,
pyport.h; several other new header files were added and some old
header files were removed, in an attempt to create a more rational set
of header files.  (Few of these ever need to be included explicitly;
they are all included by Python.h.)

Trent Mick ensured portability to 64-bit platforms, under both Linux
and Win64, especially for the new Intel Itanium processor.  Mick also
added large file support for Linux64 and Win64.

The C APIs to return an object's size have been update to consistently
use the form PyXXX_Size, e.g. PySequence_Size and PyDict_Size.  In
previous versions, the abstract interfaces used PyXXX_Length and the
concrete interfaces used PyXXX_Size.  The old names,
e.g. PyObject_Length, are still available for backwards compatibility
at the API level, but are deprecated.

The PyOS_CheckStack function has been implemented on Windows by
Fredrik Lundh.  It prevents Python from failing with a stack overflow
on Windows.

The GC changes resulted in creation of two new slots on object,
tp_traverse and tp_clear.  The augmented assignment changes result in
the creation of a new slot for each in-place operator.

The GC API creates new requirements for container types implemented in
C extension modules.  See Include/objimpl.h for details.

PyErr_Format has been updated to automatically calculate the size of
the buffer needed to hold the formatted result string.  This change
prevents crashes caused by programmer error.

New C API calls: PyObject_AsFileDescriptor, PyErr_WriteUnraisable.

PyRun_AnyFileEx, PyRun_SimpleFileEx, PyRun_FileEx -- New functions
that are the same as their non-Ex counterparts except they take an
extra flag argument that tells them to close the file when done.

XXX There were other API changes that should be fleshed out here.


Windows Changes
---------------

New popen2/popen3/peopen4 in os module (see Changed Modules above).

os.popen is much more usable on Windows 95 and 98.  See Microsoft
Knowledge Base article Q150956.  The Win9x workaround described there
is implemented by the new w9xpopen.exe helper in the root of your
Python installation.  Note that Python uses this internally; it is not
a standalone program.

Administrator privileges are no longer required to install Python
on Windows NT or Windows 2000.  If you have administrator privileges,
Python's registry info will be written under HKEY_LOCAL_MACHINE.
Otherwise the installer backs off to writing Python's registry info
under HKEY_CURRENT_USER.  The latter is sufficient for all "normal"
uses of Python, but will prevent some advanced uses from working
(for example, running a Python script as an NT service, or possibly
from CGI).

[This was new in 1.6] The installer no longer runs a separate Tcl/Tk
installer; instead, it installs the needed Tcl/Tk files directly in the
Python directory.  If you already have a Tcl/Tk installation, this
wastes some disk space (about 4 Megs) but avoids problems with
conflicting Tcl/Tk installations, and makes it much easier for Python
to ensure that Tcl/Tk can find all its files.

[This was new in 1.6] The Windows installer now installs by default in
\Python20\ on the default volume, instead of \Program Files\Python-2.0\.


Updates to the changes between 1.5.2 and 1.6
--------------------------------------------

The 1.6 NEWS file can't be changed after the release is done, so here
is some late-breaking news:

New APIs in locale.py: normalize(), getdefaultlocale(), resetlocale(),
and changes to getlocale() and setlocale().

The new module is now enabled per default.

It is not true that the encodings codecs cannot be used for normal
strings: the string.encode() (which is also present on 8-bit strings
!) allows using them for 8-bit strings too, e.g. to convert files from
cp1252 (Windows) to latin-1 or vice-versa.

Japanese codecs are available from Tamito KAJIYAMA:
http://pseudo.grad.sccs.chukyo-u.ac.jp/~kajiyama/python/


======================================================================


=======================================
==> Release 1.6 (September 5, 2000) <==
=======================================

What's new in release 1.6?
==========================

Below is a list of all relevant changes since release 1.5.2.


Source Incompatibilities
------------------------

Several small incompatible library changes may trip you up:

  - The append() method for lists can no longer be invoked with more
  than one argument.  This used to append a single tuple made out of
  all arguments, but was undocumented.  To append a tuple, use
  e.g. l.append((a, b, c)).

  - The connect(), connect_ex() and bind() methods for sockets require
  exactly one argument.  Previously, you could call s.connect(host,
  port), but this was undocumented. You must now write
  s.connect((host, port)).

  - The str() and repr() functions are now different more often.  For
  long integers, str() no longer appends a 'L'.  Thus, str(1L) == '1',
  which used to be '1L'; repr(1L) is unchanged and still returns '1L'.
  For floats, repr() now gives 17 digits of precision, to ensure no
  precision is lost (on all current hardware).

  - The -X option is gone.  Built-in exceptions are now always
  classes.  Many more library modules also have been converted to
  class-based exceptions.


Binary Incompatibilities
------------------------

- Third party extensions built for Python 1.5.x cannot be used with
Python 1.6; these extensions will have to be rebuilt for Python 1.6.

- On Windows, attempting to import a third party extension built for
Python 1.5.x results in an immediate crash; there's not much we can do
about this.  Check your PYTHONPATH environment variable!


Overview of Changes since 1.5.2
-------------------------------

For this overview, I have borrowed from the document "What's New in
Python 2.0" by Andrew Kuchling and Moshe Zadka:
http://www.amk.ca/python/2.0/ .

There are lots of new modules and lots of bugs have been fixed.  A
list of all new modules is included below.

Probably the most pervasive change is the addition of Unicode support.
We've added a new fundamental datatype, the Unicode string, a new
built-in function unicode(), and numerous C APIs to deal with Unicode
and encodings.  See the file Misc/unicode.txt for details, or
http://starship.python.net/crew/lemburg/unicode-proposal.txt.

Two other big changes, related to the Unicode support, are the
addition of string methods and (yet another) new regular expression
engine.

  - String methods mean that you can now say s.lower() etc. instead of
  importing the string module and saying string.lower(s) etc.  One
  peculiarity is that the equivalent of string.join(sequence,
  delimiter) is delimiter.join(sequence).  Use " ".join(sequence) for
  the effect of string.join(sequence); to make this more readable, try
  space=" " first.  Note that the maxsplit argument defaults in
  split() and replace() have changed from 0 to -1.

  - The new regular expression engine, SRE by Fredrik Lundh, is fully
  backwards compatible with the old engine, and is in fact invoked
  using the same interface (the "re" module).  You can explicitly
  invoke the old engine by import pre, or the SRE engine by importing
  sre.  SRE is faster than pre, and supports Unicode (which was the
  main reason to put effort in yet another new regular expression
  engine -- this is at least the fourth!).


Other Changes
-------------

Other changes that won't break code but are nice to know about:

Deleting objects is now safe even for deeply nested data structures.

Long/int unifications: long integers can be used in seek() calls, as
slice indexes.

String formatting (s % args) has a new formatting option, '%r', which
acts like '%s' but inserts repr(arg) instead of str(arg). (Not yet in
alpha 1.)

Greg Ward's "distutils" package is included: this will make
installing, building and distributing third party packages much
simpler.

There's now special syntax that you can use instead of the apply()
function.  f(*args, **kwds) is equivalent to apply(f, args, kwds).
You can also use variations f(a1, a2, *args, **kwds) and you can leave
one or the other out: f(*args), f(**kwds).

The built-ins int() and long() take an optional second argument to
indicate the conversion base -- of course only if the first argument
is a string.  This makes string.atoi() and string.atol() obsolete.
(string.atof() was already obsolete).

When a local variable is known to the compiler but undefined when
used, a new exception UnboundLocalError is raised.  This is a class
derived from NameError so code catching NameError should still work.
The purpose is to provide better diagnostics in the following example:
  x = 1
  def f():
      print x
      x = x+1
This used to raise a NameError on the print statement, which confused
even experienced Python programmers (especially if there are several
hundreds of lines of code between the reference and the assignment to
x :-).

You can now override the 'in' operator by defining a __contains__
method.  Note that it has its arguments backwards: x in a causes
a.__contains__(x) to be called.  That's why the name isn't __in__.

The exception AttributeError will have a more friendly error message,
e.g.: <code>'Spam' instance has no attribute 'eggs'</code>.  This may
<b>break code</b> that expects the message to be exactly the attribute
name.


New Modules in 1.6
------------------

UserString - base class for deriving from the string type.

distutils - tools for distributing Python modules.

robotparser - parse a robots.txt file, for writing web spiders.
(Moved from Tools/webchecker/.)

linuxaudiodev - audio for Linux.

mmap - treat a file as a memory buffer.  (Windows and Unix.)

sre - regular expressions (fast, supports unicode).  Currently, this
code is very rough.  Eventually, the re module will be reimplemented
using sre (without changes to the re API).

filecmp - supersedes the old cmp.py and dircmp.py modules.

tabnanny - check Python sources for tab-width dependence.  (Moved from
Tools/scripts/.)

urllib2 - new and improved but incompatible version of urllib (still
experimental).

zipfile - read and write zip archives.

codecs - support for Unicode encoders/decoders.

unicodedata - provides access to the Unicode 3.0 database.

_winreg - Windows registry access.

encodings - package which provides a large set of standard codecs --
currently only for the new Unicode support. It has a drop-in extension
mechanism which allows you to add new codecs by simply copying them
into the encodings package directory. Asian codec support will
probably be made available as separate distribution package built upon
this technique and the new distutils package.


Changed Modules
---------------

readline, ConfigParser, cgi, calendar, posix, readline, xmllib, aifc,
chunk, wave, random, shelve, nntplib - minor enhancements.

socket, httplib, urllib - optional OpenSSL support (Unix only).

_tkinter - support for 8.0 up to 8.3.  Support for versions older than
8.0 has been dropped.

string - most of this module is deprecated now that strings have
methods.  This no longer uses the built-in strop module, but takes
advantage of the new string methods to provide transparent support for
both Unicode and ordinary strings.


Changes on Windows
------------------

The installer no longer runs a separate Tcl/Tk installer; instead, it
installs the needed Tcl/Tk files directly in the Python directory.  If
you already have a Tcl/Tk installation, this wastes some disk space
(about 4 Megs) but avoids problems with conflincting Tcl/Tk
installations, and makes it much easier for Python to ensure that
Tcl/Tk can find all its files.  Note: the alpha installers don't
include the documentation.

The Windows installer now installs by default in \Python16\ on the
default volume, instead of \Program Files\Python-1.6\.


Changed Tools
-------------

IDLE - complete overhaul.  See the <a href="../idle/">IDLE home
page</a> for more information.  (Python 1.6 alpha 1 will come with
IDLE 0.6.)

Tools/i18n/pygettext.py - Python equivalent of xgettext(1).  A message
text extraction tool used for internationalizing applications written
in Python.


Obsolete Modules
----------------

stdwin and everything that uses it.  (Get Python 1.5.2 if you need
it. :-)

soundex.  (Skip Montanaro has a version in Python but it won't be
included in the Python release.)

cmp, cmpcache, dircmp.  (Replaced by filecmp.)

dump.  (Use pickle.)

find.  (Easily coded using os.walk().)

grep.  (Not very useful as a library module.)

packmail.  (No longer has any use.)

poly, zmod.  (These were poor examples at best.)

strop.  (No longer needed by the string module.)

util.  (This functionality was long ago built in elsewhere).

whatsound.  (Use sndhdr.)


Detailed Changes from 1.6b1 to 1.6
----------------------------------

- Slight changes to the CNRI license.  A copyright notice has been
added; the requirement to indicate the nature of modifications now
applies when making a derivative work available "to others" instead of
just "to the public"; the version and date are updated.  The new
license has a new handle.

- Added the Tools/compiler package.  This is a project led by Jeremy
Hylton to write the Python bytecode generator in Python.

- The function math.rint() is removed.

- In Python.h, "#define _GNU_SOURCE 1" was added.

- Version 0.9.1 of Greg Ward's distutils is included (instead of
version 0.9).

- A new version of SRE is included.  It is more stable, and more
compatible with the old RE module.  Non-matching ranges are indicated
by -1, not None.  (The documentation said None, but the PRE
implementation used -1; changing to None would break existing code.)

- The winreg module has been renamed to _winreg.  (There are plans for
a higher-level API called winreg, but this has not yet materialized in
a form that is acceptable to the experts.)

- The _locale module is enabled by default.

- Fixed the configuration line for the _curses module.

- A few crashes have been fixed, notably <file>.writelines() with a
list containing non-string objects would crash, and there were
situations where a lost SyntaxError could dump core.

- The <list>.extend() method now accepts an arbitrary sequence
argument.

- If __str__() or __repr__() returns a Unicode object, this is
converted to an 8-bit string.

- Unicode string comparisons is no longer aware of UTF-16
encoding peculiarities; it's a straight 16-bit compare.

- The Windows installer now installs the LICENSE file and no longer
registers the Python DLL version in the registry (this is no longer
needed).  It now uses Tcl/Tk 8.3.2.

- A few portability problems have been fixed, in particular a
compilation error involving socklen_t.

- The PC configuration is slightly friendlier to non-Microsoft
compilers.


======================================================================


======================================
==> Release 1.5.2 (April 13, 1999) <==
======================================

From 1.5.2c1 to 1.5.2 (final)
=============================

Tue Apr 13 15:44:49 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* PCbuild/python15.wse: Bump version to 1.5.2 (final)

	* PCbuild/python15.dsp: Added shamodule.c

	* PC/config.c: Added sha module!

	* README, Include/patchlevel.h: Prepare for final release.

	* Misc/ACKS:
	More (Cameron Laird is honorary; the others are 1.5.2c1 testers).

	* Python/thread_solaris.h:
	While I can't really test this thoroughly, Pat Knight and the Solaris
	man pages suggest that the proper thing to do is to add THR_NEW_LWP to
	the flags on thr_create(), and that there really isn't a downside, so
	I'll do that.

	* Misc/ACKS:
	Bunch of new names who helped iron out the last wrinkles of 1.5.2.

	* PC/python_nt.rc:
	Bump the myusterious M$ version number from 1,5,2,1 to 1,5,2,3.
	(I can't even display this on NT, maybe Win/98 can?)

	* Lib/pstats.py:
	Fix mysterious references to jprofile that were in the source since
	its creation.  I'm assuming these were once valid references to "Jim
	Roskind's profile"...

	* Lib/Attic/threading_api.py:
	Removed; since long subsumed in Doc/lib/libthreading.tex

	* Modules/socketmodule.c:
	Put back __osf__ support for gethostbyname_r(); the real bug was that
	it was being used even without threads.  This of course might be an
	all-platform problem so now we only use the _r variant when we are
	using threads.

Mon Apr 12 22:51:20 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Modules/cPickle.c:
	Fix accidentally reversed NULL test in load_mark().  Suggested by
	Tamito Kajiyama.  (This caused a bug only on platforms where malloc(0)
	returns NULL.)

	* README:
	Add note about popen2 problem on Linux noticed by Pablo Bleyer.

	* README: Add note about -D_REENTRANT for HP-UX 10.20.

	* Modules/Makefile.pre.in: 'clean' target should remove hassignal.

	* PC/Attic/vc40.mak, PC/readme.txt:
	Remove all VC++ info (except VC 1.5) from readme.txt;
	remove the VC++ 4.0 project file; remove the unused _tkinter extern defs.

	* README: Clarify PC build instructions (point to PCbuild).

	* Modules/zlibmodule.c: Cast added by Jack Jansen (for Mac port).

	* Lib/plat-sunos5/CDIO.py, Lib/plat-linux2/CDROM.py:
	Forgot to add this file.  CDROM device parameters.

	* Lib/gzip.py: Two different changes.

	1. Jack Jansen reports that on the Mac, the time may be negative, and
	solves this by adding a write32u() function that writes an unsigned
	long.

	2. On 64-bit platforms the CRC comparison fails; I've fixed this by
	casting both values to be compared to "unsigned long" i.e. modulo
	0x100000000L.

Sat Apr 10 18:42:02 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* PC/Attic/_tkinter.def: No longer needed.

	* Misc/ACKS: Correct missed character in Andrew Dalke's name.

	* README: Add DEC Ultrix notes (from Donn Cave's email).

	* configure: The usual

	* configure.in:
	Quote a bunch of shell variables used in test, related to long-long.

	* Objects/fileobject.c, Modules/shamodule.c, Modules/regexpr.c:
	casts for picky compilers.

	* Modules/socketmodule.c:
	3-arg gethostbyname_r doesn't really work on OSF/1.

	* PC/vc15_w31/_.c, PC/vc15_lib/_.c, Tools/pynche/__init__.py:
	Avoid totally empty files.

Fri Apr  9 14:56:35 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/scripts/fixps.py: Use re instead of regex.
	Don't rewrite the file in place.
	(Reported by Andy Dustman.)

	* Lib/netrc.py, Lib/shlex.py: Get rid of #! line

Thu Apr  8 23:13:37 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* PCbuild/python15.wse: Use the Tcl 8.0.5 installer.
	Add a variable %_TCL_% that makes it easier to switch to a different version.


======================================================================


From 1.5.2b2 to 1.5.2c1
=======================

Thu Apr  8 23:13:37 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* PCbuild/python15.wse:
	Release 1.5.2c1.  Add IDLE and Uninstall to program group.
	Don't distribute zlib.dll.  Tweak some comments.

	* PCbuild/zlib.dsp: Now using static zlib 1.1.3

	* Lib/dos-8x3/userdict.py, Lib/dos-8x3/userlist.py, Lib/dos-8x3/test_zli.py, Lib/dos-8x3/test_use.py, Lib/dos-8x3/test_pop.py, Lib/dos-8x3/test_pic.py, Lib/dos-8x3/test_ntp.py, Lib/dos-8x3/test_gzi.py, Lib/dos-8x3/test_fcn.py, Lib/dos-8x3/test_cpi.py, Lib/dos-8x3/test_bsd.py, Lib/dos-8x3/posixfil.py, Lib/dos-8x3/mimetype.py, Lib/dos-8x3/nturl2pa.py, Lib/dos-8x3/compilea.py, Lib/dos-8x3/exceptio.py, Lib/dos-8x3/basehttp.py:
	The usual

	* Include/patchlevel.h: Release 1.5.2c1

	* README: Release 1.5.2c1.

	* Misc/NEWS: News for the 1.5.2c1 release.

	* Lib/test/test_strftime.py:
	On Windows, we suddenly find, strftime() may return "" for an
	unsupported format string.  (I guess this is because the logic for
	deciding whether to reallocate the buffer or not has been improved.)
	This caused the test code to crash on result[0].  Fix this by assuming
	an empty result also means the format is not supported.

	* Demo/tkinter/matt/window-creation-w-location.py:
	This demo imported some private code from Matt.  Make it cripple along.

	* Lib/lib-tk/Tkinter.py:
	Delete an accidentally checked-in feature that actually broke more
	than was worth it: when deleting a canvas item, it would try to
	automatically delete the bindings for that item.  Since there's
	nothing that says you can't reuse the tag and still have the bindings,
	this is not correct.  Also, it broke at least one demo
	(Demo/tkinter/matt/rubber-band-box-demo-1.py).

	* Python/thread_wince.h: Win/CE thread support by Mark Hammond.

Wed Apr  7 20:23:17 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Modules/zlibmodule.c:
	Patch by Andrew Kuchling to unflush() (flush() for deflating).
	Without this, if inflate() returned Z_BUF_ERROR asking for more output
	space, we would report the error; now, we increase the buffer size and
	try again, just as for Z_OK.

	* Lib/test/test_gzip.py: Use binary mode for all gzip files we open.

	* Tools/idle/ChangeLog: New change log.

	* Tools/idle/README.txt, Tools/idle/NEWS.txt: New version.

	* Python/pythonrun.c:
	Alas, get rid of the Win specific hack to ask the user to press Return
	before exiting when an error happened.  This didn't work right when
	Python is invoked from a daemon.

	* Tools/idle/idlever.py: Version bump awaiting impending new release.
	(Not much has changed :-( )

	* Lib/lib-tk/Tkinter.py:
	lower, tkraise/lift hide Misc.lower, Misc.tkraise/lift,
	so the preferred name for them is tag_lower, tag_raise
	(similar to tag_bind, and similar to the Text widget);
	unfortunately can't delete the old ones yet (maybe in 1.6)

	* Python/thread.c, Python/strtod.c, Python/mystrtoul.c, Python/import.c, Python/ceval.c:
	Changes by Mark Hammond for Windows CE.  Mostly of the form
	  #ifdef DONT_HAVE_header_H ... #endif around #include <header.h>.

	* Python/bltinmodule.c:
	Remove unused variable from complex_from_string() code.

	* Include/patchlevel.h:
	Add the possibility of a gamma release (release candidate).
	Add '+' to string version number to indicate we're beyond b2 now.

	* Modules/posixmodule.c: Add extern decl for fsync() for SunOS 4.x.

	* Lib/smtplib.py: Changes by Per Cederquist and The Dragon.

	Per writes:

	"""
	The application where Signum Support uses smtplib needs to be able to
	report good error messages to the user when sending email fails.  To
	help in diagnosing problems it is useful to be able to report the
	entire message sent by the server, not only the SMTP error code of the
	offending command.

	A lot of the functions in sendmail.py unfortunately discards the
	message, leaving only the code.  The enclosed patch fixes that
	problem.

	The enclosed patch also introduces a base class for exceptions that
	include an SMTP error code and error message, and make the code and
	message available on separate attributes, so that surrounding code can
	deal with them in whatever way it sees fit.  I've also added some
	documentation to the exception classes.

	The constructor will now raise an exception if it cannot connect to
	the SMTP server.

	The data() method will raise an SMTPDataError if it doesn't receive
	the expected 354 code in the middle of the exchange.

	According to section 5.2.10 of RFC 1123 a smtp client must accept "any
	text, including no text at all" after the error code.  If the response
	of a HELO command contains no text self.helo_resp will be set to the
	empty string ("").  The patch fixes the test in the sendmail() method
	so that helo_resp is tested against None; if it has the empty string
	as value the sendmail() method would invoke the helo() method again.

	The code no longer accepts a -1 reply from the ehlo() method in
	sendmail().

	[Text about removing SMTPRecipientsRefused deleted --GvR]
	"""

	and also:

	"""
	smtplib.py appends an extra blank line to the outgoing mail if the
	`msg' argument to the sendmail method already contains a trailing
	newline.  This patch should fix the problem.
	"""

	The Dragon writes:

	"""
		Mostly I just re-added the SMTPRecipientsRefused exception
	(the exception object now has the appropriate info in it ) [Per had
	removed this in his patch --GvR] and tweaked the behavior of the
	sendmail method whence it throws the newly added SMTPHeloException (it
	was closing the connection, which it shouldn't.  whatever catches the
	exception should do that. )

		I pondered the change of the return values to tuples all around,
	and after some thinking I decided that regularizing the return values was
	too much of the Right Thing (tm) to not do.

		My one concern is that code expecting an integer & getting a tuple
	may fail silently.

	(i.e. if it's doing :

	      x.somemethod() >= 400:
	expecting an integer, the expression will always be true if it gets a
	tuple instead. )

		However, most smtplib code I've seen only really uses the
	sendmail() method, so this wouldn't bother it.  Usually code I've seen
	that calls the other methods usually only calls helo() and ehlo() for
	doing ESMTP, a feature which was not in the smtplib included with 1.5.1,
	and thus I would think not much code uses it yet.
	"""

Tue Apr  6 19:38:18 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/test_ntpath.py:
	Fix the tests now that splitdrive() no longer treats UNC paths special.
	(Some tests converted to splitunc() tests.)

	* Lib/ntpath.py:
	Withdraw the UNC support from splitdrive().  Instead, a new function
	splitunc() parses UNC paths.  The contributor of the UNC parsing in
	splitdrive() doesn't like it, but I haven't heard a good reason to
	keep it, and it causes some problems.  (I think there's a
	philosophical problem -- to me, the split*() functions are purely
	syntactical, and the fact that \\foo is not a valid path doesn't mean
	that it shouldn't be considered an absolute path.)

	Also (quite separately, but strangely related to the philosophical
	issue above) fix abspath() so that if win32api exists, it doesn't fail
	when the path doesn't actually exist -- if GetFullPathName() fails,
	fall back on the old strategy (join with getcwd() if necessary, and
	then use normpath()).

	* configure.in, configure, config.h.in, acconfig.h:
	For BeOS PowerPC.  Chris Herborth.

Mon Apr  5 21:54:14 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Modules/timemodule.c:
	Jonathan Giddy notes, and Chris Lawrence agrees, that some comments on
	#else/#endif are wrong, and that #if HAVE_TM_ZONE should be #ifdef.

	* Misc/ACKS:
	Bunch of new contributors, including 9 who contributed to the Docs,
	reported by Fred.

Mon Apr  5 18:37:59 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/gzip.py:
	Oops, missed mode parameter to open().

	* Lib/gzip.py:
	Made the default mode 'rb' instead of 'r', for better cross-platform
	support.  (Based on comment on the documentation by Bernhard Reiter
	<bernhard@csd.uwm.edu>).

Fri Apr  2 22:18:25 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/scripts/dutree.py:
	For reasons I dare not explain, this script should always execute
	main() when imported (in other words, it is not usable as a module).

Thu Apr  1 15:32:30 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/test_cpickle.py: Jonathan Giddy write:

	In test_cpickle.py, the module os got imported, but the line to remove
	the temp file has gone missing.

Tue Mar 30 20:17:31 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/BaseHTTPServer.py: Per Cederqvist writes:

	If you send something like "PUT / HTTP/1.0" to something derived from
	BaseHTTPServer that doesn't define do_PUT, you will get a response
	that begins like this:

		HTTP/1.0 501 Unsupported method ('do_PUT')
		Server: SimpleHTTP/0.3 Python/1.5
		Date: Tue, 30 Mar 1999 18:53:53 GMT

	The server should complain about 'PUT' instead of 'do_PUT'.  This
	patch should fix the problem.

Mon Mar 29 20:33:21 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/smtplib.py: Patch by Per Cederqvist, who writes:

	"""
	 - It needlessly used the makefile() method for each response that is
	   read from the SMTP server.

	 - If the remote SMTP server closes the connection unexpectedly the
	   code raised an IndexError.  It now raises an SMTPServerDisconnected
	   exception instead.

	 - The code now checks that all lines in a multiline response actually
	   contains an error code.
	"""

	The Dragon approves.

Mon Mar 29 20:25:40 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/compileall.py:
	When run as a script, report failures in the exit code as well.
	Patch largely based on changes by Andrew Dalke, as discussed in the
	distutils-sig.

Mon Mar 29 20:23:41 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urllib.py:
	Hack so that if a 302 or 301 redirect contains a relative URL, the
	right thing "just happens" (basejoin() with old URL).

	* Modules/cPickle.c:
	Protection against picling to/from closed (real) file.
	The problem was reported by Moshe Zadka.

	* Lib/test/test_cpickle.py:
	Test protection against picling to/from closed (real) file.

	* Modules/timemodule.c: Chris Lawrence writes:

	"""
	The GNU folks, in their infinite wisdom, have decided not to implement
	altzone in libc6; this would not be horrible, except that timezone
	(which is implemented) includes the current DST setting (i.e. timezone
	for Central is 18000 in summer and 21600 in winter).  So Python's
	timezone and altzone variables aren't set correctly during DST.

	Here's a patch relative to 1.5.2b2 that (a) makes timezone and altzone
	show the "right" thing on Linux (by using the tm_gmtoff stuff
	available in BSD, which is how the GLIBC manual claims things should
	be done) and (b) should cope with the southern hemisphere.  In pursuit
	of (b), I also took the liberty of renaming the "summer" and "winter"
	variables to "july" and "jan".  This patch should also make certain
	time calculations on Linux actually work right (like the tz-aware
	functions in the rfc822 module).

	(It's hard to find DST that's currently being used in the southern
	hemisphere; I tested using Africa/Windhoek.)
	"""

	* Lib/test/output/test_gzip:
	Jonathan Giddy discovered this file was missing.

	* Modules/shamodule.c:
	Avoid warnings from AIX compiler.  Reported by Vladimir (AIX is my
	middlename) Marangozov, patch coded by Greg Stein.

	* Tools/idle/ScriptBinding.py, Tools/idle/PyShell.py:
	At Tim Peters' recommendation, add a dummy flush() method to PseudoFile.

Sun Mar 28 17:55:32 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/scripts/ndiff.py: Tim Peters writes:

	I should have waited overnight <wink/sigh>.  Nothing wrong with the one I
	sent, but I couldn't resist going on to add new -r1 / -r2 cmdline options
	for recreating the original files from ndiff's output.  That's attached, if
	you're game!  Us Windows guys don't usually have a sed sitting around
	<wink>.

Sat Mar 27 13:34:01 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/scripts/ndiff.py: Tim Peters writes:

	Attached is a cleaned-up version of ndiff (added useful module
	docstring, now echo'ed in case of cmd line mistake); added -q option
	to suppress initial file identification lines; + other minor cleanups,
	& a slightly faster match engine.

Fri Mar 26 22:36:00 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Tools/scripts/dutree.py:
	During display, if EPIPE is raised, it's probably because a pager was
	killed.  Discard the error in that case, but propagate it otherwise.

Fri Mar 26 16:20:45 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/output/test_userlist, Lib/test/test_userlist.py:
	Test suite for UserList.

	* Lib/UserList.py: Use isinstance() where appropriate.
	Reformatted with 4-space indent.

Fri Mar 26 16:11:40 1999  Barry Warsaw  <bwarsaw@eric.cnri.reston.va.us>

	* Tools/pynche/PyncheWidget.py:
	Helpwin.__init__(): The text widget should get focus.

	* Tools/pynche/pyColorChooser.py:
	Removed unnecessary import `from PyncheWidget import PyncheWidget'

Fri Mar 26 15:32:05 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/output/test_userdict, Lib/test/test_userdict.py:
	Test suite for UserDict

	* Lib/UserDict.py: Improved a bunch of things.
	The constructor now takes an optional dictionary.
	Use isinstance() where appropriate.

Thu Mar 25 22:38:49 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/output/test_pickle, Lib/test/output/test_cpickle, Lib/test/test_pickle.py, Lib/test/test_cpickle.py:
	Basic regr tests for pickle/cPickle

	* Lib/pickle.py:
	Don't use "exec" in find_class().  It's slow, unnecessary, and (as AMK
	points out) it doesn't work in JPython Applets.

Thu Mar 25 21:50:27 1999  Andrew Kuchling  <akuchlin@eric.cnri.reston.va.us>

	* Lib/test/test_gzip.py:
	Added a simple test suite for gzip.  It simply opens a temp file,
	writes a chunk of compressed data, closes it, writes another chunk, and
	reads the contents back to verify that they are the same.

	* Lib/gzip.py:
	Based on a suggestion from bruce@hams.com, make a trivial change to
	allow using the 'a' flag as a mode for opening a GzipFile.  gzip
	files, surprisingly enough, can be concatenated and then decompressed;
	the effect is to concatenate the two chunks of data.

	If we support it on writing, it should also be supported on reading.
	This *wasn't* trivial, and required rearranging the code in the
	reading path, particularly the _read() method.

	Raise IOError instead of RuntimeError in two cases, 'Not a gzipped file'
	and 'Unknown compression method'

Thu Mar 25 21:25:01 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/test_b1.py:
	Add tests for float() and complex() with string args (Nick/Stephanie
	Lockwood).

Thu Mar 25 21:21:08 1999  Andrew Kuchling  <akuchlin@eric.cnri.reston.va.us>

	* Modules/zlibmodule.c:
	Add an .unused_data attribute to decompressor objects.  If .unused_data
	is not an empty string, this means that you have arrived at the
	end of the stream of compressed data, and the contents of .unused_data are
	whatever follows the compressed stream.

Thu Mar 25 21:16:07 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Python/bltinmodule.c:
	Patch by Nick and Stephanie Lockwood to implement complex() with a string
	argument.  This closes TODO item 2.19.

Wed Mar 24 19:09:00 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/webchecker/wcnew.py: Added Samuel Bayer's new webchecker.
	Unfortunately his code breaks wcgui.py in a way that's not easy
	to fix.  I expect that this is a temporary situation --
	eventually Sam's changes will be merged back in.
	(The changes add a -t option to specify exceptions to the -x
	option, and explicit checking for #foo style fragment ids.)

	* Objects/dictobject.c:
	Vladimir Marangozov contributed updated comments.

	* Objects/bufferobject.c: Folded long lines.

	* Lib/test/output/test_sha, Lib/test/test_sha.py:
	Added Jeremy's test code for the sha module.

	* Modules/shamodule.c, Modules/Setup.in:
	Added Greg Stein and Andrew Kuchling's sha module.
	Fix comments about zlib version and URL.

	* Lib/test/test_bsddb.py: Remove the temp file when we're done.

	* Include/pythread.h: Conform to standard boilerplate.

	* configure.in, configure, BeOS/linkmodule, BeOS/ar-fake:
	Chris Herborth: the new compiler in R4.1 needs some new options to work...

	* Modules/socketmodule.c:
	Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
	data struct before calling gethostby{name,addr}_r(); (2) ignore the
	3/5/6 args determinations made by the configure script and switch on
	platform identifiers instead:

	AIX, OSF have 3 args
	Sun, SGI have 5 args
	Linux has 6 args

	On all other platforms, undef HAVE_GETHOSTBYNAME_R altogether.

	* Modules/socketmodule.c:
	Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.

	* Lib/mailbox.py:
	Add readlines() to _Subfile class.  Not clear who would need it, but
	Chris Lawrence sent me a broken version; this one is a tad simpler and
	more conforming to the standard.

Tue Mar 23 23:05:34 1999  Jeremy Hylton  <jhylton@eric.cnri.reston.va.us>

	* Lib/gzip.py: use struct instead of bit-manipulate in Python

Tue Mar 23 19:00:55 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Modules/Makefile.pre.in:
	Add $(EXE) to various occurrences of python so it will work on Cygwin
	with egcs (after setting EXE=.exe).  Patch by Norman Vine.

	* configure, configure.in:
	Ack!  It never defined HAVE_GETHOSTBYNAME_R so that code was never tested!

Mon Mar 22 22:25:39 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Include/thread.h:
	Adding thread.h -- unused but for b/w compatibility.
	As requested by Bill Janssen.

	* configure.in, configure:
	Add code to test for all sorts of gethostbyname_r variants,
	donated by David Arnold.

	* config.h.in, acconfig.h:
	Add symbols for gethostbyname_r variants (sigh).

	* Modules/socketmodule.c: Clean up pass for the previous patches.

	- Use HAVE_GETHOSTBYNAME_R_6_ARG instead of testing for Linux and
	glibc2.

	- If gethostbyname takes 3 args, undefine HAVE_GETHOSTBYNAME_R --
	don't know what code should be used.

	- New symbol USE_GETHOSTBYNAME_LOCK defined iff the lock should be used.

	- Modify the gethostbyaddr() code to also hold on to the lock until
	after it is safe to release, overlapping with the Python lock.

	(Note: I think that it could in theory be possible that Python code
	executed while gethostbyname_lock is held could attempt to reacquire
	the lock -- e.g. in a signal handler or destructor.  I will simply say
	"don't do that then.")

	* Modules/socketmodule.c: Jonathan Giddy writes:

	Here's a patch to fix the race condition, which wasn't fixed by Rob's
	patch.  It holds the gethostbyname lock until the results are copied out,
	which means that this lock and the Python global lock are held at the same
	time.  This shouldn't be a problem as long as the gethostbyname lock is
	always acquired when the global lock is not held.

Mon Mar 22 19:25:30 1999  Andrew Kuchling  <akuchlin@eric.cnri.reston.va.us>

	* Modules/zlibmodule.c:
	Fixed the flush() method of compression objects; the test for
	    the end of loop was incorrect, and failed when the flushmode != Z_FINISH.
	    Logic cleaned up and commented.

	* Lib/test/test_zlib.py:
	Added simple test for the flush() method of compression objects, trying the
	    different flush values Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH.

Mon Mar 22 15:28:08 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/shlex.py:
	Bug reported by Tobias Thelen: missing "self." in assignment target.

Fri Mar 19 21:50:11 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Modules/arraymodule.c:
	Use an unsigned cast to avoid a warning in VC++.

	* Lib/dospath.py, Lib/ntpath.py:
	New code for split() by Tim Peters, behaves more like posixpath.split().

	* Objects/floatobject.c:
	Fix a problem with Vladimir's PyFloat_Fini code: clear the free list; if
	a block cannot be freed, add its free items back to the free list.
	This is necessary to avoid leaking when Python is reinitialized later.

	* Objects/intobject.c:
	Fix a problem with Vladimir's PyInt_Fini code: clear the free list; if
	a block cannot be freed, add its free items back to the free list, and
	add its valid ints back to the small_ints array if they are in range.
	This is necessary to avoid leaking when Python is reinitialized later.

	* Lib/types.py:
	Added BufferType, the type returned by the new builtin buffer().  Greg Stein.

	* Python/bltinmodule.c:
	New builtin buffer() creates a derived read-only buffer from any
	object that supports the buffer interface (e.g. strings, arrays).

	* Objects/bufferobject.c:
	Added check for negative offset for PyBuffer_FromObject and check for
	negative size for PyBuffer_FromMemory.  Greg Stein.

Thu Mar 18 15:10:44 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urlparse.py: Sjoerd Mullender writes:

	If a filename on Windows starts with \\, it is converted to a URL
	which starts with ////.  If this URL is passed to urlparse.urlparse
	you get a path that starts with // (and an empty netloc).  If you pass
	the result back to urlparse.urlunparse, you get a URL that starts with
	//, which is parsed differently by urlparse.urlparse.  The fix is to
	add the (empty) netloc with accompanying slashes if the path in
	urlunparse starts with //.  Do this for all schemes that use a netloc.

	* Lib/nturl2path.py: Sjoerd Mullender writes:

	Pathnames of files on other hosts in the same domain
	(\\host\path\to\file) are not translated correctly to URLs and back.
	The URL should be something like file:////host/path/to/file.
	Note that a combination of drive letter and remote host is not
	possible.

Wed Mar 17 22:30:10 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urlparse.py:
	Delete non-standard-conforming code in urljoin() that would use the
	netloc from the base url as the default netloc for the resulting url
	even if the schemes differ.

	Once upon a time, when the web was wild, this was a valuable hack
	because some people had a URL referencing an ftp server colocated with
	an http server without having the host in the ftp URL (so they could
	replicate it or change the hostname easily).

	More recently, after the file: scheme got added back to the list of
	schemes that accept a netloc, it turns out that this caused weirdness
	when joining an http: URL with a file: URL -- the resulting file: URL
	would always inherit the host from the http: URL because the file:
	scheme supports a netloc but in practice never has one.

	There are two reasons to get rid of the old, once-valuable hack,
	instead of removing the file: scheme from the uses_netloc list.  One,
	the RFC says that file: uses the netloc syntax, and does not endorse
	the old hack.  Two, neither netscape 4.5 nor IE 4.0 support the old
	hack.

	* Include/ceval.h, Include/abstract.h:
	Add DLL level b/w compat for PySequence_In and PyEval_CallObject

Tue Mar 16 21:54:50 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/lib-tk/Tkinter.py: Bug reported by Jim Robinson:

	An attempt to execute grid_slaves with arguments (0,0) results in
	*all* of the slaves being returned, not just the slave associated with
	row 0, column 0.  This is because the test for arguments in the method
	does not test to see if row (and column) does not equal None, but
	rather just whether is evaluates to non-false.  A value of 0 fails
	this test.

Tue Mar 16 14:17:48 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Modules/cmathmodule.c:
	Docstring fix:  acosh() returns the hyperbolic arccosine, not the
	hyperbolic cosine.  Problem report via David Ascher by one of his
	students.

Mon Mar 15 21:40:59 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* configure.in:
	Should test for gethost*by*name_r, not for gethostname_r (which
	doesn't exist and doesn't make sense).

	* Modules/socketmodule.c:
	Patch by Rob Riggs for Linux -- glibc2 has a different argument
	converntion for gethostbyname_r() etc. than Solaris!

	* Python/thread_pthread.h: Rob Riggs wrote:

	"""
	Spec says that on success pthread_create returns 0. It does not say
	that an error code will be < 0. Linux glibc2 pthread_create() returns
	ENOMEM (12) when one exceed process limits. (It looks like it should
	return EAGAIN, but that's another story.)

	For reference, see:
	http://www.opengroup.org/onlinepubs/7908799/xsh/pthread_create.html
	"""

	[I have a feeling that similar bugs were fixed before; perhaps someone
	could check that all error checks no check for != 0?]

	* Tools/bgen/bgen/bgenObjectDefinition.py:
	New mixin class that defines cmp and hash that use
	the ob_itself pointer.  This allows (when using the mixin)
	different Python objects pointing to the same C object and
	behaving well as dictionary keys.

	Or so sez Jack Jansen...

	* Lib/urllib.py: Yet another patch by Sjoerd Mullender:

	Don't convert URLs to URLs using pathname2url.

Fri Mar 12 22:15:43 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/cmd.py: Patch by Michael Scharf.  He writes:

	    The module cmd requires for each do_xxx command a help_xxx
	    function. I think this is a little old fashioned.

	    Here is a patch: use the docstring as help if no help_xxx
	    function can be found.

	[I'm tempted to rip out all the help_* functions from pdb, but I'll
	resist it.  Any takers?  --Guido]

	* Tools/freeze/freeze.py: Bug submitted by Wayne Knowles, who writes:

	   Under Windows, python freeze.py -o hello hello.py
	   creates all the correct files in the hello subdirectory, but the
	   Makefile has the directory prefix in it for frozen_extensions.c
	   nmake fails because it tries to locate hello/frozen_extensions.c

	(His fix adds a call to os.path.basename() in the appropriate place.)

	* Objects/floatobject.c, Objects/intobject.c:
	Vladimir has restructured his code somewhat so that the blocks are now
	represented by an explicit structure.  (There are still too many casts
	in the code, but that may be unavoidable.)

	Also added code so that with -vv it is very chatty about what it does.

	* Demo/zlib/zlibdemo.py, Demo/zlib/minigzip.py:
	Change #! line to modern usage; also chmod +x

	* Demo/pdist/rrcs, Demo/pdist/rcvs, Demo/pdist/rcsbump:
	Change #! line to modern usage

	* Lib/nturl2path.py, Lib/urllib.py: From: Sjoerd Mullender

	The filename to URL conversion didn't properly quote special
	characters.
	The URL to filename didn't properly unquote special characters.

	* Objects/floatobject.c:
	OK, try again.  Vladimir gave me a fix for the alignment bus error,
	so here's his patch again.  This time it works (at least on Solaris,
	Linux and Irix).

Thu Mar 11 23:21:23 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Tools/idle/PathBrowser.py:
	Don't crash when sys.path contains an empty string.

	* Tools/idle/PathBrowser.py:
	- Don't crash in the case where a superclass is a string instead of a
	pyclbr.Class object; this can happen when the superclass is
	unrecognizable (to pyclbr), e.g. when module renaming is used.

	- Show a watch cursor when calling pyclbr (since it may take a while
	recursively parsing imported modules!).

Thu Mar 11 16:04:04 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/mimetypes.py:
	Added .rdf and .xsl as application/xml types.  (.rdf is for the
	Resource Description Framework, a metadata encoding, and .xsl is for
	the Extensible Stylesheet Language.)

Thu Mar 11 13:26:23 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/test/output/test_popen2, Lib/test/test_popen2.py:
	Test for popen2 module, by Chris Tismer.

	* Objects/floatobject.c:
	Alas, Vladimir's patch caused a bus error (probably double
	alignment?), and I didn't test it.  Withdrawing it for now.

Wed Mar 10 22:55:47 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Objects/floatobject.c:
	Patch by Vladimir Marangoz to allow freeing of the allocated blocks of
	floats on finalization.

	* Objects/intobject.c:
	Patch by Vladimir Marangoz to allow freeing of the allocated blocks of
	integers on finalization.

	* Tools/idle/EditorWindow.py, Tools/idle/Bindings.py:
	Add PathBrowser to File module

	* Tools/idle/PathBrowser.py:
	"Path browser" - 4 scrolled lists displaying:
	    directories on sys.path
	    modules in selected directory
	    classes in selected module
	    methods of selected class

	Single clicking in a directory, module or class item updates the next
	column with info about the selected item.  Double clicking in a
	module, class or method item opens the file (and selects the clicked
	item if it is a class or method).

	I guess eventually I should be using a tree widget for this, but the
	ones I've seen don't work well enough, so for now I use the old
	Smalltalk or NeXT style multi-column hierarchical browser.

	* Tools/idle/MultiScrolledLists.py:
	New utility: multiple scrolled lists in parallel

	* Tools/idle/ScrolledList.py: - White background.
	- Display "(None)" (or text of your choosing) when empty.
	- Don't set the focus.

Tue Mar  9 19:31:21 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urllib.py:
	open_http also had the 'data is None' test backwards.  don't call with the
	extra argument if data is None.

	* Demo/embed/demo.c:
	Call Py_SetProgramName() instead of redefining getprogramname(),
	reflecting changes in the runtime around 1.5 or earlier.

	* Python/ceval.c:
	Always test for an error return (usually NULL or -1) without setting
	an exception.

	* Modules/timemodule.c: Patch by Chris Herborth for BeOS code.
	He writes:

	I had an off-by-1000 error in floatsleep(),
	and the problem with time.clock() is that it's not implemented properly
	on QNX... ANSI says it's supposed to return _CPU_ time used by the
	process, but on QNX it returns the amount of real time used... so I was
	confused.

	* Tools/bgen/bgen/macsupport.py: Small change by Jack Jansen.
	Test for self.returntype behaving like OSErr rather than being it.

Thu Feb 25 16:14:58 1999  Jeremy Hylton  <jhylton@eric.cnri.reston.va.us>

	* Lib/urllib.py:
	http_error had the 'data is None' test backwards.  don't call with the
	extra argument if data is None.

	* Lib/urllib.py: change indentation from 8 spaces to 4 spaces

	* Lib/urllib.py: pleasing the tabnanny

Thu Feb 25 14:26:02 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/colorsys.py:
	Oops, one more "x, y, z" to convert...

	* Lib/colorsys.py:
	Adjusted comment at the top to be less confusing, following Fredrik
	Lundh's example.

	Converted comment to docstring.

Wed Feb 24 18:49:15 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/toaiff.py:
	Use sndhdr instead of the obsolete whatsound module.

Wed Feb 24 18:42:38 1999  Jeremy Hylton  <jhylton@eric.cnri.reston.va.us>

	* Lib/urllib.py:
	When performing a POST request, i.e. when the second argument to
	urlopen is used to specify form data, make sure the second argument is
	threaded through all of the http_error_NNN calls.  This allows error
	handlers like the redirect and authorization handlers to properly
	re-start the connection.

Wed Feb 24 16:25:17 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/mhlib.py: Patch by Lars Wirzenius:

		o the initial comment is wrong: creating messages is already
		  implemented

		o Message.getbodytext: if the mail or it's part contains an
		  empty content-transfer-encoding header, the code used to
		  break; the change below treats an empty encoding value the same
		  as the other types that do not need decoding

		o SubMessage.getbodytext was missing the decode argument; the
		  change below adds it; I also made it unconditionally return
		  the raw text if decoding was not desired, because my own
		  routines needed that (and it was easier than rewriting my
		  own routines ;-)

Wed Feb 24 00:35:43 1999  Barry Warsaw  <bwarsaw@eric.cnri.reston.va.us>

	* Python/bltinmodule.c (initerrors):
	Make sure that the exception tuples ("base-classes" when
	string-based exceptions are used) reflect the real class hierarchy,
	i.e. that SystemExit derives from Exception not StandardError.

	* Lib/exceptions.py:
	Document the correct class hierarchy for SystemExit.  It is not an
	error and so it derives from Exception and not SystemError.  The
	docstring was incorrect but the implementation was fine.

Tue Feb 23 23:07:51 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/shutil.py:
	Add import sys, needed by reference to sys.exc_info() in rmtree().
	Discovered by Mitch Chapman.

	* config.h.in:
	Now that we don't have AC_CHECK_LIB(m, pow), the HAVE_LIBM symbol
	disappears.  It wasn't used anywhere anyway...

	* Modules/arraymodule.c:
	Carefully check for overflow when allocating the memory for fromfile
	-- someone tried to pass in sys.maxint and got bitten by the bogus
	calculations.

	* configure.in:
	Get rid of AC_CHECK_LIB(m, pow) since this is taken care of later with
	LIBM (from --with-libm=...); this actually broke the customizability
	offered by the latter option.  Thanks go to Clay Spence for reporting
	this.

	* Lib/test/test_dl.py:
	1. Print the error message (carefully) when a dl.open() fails in verbose mode.
	2. When no test case worked, raise ImportError instead of failing.

	* Python/bltinmodule.c:
	Patch by Tim Peters to improve the range checks for range() and
	xrange(), especially for platforms where int and long are different
	sizes (so sys.maxint isn't actually the theoretical limit for the
	length of a list, but the largest C int is -- sys.maxint is the
	largest Python int, which is actually a C long).

	* Makefile.in:
	1. Augment the DG/UX rule so it doesn't break the BeOS build.
	2. Add $(EXE) to various occurrences of python so it will work on
	   Cygwin with egcs (after setting EXE=.exe).  These patches by
	   Norman Vine.

	* Lib/posixfile.py:
	According to Jeffrey Honig, bsd/os 2.0 - 4.0 should be added to the
	list (of bsd variants that have a different lock structure).

	* Lib/test/test_fcntl.py:
	According to Jeffrey Honig, bsd/os 4.0 should be added to the list.

	* Modules/timemodule.c:
	Patch by Tadayoshi Funaba (with some changes) to be smarter about
	guessing what happened when strftime() returns 0.  Is it buffer
	overflow or was the result simply 0 bytes long?  (This happens for an
	empty format string, or when the format string is a single %Z and the
	timezone is unknown.)  if the buffer is at least 256 times as long as
	the format, assume the latter.

Mon Feb 22 19:01:42 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urllib.py:
	As Des Barry points out, we need to call pathname2url(file) in two
	calls to addinfourl() in open_file().

	* Modules/Setup.in: Document *static* -- in two places!

	* Modules/timemodule.c:
	We don't support leap seconds, so the seconds field of a time 9-tuple
	should be in the range [0-59].  Noted by Tadayoshi Funaba.

	* Modules/stropmodule.c:
	In atoi(), don't use isxdigit() to test whether the last character
	converted was a "digit" -- use isalnum().  This test is there only to
	guard against "+" or "-" being interpreted as a valid int literal.
	Reported by Takahiro Nakayama.

	* Lib/os.py:
	As Finn Bock points out, _P_WAIT etc. don't have a leading underscore
	so they don't need to be treated specially here.

Mon Feb 22 15:38:58 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Misc/NEWS:
	Typo:  "apparentlt" --> "apparently"

Mon Feb 22 15:38:46 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>

	* Lib/urlparse.py: Steve Clift pointed out that 'file' allows a netloc.

	* Modules/posixmodule.c:
	The docstring for ttyname(..) claims a second "mode" argument. The
	actual code does not allow such an argument.  (Finn Bock.)

	* Lib/lib-old/poly.py:
	Dang.  Even though this is obsolete code, somebody found a bug, and I
	fix it.  Oh well.

Thu Feb 18 20:51:50 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>

	* Lib/pyclbr.py:
	Bow to font-lock at the end of the docstring, since it throws stuff
	off.

	Make sure the path parameter to readmodule() is a list before adding it
	with sys.path, or the addition could fail.


======================================================================


From 1.5.2b1 to 1.5.2b2
=======================

General
-------

- Many memory leaks fixed.

- Many small bugs fixed.

- Command line option -OO (or -O -O) suppresses inclusion of doc
strings in resulting bytecode.

Windows-specific changes
------------------------

- New built-in module winsound provides an interface to the Win32
PlaySound() call.

- Re-enable the audioop module in the config.c file.

- On Windows, support spawnv() and associated P_* symbols.

- Fixed the conversion of times() return values on Windows.

- Removed freeze from the installer -- it doesn't work without the
source tree.  (See FAQ 8.11.)

- On Windows 95/98, the Tkinter module now is smart enough to find
Tcl/Tk even when the PATH environment variable hasn't been set -- when
the import of _tkinter fails, it searches in a standard locations,
patches os.environ["PATH"], and tries again.  When it still fails, a
clearer error message is produced.  This should avoid most
installation problems with Tkinter use (e.g. in IDLE).

- The -i option doesn't make any calls to set[v]buf() for stdin --
this apparently screwed up _kbhit() and the _tkinter main loop.

- The ntpath module (and hence, os.path on Windows) now parses out UNC
paths (e.g. \\host\mountpoint\dir\file) as "drive letters", so that
splitdrive() will \\host\mountpoint as the drive and \dir\file as the
path.  ** EXPERIMENTAL **

- Added a hack to the exit code so that if (1) the exit status is
nonzero and (2) we think we have our own DOS box (i.e. we're not
started from a command line shell), we print a message and wait for
the user to hit a key before the DOS box is closed.

- Updated the installer to WISE 5.0g.  Added a dialog warning about
the imminent Tcl installation.  Added a dialog to specify the program
group name in the start menu.  Upgraded the Tcl installer to Tcl
8.0.4.

Changes to intrinsics
---------------------

- The repr() or str() of a module object now shows the __file__
attribute (i.e., the file which it was loaded), or the string
"(built-in)" if there is no __file__ attribute.

- The range() function now avoids overflow during its calculations (if
at all possible).

- New info string sys.hexversion, which is an integer encoding the
version in hexadecimal.  In other words, hex(sys.hexversion) ==
0x010502b2 for Python 1.5.2b2.

New or improved ports
---------------------

- Support for Nextstep descendants (future Mac systems).

- Improved BeOS support.

- Support dynamic loading of shared libraries on NetBSD platforms that
use ELF (i.e., MIPS and Alpha systems).

Configuration/build changes
---------------------------

- The Lib/test directory is no longer included in the default module
search path (sys.path) -- "test" has been a package ever since 1.5.

- Now using autoconf 2.13.

New library modules
-------------------

- New library modules asyncore and asynchat: these form Sam Rushing's
famous asynchronous socket library.  Sam has gracefully allowed me to
incorporate these in the standard Python library.

- New module statvfs contains indexing constants for [f]statvfs()
return tuple.

Changes to the library
----------------------

- The wave module (platform-independent support for Windows sound
files) has been fixed to actually make it work.

- The sunau module (platform-independent support for Sun/NeXT sound
files) has been fixed to work across platforms.  Also, a weird
encoding bug in the header of the audio test data file has been
corrected.

- Fix a bug in the urllib module that occasionally tripped up
webchecker and other ftp retrieves.

- ConfigParser's get() method now accepts an optional keyword argument
(vars) that is substituted on top of the defaults that were setup in
__init__.  You can now also have recursive references in your
configuration file.

- Some improvements to the Queue module, including a put_nowait()
module and an optional "block" second argument, to get() and put(),
defaulting to 1.

- The updated xmllib module is once again compatible with the version
present in Python 1.5.1 (this was accidentally broken in 1.5.2b1).

- The bdb module (base class for the debugger) now supports
canonicalizing pathnames used in breakpoints.  The derived class must
override the new canonical() method for this to work.  Also changed
clear_break() to the backwards compatible old signature, and added
clear_bpbynumber() for the new functionality.

- In sgmllib (and hence htmllib), recognize attributes even if they
don't have space in front of them.  I.e.  '<a
name="foo"href="bar.html">' will now have two attributes recognized.

- In the debugger (pdb), change clear syntax to support three
alternatives: clear; clear file:line; clear bpno bpno ...

- The os.path module now pretends to be a submodule within the os
"package", so you can do things like "from os.path import exists".

- The standard exceptions now have doc strings.

- In the smtplib module, exceptions are now classes.  Also avoid
inserting a non-standard space after "TO" in rcpt() command.

- The rfc822 module's getaddrlist() method now uses all occurrences of
the specified header instead of just the first.  Some other bugfixes
too (to handle more weird addresses found in a very large test set,
and to avoid crashes on certain invalid dates), and a small test
module has been added.

- Fixed bug in urlparse in the common-case code for HTTP URLs; it
would lose the query, fragment, and/or parameter information.

- The sndhdr module no longer supports whatraw() -- it depended on a
rare extenral program.

- The UserList module/class now supports the extend() method, like
real list objects.

- The uu module now deals better with trailing garbage generated by
some broke uuencoders.

- The telnet module now has a my_interact() method which uses threads
instead of select.  The interact() method uses this by default on
Windows (where the single-threaded version doesn't work).

- Add a class to mailbox.py for dealing with qmail directory
mailboxes.  The test code was extended to notice these being used as
well.

Changes to extension modules
----------------------------

- Support for the [f]statvfs() system call, where it exists.

- Fixed some bugs in cPickle where bad input could cause it to dump
core.

- Fixed cStringIO to make the writelines() function actually work.

- Added strop.expandtabs() so string.expandtabs() is now much faster.

- Added fsync() and fdatasync(), if they appear to exist.

- Support for "long files" (64-bit seek pointers).

- Fixed a bug in the zlib module's flush() function.

- Added access() system call.  It returns 1 if access granted, 0 if
not.

- The curses module implements an optional nlines argument to
w.scroll().  (It then calls wscrl(win, nlines) instead of scroll(win).)

Changes to tools
----------------

- Some changes to IDLE; see Tools/idle/NEWS.txt.

- Latest version of Misc/python-mode.el included.

Changes to Tkinter
------------------

- Avoid tracebacks when an image is deleted after its root has been
destroyed.

Changes to the Python/C API
---------------------------

- When parentheses are used in a PyArg_Parse[Tuple]() call, any
sequence is now accepted, instead of requiring a tuple.  This is in
line with the general trend towards accepting arbitrary sequences.

- Added PyModule_GetFilename().

- In PyNumber_Power(), remove unneeded and even harmful test for float
to the negative power (which is already and better done in
floatobject.c).

- New version identification symbols; read patchlevel.h for info.  The
version numbers are now exported by Python.h.

- Rolled back the API version change -- it's back to 1007!

- The frozenmain.c function calls PyInitFrozenExtensions().

- Added 'N' format character to Py_BuildValue -- like 'O' but doesn't
INCREF.


======================================================================


From 1.5.2a2 to 1.5.2b1
=======================

Changes to intrinsics
---------------------

- New extension NotImplementedError, derived from RuntimeError.  Not
used, but recommended use is for "abstract" methods to raise this.

- The parser will now spit out a warning or error when -t or -tt is
used for parser input coming from a string, too.

- The code generator now inserts extra SET_LINENO opcodes when
compiling multi-line argument lists.

- When comparing bound methods, use identity test on the objects, not
equality test.

New or improved ports
---------------------

- Chris Herborth has redone his BeOS port; it now works on PowerPC
(R3/R4) and x86 (R4 only).  Threads work too in this port.

Renaming
--------

- Thanks to Chris Herborth, the thread primitives now have proper Py*
names in the source code (they already had those for the linker,
through some smart macros; but the source still had the old, un-Py
names).

Configuration/build changes
---------------------------

- Improved support for FreeBSD/3.

- Check for pthread_detach instead of pthread_create in libc.

- The makesetup script now searches EXECINCLUDEPY before INCLUDEPY.

- Misc/Makefile.pre.in now also looks at Setup.thread and Setup.local.
Otherwise modules such as thread didn't get incorporated in extensions.

New library modules
-------------------

- shlex.py by Eric Raymond provides a lexical analyzer class for
simple shell-like syntaxes.

- netrc.py by Eric Raymond provides a parser for .netrc files.  (The
undocumented Netrc class in ftplib.py is now obsolete.)

- codeop.py is a new module that contains the compile_command()
function that was previously in code.py.  This is so that JPython can
provide its own version of this function, while still sharing the
higher-level classes in code.py.

- turtle.py is a new module for simple turtle graphics.  I'm still
working on it; let me know if you use this to teach Python to children
or other novices without prior programming experience.

Obsoleted library modules
-------------------------

- poly.py and zmod.py have been moved to Lib/lib-old to emphasize
their status of obsoleteness.  They don't do a particularly good job
and don't seem particularly relevant to the Python core.

New tools
---------

- I've added IDLE: my Integrated DeveLopment Environment for Python.
Requires Tcl/Tk (and Tkinter).  Works on Windows and Unix (and should
work on Macintosh, but I haven't been able to test it there; it does
depend on new features in 1.5.2 and perhaps even new features in
1.5.2b1, especially the new code module).  This is very much a work in
progress.  I'd like to hear how people like it compared to PTUI (or
any other IDE they are familiar with).

- New tools by Barry Warsaw:

  = audiopy: controls the Solaris Audio device
  = pynche:  The PYthonically Natural Color and Hue Editor
  = world:   Print mappings between country names and DNS country codes

New demos
---------

- Demo/scripts/beer.py prints the lyrics to an arithmetic drinking
song.

- Demo/tkinter/guido/optionmenu.py shows how to do an option menu in
Tkinter.  (By Fredrik Lundh -- not by me!)

Changes to the library
----------------------

- compileall.py now avoids recompiling .py files that haven't changed;
it adds a -f option to force recompilation.

- New version of xmllib.py by Sjoerd Mullender (0.2 with latest
patches).

- nntplib.py: statparse() no longer lowercases the message-id.

- types.py: use type(__stdin__) for FileType.

- urllib.py: fix translations for filenames with "funny" characters.
Patch by Sjoerd Mullender.  Note that if you subclass one of the
URLopener classes, and you have copied code from the old urllib.py,
your subclass may stop working.  A long-term solution is to provide
more methods so that you don't have to copy code.

- cgi.py: In read_multi, allow a subclass to override the class we
instantiate when we create a recursive instance, by setting the class
variable 'FieldStorageClass' to the desired class.  By default, this
is set to None, in which case we use self.__class__ (as before).
Also, a patch by Jim Fulton to pass additional arguments to recursive
calls to the FieldStorage constructor from its read_multi method.

- UserList.py: In __getslice__, use self.__class__ instead of
UserList.

- In SimpleHTTPServer.py, the server specified in test() should be
BaseHTTPServer.HTTPServer, in case the request handler should want to
reference the two attributes added by BaseHTTPServer.server_bind.  (By
Jeff Rush, for Bobo).  Also open the file in binary mode, so serving
images from a Windows box might actually work.

- In CGIHTTPServer.py, the list of acceptable formats is -split-
on spaces but -joined- on commas, resulting in double commas
in the joined text.  (By Jeff Rush.)

- SocketServer.py, patch by Jeff Bauer: a minor change to declare two
new threaded versions of Unix Server classes, using the ThreadingMixIn
class: ThreadingUnixStreamServer, ThreadingUnixDatagramServer.

- bdb.py: fix bomb on deleting a temporary breakpoint: there's no
method do_delete(); do_clear() was meant.  By Greg Ward.

- getopt.py: accept a non-list sequence for the long options (request
by Jack Jansen).  Because it might be a common mistake to pass a
single string, this situation is treated separately.  Also added
docstrings (copied from the library manual) and removed the (now
redundant) module comments.

- tempfile.py: improvements to avoid security leaks.

- code.py: moved compile_command() to new module codeop.py.

- pickle.py: support pickle format 1.3 (binary float added).  By Jim
Fulton. Also get rid of the undocumented obsolete Pickler dump_special
method.

- uu.py: Move 'import sys' to top of module, as noted by Tim Peters.

- imaplib.py: fix problem with some versions of IMAP4 servers that
choose to mix the case in their CAPABILITIES response.

- cmp.py: use (f1, f2) as cache key instead of f1 + ' ' + f2.  Noted
by Fredrik Lundh.

Changes to extension modules
----------------------------

- More doc strings for several modules were contributed by Chris
Petrilli: math, cmath, fcntl.

- Fixed a bug in zlibmodule.c that could cause core dumps on
decompression of rarely occurring input.

- cPickle.c: new version from Jim Fulton, with Open Source copyright
notice.  Also, initialize self->safe_constructors early on to prevent
crash in early dealloc.

- cStringIO.c: new version from Jim Fulton, with Open Source copyright
notice.  Also fixed a core dump in cStringIO.c when doing seeks.

- mpzmodule.c: fix signed character usage in mpz.mpz(stringobjecty).

- readline.c: Bernard Herzog pointed out that rl_parse_and_bind
modifies its argument string (bad function!), so we make a temporary
copy.

- sunaudiodev.c: Barry Warsaw added more smarts to get the device and
control pseudo-device, per audio(7I).

Changes to tools
----------------

- New, improved version of Barry Warsaw's Misc/python-mode.el (editing
support for Emacs).

- tabnanny.py: added a -q ('quiet') option to tabnanny, which causes
only the names of offending files to be printed.

- freeze: when printing missing modules, also print the module they
were imported from.

- untabify.py: patch by Detlef Lannert to implement -t option
(set tab size).

Changes to Tkinter
------------------

- grid_bbox(): support new Tk API: grid bbox ?column row? ?column2
row2?

- _tkinter.c: RajGopal Srinivasan noted that the latest code (1.5.2a2)
doesn't work when running in a non-threaded environment.  He added
some #ifdefs that fix this.

Changes to the Python/C API
---------------------------

- Bumped API version number to 1008 -- enough things have changed!

- There's a new macro, PyThreadState_GET(), which does the same work
as PyThreadState_Get() without the overhead of a function call (it
also avoids the error check).  The two top calling locations of
PyThreadState_Get() have been changed to use this macro.

- All symbols intended for export from a DLL or shared library are now
marked as such (with the DL_IMPORT() macro) in the header file that
declares them.  This was needed for the BeOS port, and should also
make some other ports easier.  The PC port no longer needs the file
with exported symbols (PC/python_nt.def).  There's also a DL_EXPORT
macro which is only used for init methods in extension modules, and
for Py_Main().

Invisible changes to internals
------------------------------

- Fixed a bug in new_buffersize() in fileobject.c which could
return a buffer size that was way too large.

- Use PySys_WriteStderr instead of fprintf in most places.

- dictobject.c: remove dead code discovered by Vladimir Marangozov.

- tupleobject.c: make tuples less hungry -- an extra item was
allocated but never used.  Tip by Vladimir Marangozov.

- mymath.h: Metrowerks PRO4 finally fixes the hypot snafu.  (Jack
Jansen)

- import.c: Jim Fulton fixes a reference count bug in
PyEval_GetGlobals.

- glmodule.c: check in the changed version after running the stubber
again -- this solves the conflict with curses over the 'clear' entry
point much nicer.  (Jack Jansen had checked in the changes to cstubs
eons ago, but I never regenerated glmodule.c :-( )

- frameobject.c: fix reference count bug in PyFrame_New.  Vladimir
Marangozov.

- stropmodule.c: add a missing DECREF in an error exit.  Submitted by
Jonathan Giddy.


======================================================================


From 1.5.2a1 to 1.5.2a2
=======================

General
-------

- It is now a syntax error to have a function argument without a
default following one with a default.

- __file__ is now set to the .py file if it was parsed (it used to
always be the .pyc/.pyo file).

- Don't exit with a fatal error during initialization when there's a
problem with the exceptions.py module.

- New environment variable PYTHONOPTIMIZE can be used to set -O.

- New version of python-mode.el for Emacs.

Miscellaneous fixed bugs
------------------------

- No longer print the (confusing) error message about stack underflow
while compiling.

- Some threading and locking bugs fixed.

- When errno is zero, report "Error", not "Success".

Documentation
-------------

- Documentation will be released separately.

- Doc strings added to array and md5 modules by Chris Petrilli.

Ports and build procedure
-------------------------

- Stop installing when a move or copy fails.

- New version of the OS/2 port code by Jeff Rush.

- The makesetup script handles absolute filenames better.

- The 'new' module is now enabled by default in the Setup file.

- I *think* I've solved the problem with the Linux build blowing up
sometimes due to a conflict between sigcheck/intrcheck and
signalmodule.

Built-in functions
------------------

- The second argument to apply() can now be any sequence, not just a
tuple.

Built-in types
--------------

- Lists have a new method: L1.extend(L2) is equivalent to the common
idiom L1[len(L1):] = L2.

- Better error messages when a sequence is indexed with a non-integer.

- Better error message when calling a non-callable object (include
the type in the message).

Python services
---------------

- New version of cPickle.c fixes some bugs.

- pickle.py: improved instantiation error handling.

- code.py: reworked quite a bit.  New base class
InteractiveInterpreter and derived class InteractiveConsole.  Fixed
several problems in compile_command().

- py_compile.py: print error message and continue on syntax errors.
Also fixed an old bug with the fstat code (it was never used).

- pyclbr.py: support submodules of packages.

String Services
---------------

- StringIO.py: raise the right exception (ValueError) for attempted
I/O on closed StringIO objects.

- re.py: fixed a bug in subn(), which caused .groups() to fail inside
the replacement function called by sub().

- The struct module has a new format 'P': void * in native mode.

Generic OS Services
-------------------

- Module time: Y2K robustness.  2-digit year acceptance depends on
value of time.accept2dyear, initialized from env var PYTHONY2K,
default 0.  Years 00-68 mean 2000-2068, while 69-99 mean 1969-1999
(POSIX or X/Open recommendation).

- os.path: normpath(".//x") should return "x", not "/x".

- getpass.py: fall back on default_getpass() when sys.stdin.fileno()
doesn't work.

- tempfile.py: regenerate the template after a fork() call.

Optional OS Services
--------------------

- In the signal module, disable restarting interrupted system calls
when we have siginterrupt().

Debugger
--------

- No longer set __args__; this feature is no longer supported and can
affect the debugged code.

- cmd.py, pdb.py and bdb.py have been overhauled by Richard Wolff, who
added aliases and some other useful new features, e.g. much better
breakpoint support: temporary breakpoint, disabled breakpoints,
breakpoints with ignore counts, and conditions; breakpoints can be set
on a file before it is loaded.

Profiler
--------

- Changes so that JPython can use it.  Also fix the calibration code
so it actually works again
.
Internet Protocols and Support
------------------------------

- imaplib.py: new version from Piers Lauder.

- smtplib.py: change sendmail() method to accept a single string or a
list or strings as the destination (common newbie mistake).

- poplib.py: LIST with a msg argument fixed.

- urlparse.py: some optimizations for common case (http).

- urllib.py: support content-length in info() for ftp protocol;
support for a progress meter through a third argument to
urlretrieve(); commented out gopher test (the test site is dead).

Internet Data handling
----------------------

- sgmllib.py: support tags with - or . in their name.

- mimetypes.py: guess_type() understands 'data' URLs.

Restricted Execution
--------------------

- The classes rexec.RModuleLoader and rexec.RModuleImporter no
longer exist.

Tkinter
-------

- When reporting an exception, store its info in sys.last_*.  Also,
write all of it to stderr.

- Added NS, EW, and NSEW constants, for grid's sticky option.

- Fixed last-minute bug in 1.5.2a1 release: need to include "mytime.h".

- Make bind variants without a sequence return a tuple of sequences
(formerly it returned a string, which wasn't very convenient).

- Add image commands to the Text widget (these are new in Tk 8.0).

- Added new listbox and canvas methods: {xview,yview}_{scroll,moveto}.)

- Improved the thread code (but you still can't call update() from
another thread on Windows).

- Fixed unnecessary references to _default_root in the new dialog
modules.

- Miscellaneous problems fixed.


Windows General
---------------

- Call LoadLibraryEx(..., ..., LOAD_WITH_ALTERED_SEARCH_PATH) to
search for dependent dlls in the directory containing the .pyd.

- In debugging mode, call DebugBreak() in Py_FatalError().

Windows Installer
-----------------

- Install zlib.dll in the DLLs directory instead of in the win32
system directory, to avoid conflicts with other applications that have
their own zlib.dll.

Test Suite
----------

- test_long.py: new test for long integers, by Tim Peters.

- regrtest.py: improved so it can be used for other test suites as
well.

- test_strftime.py: use re to compare test results, to support legal
variants (e.g. on Linux).

Tools and Demos
---------------

- Four new scripts in Tools/scripts: crlf.py and lfcr.py (to
remove/add Windows style '\r\n' line endings), untabify.py (to remove
tabs), and rgrep.yp (reverse grep).

- Improvements to Tools/freeze/.  Each Python module is now written to
its own C file.  This prevents some compilers or assemblers from
blowing up on large frozen programs, and saves recompilation time if
only a few modules are changed.  Other changes too, e.g. new command
line options -x and -i.

- Much improved (and smaller!) version of Tools/scripts/mailerdaemon.py.

Python/C API
------------

- New mechanism to support extensions of the type object while
remaining backward compatible with extensions compiled for previous
versions of Python 1.5.  A flags field indicates presence of certain
fields.

- Addition to the buffer API to differentiate access to bytes and
8-bit characters (in anticipation of Unicode characters).

- New argument parsing format t# ("text") to indicate 8-bit
characters; s# simply means 8-bit bytes, for backwards compatibility.

- New object type, bufferobject.c is an example and can be used to
create buffers from memory.

- Some support for 64-bit longs, including some MS platforms.

- Many calls to fprintf(stderr, ...) have been replaced with calls to
PySys_WriteStderr(...).

- The calling context for PyOS_Readline() has changed: it must now be
called with the interpreter lock held!  It releases the lock around
the call to the function pointed to by PyOS_ReadlineFunctionPointer
(default PyOS_StdioReadline()).

- New APIs PyLong_FromVoidPtr() and PyLong_AsVoidPtr().

- Renamed header file "thread.h" to "pythread.h".

- The code string of code objects may now be anything that supports the
buffer API.


======================================================================


From 1.5.1 to 1.5.2a1
=====================

General
-------

- When searching for the library, a landmark that is a compiled module
(string.pyc or string.pyo) is also accepted.

- When following symbolic links to the python executable, use a loop
so that a symlink to a symlink can work.

- Added a hack so that when you type 'quit' or 'exit' at the
interpreter, you get a friendly explanation of how to press Ctrl-D (or
Ctrl-Z) to exit.

- New and improved Misc/python-mode.el (Python mode for Emacs).

- Revert a new feature in Unix dynamic loading: for one or two
revisions, modules were loaded using the RTLD_GLOBAL flag.  It turned
out to be a bad idea.

Miscellaneous fixed bugs
------------------------

- All patches on the patch page have been integrated.  (But much more
has been done!)

- Several memory leaks plugged (e.g. the one for classes with a
__getattr__ method).

- Removed the only use of calloc().  This triggered an obscure bug on
multiprocessor Sparc Solaris 2.6.

- Fix a peculiar bug that would allow "import sys.time" to succeed
(believing the built-in time module to be a part of the sys package).

- Fix a bug in the overflow checking when converting a Python long to
a C long (failed to convert -2147483648L, and some other cases).

Documentation
-------------

- Doc strings have been added to many extension modules: __builtin__,
errno, select, signal, socket, sys, thread, time.  Also to methods of
list objects (try [].append.__doc__).  A doc string on a type will now
automatically be propagated to an instance if the instance has methods
that are accessed in the usual way.

- The documentation has been expanded and the formatting improved.
(Remember that the documentation is now unbundled and has its own
release cycle though; see http://www.python.org/doc/.)

- Added Misc/Porting -- a mini-FAQ on porting to a new platform.

Ports and build procedure
-------------------------

- The BeOS port is now integrated.  Courtesy Chris Herborth.

- Symbol files for FreeBSD 2.x and 3.x have been contributed
(Lib/plat-freebsd[23]/*).

- Support HPUX 10.20 DCE threads.

- Finally fixed the configure script so that (on SGI) if -OPT:Olimit=0
works, it won't also use -Olimit 1500 (which gives a warning for every
file).  Also support the SGI_ABI environment variable better.

- The makesetup script now understands absolute pathnames ending in .o
in the module -- it assumes it's a file for which we have no source.

- Other miscellaneous improvements to the configure script and
Makefiles.

- The test suite now uses a different sound sample.

Built-in functions
------------------

- Better checks for invalid input to int(), long(), string.atoi(),
string.atol().  (Formerly, a sign without digits would be accepted as
a legal ways to spell zero.)

- Changes to map() and filter() to use the length of a sequence only
as a hint -- if an IndexError happens earlier, take that.  (Formerly,
this was considered an error.)

- Experimental feature in getattr(): a third argument can specify a
default (instead of raising AttributeError).

- Implement round() slightly different, so that for negative ndigits
no additional errors happen in the last step.

- The open() function now adds the filename to the exception when it
fails.

Built-in exceptions
-------------------

- New standard exceptions EnvironmentError and PosixError.
EnvironmentError is the base class for IOError and PosixError;
PosixError is the same as os.error.  All this so that either exception
class can be instantiated with a third argument indicating a filename.
The built-in function open() and most os/posix functions that take a
filename argument now use this.

Built-in types
--------------

- List objects now have an experimental pop() method; l.pop() returns
and removes the last item; l.pop(i) returns and removes the item at
i.  Also, the sort() method is faster again.  Sorting is now also
safer: it is impossible for the sorting function to modify the list
while the sort is going on (which could cause core dumps).

- Changes to comparisons: numbers are now smaller than any other type.
This is done to prevent the circularity where [] < 0L < 1 < [] is
true.  As a side effect, cmp(None, 0) is now positive instead of
negative.  This *shouldn't* affect any working code, but I've found
that the change caused several "sleeping" bugs to become active, so
beware!

- Instance methods may now have other callable objects than just
Python functions as their im_func.  Use new.instancemethod() or write
your own C code to create them; new.instancemethod() may be called
with None for the instance to create an unbound method.

- Assignment to __name__, __dict__ or __bases__ of a class object is
now allowed (with stringent type checks); also allow assignment to
__getattr__ etc.  The cached values for __getattr__ etc. are
recomputed after such assignments (but not for derived classes :-( ).

- Allow assignment to some attributes of function objects: func_code,
func_defaults and func_doc / __doc__.  (With type checks except for
__doc__ / func_doc .)

Python services
---------------

- New tests (in Lib/test): reperf.py (regular expression benchmark),
sortperf.py (list sorting benchmark), test_MimeWriter.py (test case
for the MimeWriter module).

- Generalized test/regrtest.py so that it is useful for testing other
packages.

- The ihooks.py module now understands package imports.

- In code.py, add a class that subsumes Fredrik Lundh's
PythonInterpreter class.  The interact() function now uses this.

- In rlcompleter.py, in completer(), return None instead of raising an
IndexError when there are no more completions left.

- Fixed the marshal module to test for certain common kinds of invalid
input.  (It's still not foolproof!)

- In the operator module, add an alias (now the preferred name)
"contains" for "sequenceincludes".

String Services
---------------

- In the string and strop modules, in the replace() function, treat an
empty pattern as an error (since it's not clear what was meant!).

- Some speedups to re.py, especially the string substitution and split
functions.  Also added new function/method findall(), to find all
occurrences of a given substring.

- In cStringIO, add better argument type checking and support the
readonly 'closed' attribute (like regular files).

- In the struct module, unsigned 1-2 byte sized formats no longer
result in long integer values.

Miscellaneous services
----------------------

- In whrandom.py, added new method and function randrange(), same as
choice(range(start, stop, step)) but faster.  This addresses the
problem that randint() was accidentally defined as taking an inclusive
range.  Also, randint(a, b) is now redefined as randrange(a, b+1),
adding extra range and type checking to its arguments!

- Add some semi-thread-safety to random.gauss() (it used to be able to
crash when invoked from separate threads; now the worst it can do is
give a duplicate result occasionally).

- Some restructuring and generalization done to cmd.py.

- Major upgrade to ConfigParser.py; converted to using 're', added new
exceptions, support underscore in section header and option name.  No
longer add 'name' option to every section; instead, add '__name__'.

- In getpass.py, don't use raw_input() to ask for the password -- we
don't want it to show up in the readline history!  Also don't catch
interrupts (the try-finally already does all necessary cleanup).

Generic OS Services
-------------------

- New functions in os.py: makedirs(), removedirs(), renames().  New
variable: linesep (the line separator as found in binary files,
i.e. '\n' on Unix, '\r\n' on DOS/Windows, '\r' on Mac.  Do *not* use
this with files opened in (default) text mode; the line separator used
will always be '\n'!

- Changes to the 'os.path' submodule of os.py: added getsize(),
getmtime(), getatime() -- these fetch the most popular items from the
stat return tuple.

- In the time module, add strptime(), if it exists.  (This parses a
time according to a format -- the inverse of strftime().)  Also,
remove the call to mktime() from strftime() -- it messed up the
formatting of some non-local times.

- In the socket module, added a new function gethostbyname_ex().
Also, don't use #ifdef to test for some symbols that are enums on some
platforms (and should exist everywhere).

Optional OS Services
--------------------

- Some fixes to gzip.py.  In particular, the readlines() method now
returns the lines *with* trailing newline characters, like readlines()
of regular file objects.  Also, it didn't work together with cPickle;
fixed that.

- In whichdb.py, support byte-swapped dbhash (bsddb) files.

- In anydbm.py, look at the type of an existing database to determine
which module to use to open it.  (The anydbm.error exception is now a
tuple.)

Unix Services
-------------

- In the termios module, in tcsetattr(), initialize the structure vy
calling tcgetattr().

- Added some of the "wait status inspection" macros as functions to
the posix module (and thus to the os module): WEXITSTATUS(),
WIFEXITED(), WIFSIGNALED(), WIFSTOPPED(), WSTOPSIG(), WTERMSIG().

- In the syslog module, make the default facility more intuitive
(matching the docs).

Debugger
--------

- In pdb.py, support for setting breaks on files/modules that haven't
been loaded yet.

Internet Protocols and Support
------------------------------

- Changes in urllib.py; sped up unquote() and quote().  Fixed an
obscure bug in quote_plus().  Added urlencode(dict) -- convenience
function for sending a POST request with urlopen().  Use the getpass
module to ask for a password.  Rewrote the (test) main program so that
when used as a script, it can retrieve one or more URLs to stdout.
Use -t to run the self-test.  Made the proxy code work again.

- In cgi.py, treat "HEAD" the same as "GET", so that CGI scripts don't
fail when someone asks for their HEAD.  Also, for POST, set the
default content-type to application/x-www-form-urlencoded.  Also, in
FieldStorage.__init__(), when method='GET', always get the query
string from environ['QUERY_STRING'] or sys.argv[1] -- ignore an
explicitly passed in fp.

- The smtplib.py module now supports ESMTP and has improved standard
compliance, for picky servers.

- Improved imaplib.py.

- Fixed UDP support in SocketServer.py (it never worked).

- Fixed a small bug in CGIHTTPServer.py.

Internet Data handling
----------------------

- In rfc822.py, add a new class AddressList.  Also support a new
overridable method, isheader().  Also add a get() method similar to
dictionaries (and make getheader() an alias for it).  Also, be smarter
about seekable (test whether fp.tell() works) and test for presence of
unread() method before trying seeks.

- In sgmllib.py, restore the call to report_unbalanced() that was lost
long ago.  Also some other improvements: handle <? processing
instructions >, allow . and - in entity names, and allow \r\n as line
separator.

- Some restructuring and generalization done to multifile.py; support
a 'seekable' flag.

Restricted Execution
--------------------

- Improvements to rexec.py: package support; support a (minimal)
sys.exc_info().  Also made the (test) main program a bit fancier (you
can now use it to run arbitrary Python scripts in restricted mode).

Tkinter
-------

- On Unix, Tkinter can now safely be used from a multi-threaded
application.  (Formerly, no threads would make progress while
Tkinter's mainloop() was active, because it didn't release the Python
interpreter lock.)  Unfortunately, on Windows, threads other than the
main thread should not call update() or update_idletasks() because
this will deadlock the application.

- An interactive interpreter that uses readline and Tkinter no longer
uses up all available CPU time.

- Even if readline is not used, Tk windows created in an interactive
interpreter now get continuously updated.  (This even works in Windows
as long as you don't hit a key.)

- New demos in Demo/tkinter/guido/: brownian.py, redemo.py, switch.py.

- No longer register Tcl_finalize() as a low-level exit handler.  It
may call back into Python, and that's a bad idea.

- Allow binding of Tcl commands (given as a string).

- Some minor speedups; replace explicitly coded getint() with int() in
most places.

- In FileDialog.py, remember the directory of the selected file, if
given.

- Change the names of all methods in the Wm class: they are now
wm_title(), etc.  The old names (title() etc.) are still defined as
aliases.

- Add a new method of interpreter objects, interpaddr().  This returns
the address of the Tcl interpreter object, as an integer.  Not very
useful for the Python programmer, but this can be called by another C
extension that needs to make calls into the Tcl/Tk C API and needs to
get the address of the Tcl interpreter object.  A simple cast of the
return value to (Tcl_Interp *) will do the trick.

Windows General
---------------

- Don't insist on proper case for module source files if the filename
is all uppercase (e.g. FOO.PY now matches foo; but FOO.py still
doesn't).  This should address problems with this feature on
oldfashioned filesystems (Novell servers?).

Windows Library
---------------

- os.environ is now all uppercase, but accesses are case insensitive,
and the putenv() calls made as a side effect of changing os.environ
are case preserving.

- Removed samefile(), sameopenfile(), samestat() from os.path (aka
ntpath.py) -- these cannot be made to work reliably (at least I
wouldn't know how).

- Fixed os.pipe() so that it returns file descriptors acceptable to
os.read() and os.write() (like it does on Unix), rather than Windows
file handles.

- Added a table of WSA error codes to socket.py.

- In the select module, put the (huge) file descriptor arrays on the
heap.

- The getpass module now raises KeyboardInterrupt when it sees ^C.

- In mailbox.py, fix tell/seek when using files opened in text mode.

- In rfc822.py, fix tell/seek when using files opened in text mode.

- In the msvcrt extension module, release the interpreter lock for
calls that may block: _locking(), _getch(), _getche().  Also fix a
bogus error return when open_osfhandle() doesn't have the right
argument list.

Windows Installer
-----------------

- The registry key used is now "1.5" instead of "1.5.x" -- so future
versions of 1.5 and Mark Hammond's win32all installer don't need to be
resynchronized.

Windows Tools
-------------

- Several improvements to freeze specifically for Windows.

Windows Build Procedure
-----------------------

- The VC++ project files and the WISE installer have been moved to the
PCbuild subdirectory, so they are distributed in the same subdirectory
where they must be used.  This avoids confusion.

- New project files for Windows 3.1 port by Jim Ahlstrom.

- Got rid of the obsolete subdirectory PC/setup_nt/.

- The projects now use distinct filenames for the .exe, .dll, .lib and
.pyd files built in debug mode (by appending "_d" to the base name,
before the extension).  This makes it easier to switch between the two
and get the right versions.  There's a pragma in config.h that directs
the linker to include the appropriate .lib file (so python15.lib no
longer needs to be explicit in your project).

- The installer now installs more files (e.g. config.h).  The idea is
that you shouldn't need the source distribution if you want build your
own extensions in C or C++.

Tools and Demos
---------------

- New script nm2def.py by Marc-Andre Lemburg, to construct
PC/python_nt.def automatically (some hand editing still required).

- New tool ndiff.py: Tim Peters' text diffing tool.

- Various and sundry improvements to the freeze script.

- The script texi2html.py (which was part of the Doc tree but is no
longer used there) has been moved to the Tools/scripts subdirectory.

- Some generalizations in the webchecker code.  There's now a
primnitive gui for websucker.py: wsgui.py.  (In Tools/webchecker/.)

- The ftpmirror.py script now handles symbolic links properly, and
also files with multiple spaces in their names.

- The 1.5.1 tabnanny.py suffers an assert error if fed a script whose
last line is both indented and lacks a newline.  This is now fixed.

Python/C API
------------

- Added missing prototypes for PyEval_CallFunction() and
PyEval_CallMethod().

- New macro PyList_SET_ITEM().

- New macros to access object members for PyFunction, PyCFunction
objects.

- New APIs PyImport_AppendInittab() and PyImport_ExtendInittab() to
dynamically add one or many entries to the table of built-in modules.

- New macro Py_InitModule3(name, methods, doc) which calls
Py_InitModule4() with appropriate arguments.  (The -4 variant requires
you to pass an obscure version number constant which is always the same.)

- New APIs PySys_WriteStdout() and PySys_WriteStderr() to write to
sys.stdout or sys.stderr using a printf-like interface.  (Used in
_tkinter.c, for example.)

- New APIs for conversion between Python longs and C 'long long' if
your compiler supports it.

- PySequence_In() is now called PySequence_Contains().
(PySequence_In() is still supported for b/w compatibility; it is
declared obsolete because its argument order is confusing.)

- PyDict_GetItem() and PyDict_GetItemString() are changed so that they
*never* raise an exception -- (even if the hash() fails, simply clear
the error).  This was necessary because there is lots of code out
there that already assumes this.

- Changes to PySequence_Tuple() and PySequence_List() to use the
length of a sequence only as a hint -- if an IndexError happens
earlier, take that.  (Formerly, this was considered an error.)

- Reformatted abstract.c to give it a more familiar "look" and fixed
many error checking bugs.

- Add NULL pointer checks to all calls of a C function through a type
object and extensions (e.g. nb_add).

- The code that initializes sys.path now calls Py_GetPythonHome()
instead of getenv("PYTHONHOME").  This, together with the new API
Py_SetPythonHome(), makes it easier for embedding applications to
change the notion of Python's "home" directory (where the libraries
etc. are sought).

- Fixed a very old bug in the parsing of "O?" format specifiers.


======================================================================


========================================
==> Release 1.5.1 (October 31, 1998) <==
========================================

From 1.5 to 1.5.1
=================

General
-------

- The documentation is now unbundled.  It has also been extensively
modified (mostly to implement a new and more uniform formatting
style).  We figure that most people will prefer to download one of the
preformatted documentation sets (HTML, PostScript or PDF) and that
only a minority have a need for the LaTeX or FrameMaker sources.  Of
course, the unbundled documentation sources still released -- just not
in the same archive file, and perhaps not on the same date.

- All bugs noted on the errors page (and many unnoted) are fixed.  All
new bugs take their places.

- No longer a core dump when attempting to print (or repr(), or str())
a list or dictionary that contains an instance of itself; instead, the
recursive entry is printed as [...] or {...}.  See Py_ReprEnter() and
Py_ReprLeave() below.  Comparisons of such objects still go beserk,
since this requires a different kind of fix; fortunately, this is a
less common scenario in practice.

Syntax change
-------------

- The raise statement can now be used without arguments, to re-raise
a previously set exception.  This should be used after catching an
exception with an except clause only, either in the except clause or
later in the same function.

Import and module handling
--------------------------

- The implementation of import has changed to use a mutex (when
threading is supported).  This means that when two threads
simultaneously import the same module, the import statements are
serialized.  Recursive imports are not affected.

- Rewrote the finalization code almost completely, to be much more
careful with the order in which modules are destroyed.  Destructors
will now generally be able to reference built-in names such as None
without trouble.

- Case-insensitive platforms such as Mac and Windows require the case
of a module's filename to match the case of the module name as
specified in the import statement (see below).

- The code for figuring out the default path now distinguishes between
files, modules, executable files, and directories.  When expecting a
module, we also look for the .pyc or .pyo file.

Parser/tokenizer changes
------------------------

- The tokenizer can now warn you when your source code mixes tabs and
spaces for indentation in a manner that depends on how much a tab is
worth in spaces.  Use "python -t" or "python -v" to enable this
option.  Use "python -tt" to turn the warnings into errors.  (See also
tabnanny.py and tabpolice.py below.)

- Return unsigned characters from tok_nextc(), so '\377' isn't
mistaken for an EOF character.

- Fixed two pernicious bugs in the tokenizer that only affected AIX.
One was actually a general bug that was triggered by AIX's smaller I/O
buffer size.  The other was a bug in the AIX optimizer's loop
unrolling code; swapping two statements made the problem go away.

Tools, demos and miscellaneous files
------------------------------------

- There's a new version of Misc/python-mode.el (the Emacs mode for
Python) which is much smarter about guessing the indentation style
used in a particular file.  Lots of other cool features too!

- There are two new tools in Tools/scripts: tabnanny.py and
tabpolice.py, implementing two different ways of checking whether a
file uses indentation in a way that is sensitive to the interpretation
of a tab.  The preferred module is tabnanny.py (by Tim Peters).

- Some new demo programs:

	Demo/tkinter/guido/paint.py -- Dave Mitchell
	Demo/sockets/unixserver.py -- Piet van Oostrum


- Much better freeze support.  The freeze script can now freeze
hierarchical module names (with a corresponding change to import.c),
and has a few extra options (e.g. to suppress freezing specific
modules).  It also does much more on Windows NT.

- Version 1.0 of the faq wizard is included (only very small changes
since version 0.9.0).

- New feature for the ftpmirror script: when removing local files
(i.e., only when -r is used), do a recursive delete.

Configuring and building Python
-------------------------------

- Get rid of the check for -linet -- recent Sequent Dynix systems don't
need this any more and apparently it screws up their configuration.

- Some changes because gcc on SGI doesn't support '-all'.

- Changed the build rules to use $(LIBRARY) instead of
  -L.. -lpython$(VERSION)
since the latter trips up the SunOS 4.1.x linker (sigh).

- Fix the bug where the '# dgux is broken' comment in the Makefile
tripped over Make on some platforms.

- Changes for AIX: install the python.exp file; properly use
$(srcdir); the makexp_aix script now removes C++ entries of the form
Class::method.

- Deleted some Makefile targets only used by the (long obsolete)
gMakefile hacks.

Extension modules
-----------------

- Performance and threading improvements to the socket and bsddb
modules, by Christopher Lindblad of Infoseek.

- Added operator.__not__ and operator.not_.

- In the thread module, when a thread exits due to an unhandled
exception, don't store the exception information in sys.last_*; it
prevents proper calling of destructors of local variables.

- Fixed a number of small bugs in the cPickle module.

- Changed find() and rfind() in the strop module so that
find("x","",2) returns -1, matching the implementation in string.py.

- In the time module, be more careful with the result of ctime(), and
test for HAVE_MKTIME before usinmg mktime().

- Doc strings contributed by Mitch Chapman to the termios, pwd, gdbm
modules.

- Added the LOG_SYSLOG constant to the syslog module, if defined.

Standard library modules
------------------------

- All standard library modules have been converted to an indentation
style using either only tabs or only spaces -- never a mixture -- if
they weren't already consistent according to tabnanny.  This means
that the new -t option (see above) won't complain about standard
library modules.

- New standard library modules:

	threading -- GvR and the thread-sig
		Java style thread objects -- USE THIS!!!

	getpass -- Piers Lauder
		simple utilities to prompt for a password and to
		retrieve the current username

	imaplib -- Piers Lauder
		interface for the IMAP4 protocol

	poplib -- David Ascher, Piers Lauder
		interface for the POP3 protocol

	smtplib -- Dragon De Monsyne
		interface for the SMTP protocol

- Some obsolete modules moved to a separate directory (Lib/lib-old)
which is *not* in the default module search path:

	Para
	addpack
	codehack
	fmt
	lockfile
	newdir
	ni
	rand
	tb

- New version of the PCRE code (Perl Compatible Regular Expressions --
the re module and the supporting pcre extension) by Andrew Kuchling.
Incompatible new feature in re.sub(): the handling of escapes in the
replacement string has changed.

- Interface change in the copy module: a __deepcopy__ method is now
called with the memo dictionary as an argument.

- Feature change in the tokenize module: differentiate between NEWLINE
token (an official newline) and NL token (a newline that the grammar
ignores).

- Several bugfixes to the urllib module.  It is now truly thread-safe,
and several bugs and a portability problem have been fixed.  New
features, all due to Sjoerd Mullender: When creating a temporary file,
it gives it an appropriate suffix.  Support the "data:" URL scheme.
The open() method uses the tempcache.

- New version of the xmllib module (this time with a test suite!) by
Sjoerd Mullender.

- Added debugging code to the telnetlib module, to be able to trace
the actual traffic.

- In the rfc822 module, added support for deleting a header (still no
support for adding headers, though).  Also fixed a bug where an
illegal address would cause a crash in getrouteaddr(), fixed a
sign reversal in mktime_tz(), and use the local timezone by default
(the latter two due to Bill van Melle).

- The normpath() function in the dospath and ntpath modules no longer
does case normalization -- for that, use the separate function
normcase() (which always existed); normcase() has been sped up and
fixed (it was the cause of a crash in Mark Hammond's installer in
certain locales).

- New command supported by the ftplib module: rmd(); also fixed some
minor bugs.

- The profile module now uses a different timer function by default --
time.clock() is generally better than os.times().  This makes it work
better on Windows NT, too.

- The tempfile module now recovers when os.getcwd() raises an
exception.

- Fixed some bugs in the random module; gauss() was subtly wrong, and
vonmisesvariate() should return a full circle.  Courtesy Mike Miller,
Lambert Meertens (gauss()), and Magnus Kessler (vonmisesvariate()).

- Better default seed in the whrandom module, courtesy Andrew Kuchling.

- Fix slow close() in shelve module.

- The Unix mailbox class in the mailbox module is now more robust when
a line begins with the string "From " but is definitely not the start
of a new message.  The pattern used can be changed by overriding a
method or class variable.

- Added a rmtree() function to the copy module.

- Fixed several typos in the pickle module.  Also fixed problems when
unpickling in restricted execution environments.

- Added docstrings and fixed a typo in the py_compile and compileall
modules.  At Mark Hammond's repeated request, py_compile now append a
newline to the source if it needs one.  Both modules support an extra
parameter to specify the purported source filename (to be used in
error messages).

- Some performance tweaks by Jeremy Hylton to the gzip module.

- Fixed a bug in the merge order of dictionaries in the ConfigParser
module.  Courtesy Barry Warsaw.

- In the multifile module, support the optional second parameter to
seek() when possible.

- Several fixes to the gopherlib module by Lars Marius Garshol.  Also,
urlparse now correctly handles Gopher URLs with query strings.

- Fixed a tiny bug in format_exception() in the traceback module.
Also rewrite tb_lineno() to be compatible with JPython (and not
disturb the current exception!); by Jim Hugunin.

- The httplib module is more robust when servers send a short response
-- courtesy Tim O'Malley.

Tkinter and friends
-------------------

- Various typos and bugs fixed.

- New module Tkdnd implements a drag-and-drop protocol (within one
application only).

- The event_*() widget methods have been restructured slightly -- they
no longer use the default root.

- The interfaces for the bind*() and unbind() widget methods have been
redesigned; the bind*() methods now return the name of the Tcl command
created for the callback, and this can be passed as an optional
argument to unbind() in order to delete the command (normally, such
commands are automatically unbound when the widget is destroyed, but
for some applications this isn't enough).

- Variable objects now have trace methods to interface to Tcl's
variable tracing facilities.

- Image objects now have an optional keyword argument, 'master', to
specify a widget (tree) to which they belong.  The image_names() and
image_types() calls are now also widget methods.

- There's a new global call, Tkinter.NoDefaultRoot(), which disables
all use of the default root by the Tkinter library.  This is useful to
debug applications that are in the process of being converted from
relying on the default root to explicit specification of the root
widget.

- The 'exit' command is deleted from the Tcl interpreter, since it
provided a loophole by which one could (accidentally) exit the Python
interpreter without invoking any cleanup code.

- Tcl_Finalize() is now registered as a Python low-level exit handle,
so Tcl will be finalized when Python exits.

The Python/C API
----------------

- New function PyThreadState_GetDict() returns a per-thread dictionary
intended for storing thread-local global variables.

- New functions Py_ReprEnter() and Py_ReprLeave() use the per-thread
dictionary to allow recursive container types to detect recursion in
their repr(), str() and print implementations.

- New function PyObject_Not(x) calculates (not x) according to Python's
standard rules (basically, it negates the outcome PyObject_IsTrue(x).

- New function _PyModule_Clear(), which clears a module's dictionary
carefully without removing the __builtins__ entry.  This is implied
when a module object is deallocated (this used to clear the dictionary
completely).

- New function PyImport_ExecCodeModuleEx(), which extends
PyImport_ExecCodeModule() by adding an extra parameter to pass it the
true file.

- New functions Py_GetPythonHome() and Py_SetPythonHome(), intended to
allow embedded applications to force a different value for PYTHONHOME.

- New global flag Py_FrozenFlag is set when this is a "frozen" Python
binary; it suppresses warnings about not being able to find the
standard library directories.

- New global flag Py_TabcheckFlag is incremented by the -t option and
causes the tokenizer to issue warnings or errors about inconsistent
mixing of tabs and spaces for indentation.

Miscellaneous minor changes and bug fixes
-----------------------------------------

- Improved the error message when an attribute of an attribute-less
object is requested -- include the name of the attribute and the type
of the object in the message.

- Sped up int(), long(), float() a bit.

- Fixed a bug in list.sort() that would occasionally dump core.

- Fixed a bug in PyNumber_Power() that caused numeric arrays to fail
when taken to the real power.

- Fixed a number of bugs in the file reading code, at least one of
which could cause a core dump on NT, and one of which would
occasionally cause file.read() to return less than the full contents
of the file.

- Performance hack by Vladimir Marangozov for stack frame creation.

- Make sure setvbuf() isn't used unless HAVE_SETVBUF is defined.

Windows 95/NT
-------------

- The .lib files are now part of the distribution; they are collected
in the subdirectory "libs" of the installation directory.

- The extension modules (.pyd files) are now collected in a separate
subdirectory of the installation directory named "DLLs".

- The case of a module's filename must now match the case of the
module name as specified in the import statement.  This is an
experimental feature -- if it turns out to break in too many
situations, it will be removed (or disabled by default) in the future.
It can be disabled on a per-case basis by setting the environment
variable PYTHONCASEOK (to any value).


======================================================================


=====================================
==> Release 1.5 (January 3, 1998) <==
=====================================


From 1.5b2 to 1.5
=================

- Newly documentated module: BaseHTTPServer.py, thanks to Greg Stein.

- Added doc strings to string.py, stropmodule.c, structmodule.c,
thanks to Charles Waldman.

- Many nits fixed in the manuals, thanks to Fred Drake and many others
(especially Rob Hooft and Andrew Kuchling).  The HTML version now uses
HTML markup instead of inline GIF images for tables; only two images
are left (for obscure bits of math).  The index of the HTML version has
also been much improved.  Finally, it is once again possible to
generate an Emacs info file from the library manual (but I don't
commit to supporting this in future versions).

- New module: telnetlib.py (a simple telnet client library).

- New tool: Tools/versioncheck/, by Jack Jansen.

- Ported zlibmodule.c and bsddbmodule.c to NT; The project file for MS
DevStudio 5.0 now includes new subprojects to build the zlib and bsddb
extension modules.

- Many small changes again to Tkinter.py -- mostly bugfixes and adding
missing routines.  Thanks to Greg McFarlane for reporting a bunch of
problems and proofreading my fixes.

- The re module and its documentation are up to date with the latest
version released to the string-sig (Dec. 22).

- Stop test_grp.py from failing when the /etc/group file is empty
(yes, this happens!).

- Fix bug in integer conversion (mystrtoul.c) that caused
4294967296==0 to be true!

- The VC++ 4.2 project file should be complete again.

- In tempfile.py, use a better template on NT, and add a new optional
argument "suffix" with default "" to specify a specific extension for
the temporary filename (needed sometimes on NT but perhaps also handy
elsewhere).

- Fixed some bugs in the FAQ wizard, and converted it to use re
instead of regex.

- Fixed a mysteriously undetected error in dlmodule.c (it was using a
totally bogus routine name to raise an exception).

- Fixed bug in import.c which wasn't using the new "dos-8x3" name yet.

- Hopefully harmless changes to the build process to support shared
libraries on DG/UX.  This adds a target to create
libpython$(VERSION).so; however this target is *only* for DG/UX.

- Fixed a bug in the new format string error checking in getargs.c.

- A simple fix for infinite recursion when printing __builtins__:
reset '_' to None before printing and set it to the printed variable
*after* printing (and only when printing is successful).

- Fixed lib-tk/SimpleDialog.py to keep the dialog visible even if the
parent window is not (Skip Montanaro).

- Fixed the two most annoying problems with ftp URLs in
urllib.urlopen(); an empty file now correctly raises an error, and it
is no longer required to explicitly close the returned "file" object
before opening another ftp URL to the same host and directory.


======================================================================


From 1.5b1 to 1.5b2
===================

- Fixed a bug in cPickle.c that caused it to crash right away because
the version string had a different format.

- Changes in pickle.py and cPickle.c: when unpickling an instance of a
class that doesn't define the __getinitargs__() method, the __init__()
constructor is no longer called.  This makes a much larger group of
classes picklable by default, but may occasionally change semantics.
To force calling __init__() on unpickling, define a __getinitargs__()
method.  Other changes too, in particular cPickle now handles classes
defined in packages correctly.  The same change applies to copying
instances with copy.py.  The cPickle.c changes and some pickle.py
changes are courtesy Jim Fulton.

- Locale support in he "re" (Perl regular expressions) module.  Use
the flag re.L (or re.LOCALE) to enable locale-specific matching
rules for \w and \b.  The in-line syntax for this flag is (?L).

- The built-in function isinstance(x, y) now also succeeds when y is
a type object and type(x) is y.

- repr() and str() of class and instance objects now reflect the
package/module in which the class is defined.

- Module "ni" has been removed.  (If you really need it, it's been
renamed to "ni1".  Let me know if this causes any problems for you.
Package authors are encouraged to write __init__.py files that
support both ni and 1.5 package support, so the same version can be
used with Python 1.4 as well as 1.5.)

- The thread module is now automatically included when threads are
configured.  (You must remove it from your existing Setup file,
since it is now in its own Setup.thread file.)

- New command line option "-x" to skip the first line of the script;
handy to make executable scripts on non-Unix platforms.

- In importdl.c, add the RTLD_GLOBAL to the dlopen() flags.  I
haven't checked how this affects things, but it should make symbols
in one shared library available to the next one.

- The Windows installer now installs in the "Program Files" folder on
the proper volume by default.

- The Windows configuration adds a new main program, "pythonw", and
registers a new extension, ".pyw" that invokes this.  This is a
pstandard Python interpreter that does not pop up a console window;
handy for pure Tkinter applications.  All output to the original
stdout and stderr is lost; reading from the original stdin yields
EOF.  Also, both python.exe and pythonw.exe now have a pretty icon
(a green snake in a box, courtesy Mark Hammond).

- Lots of improvements to emacs-mode.el again.  See Barry's web page:
http://www.python.org/ftp/emacs/pmdetails.html.

- Lots of improvements and additions to the library reference manual;
many by Fred Drake.

- Doc strings for the following modules: rfc822.py, posixpath.py,
ntpath.py, httplib.py.  Thanks to Mitch Chapman and Charles Waldman.

- Some more regression testing.

- An optional 4th (maxsplit) argument to strop.replace().

- Fixed handling of maxsplit in string.splitfields().

- Tweaked os.environ so it can be pickled and copied.

- The portability problems caused by indented preprocessor commands
and C++ style comments should be gone now.

- In random.py, added Pareto and Weibull distributions.

- The crypt module is now disabled in Modules/Setup.in by default; it
is rarely needed and causes errors on some systems where users often
don't know how to deal with those.

- Some improvements to the _tkinter build line suggested by Case Roole.

- A full suite of platform specific files for NetBSD 1.x, submitted by
Anders Andersen.

- New Solaris specific header STROPTS.py.

- Moved a confusing occurrence of *shared* from the comments in
Modules/Setup.in (people would enable this one instead of the real
one, and get disappointing results).

- Changed the default mode for directories to be group-writable when
the installation process creates them.

- Check for pthread support in "-l_r" for FreeBSD/NetBSD, and support
shared libraries for both.

- Support FreeBSD and NetBSD in posixfile.py.

- Support for the "event" command, new in Tk 4.2.  By Case Roole.

- Add Tix_SafeInit() support to tkappinit.c.

- Various bugs fixed in "re.py" and "pcre.c".

- Fixed a bug (broken use of the syntax table) in the old "regexpr.c".

- In frozenmain.c, stdin is made unbuffered too when PYTHONUNBUFFERED
is set.

- Provide default blocksize for retrbinary in ftplib.py (Skip
Montanaro).

- In NT, pick the username up from different places in user.py (Jeff
Bauer).

- Patch to urlparse.urljoin() for ".." and "..#1", Marc Lemburg.

- Many small improvements to Jeff Rush' OS/2 support.

- ospath.py is gone; it's been obsolete for so many years now...

- The reference manual is now set up to prepare better HTML (still
using webmaker, alas).

- Add special handling to /Tools/freeze for Python modules that are
imported implicitly by the Python runtime: 'site' and 'exceptions'.

- Tools/faqwiz 0.8.3 -- add an option to suppress URL processing
inside <PRE>, by "Scott".

- Added ConfigParser.py, a generic parser for sectioned configuration
files.

- In _localemodule.c, LC_MESSAGES is not always defined; put it
between #ifdefs.

- Typo in resource.c: RUSAGE_CHILDERN -> RUSAGE_CHILDREN.

- Demo/scripts/newslist.py: Fix the way the version number is gotten
out of the RCS revision.

- PyArg_Parse[Tuple] now explicitly check for bad characters at the
end of the format string.

- Revamped PC/example_nt to support VC++ 5.x.

- <listobject>.sort() now uses a modified quicksort by Raymund Galvin,
after studying the GNU libg++ quicksort.  This should be much faster
if there are lots of duplicates, and otherwise at least as good.

- Added "uue" as an alias for "uuencode" to mimetools.py.  (Hm, the
uudecode bug where it complaints about trailing garbage is still there
:-( ).

- pickle.py requires integers in text mode to be in decimal notation
(it used to accept octal and hex, even though it would only generate
decimal numbers).

- In string.atof(), don't fail when the "re" module is unavailable.
Plug the ensuing security leak by supplying an empty __builtins__
directory to eval().

- A bunch of small fixes and improvements to Tkinter.py.

- Fixed a buffer overrun in PC/getpathp.c.


======================================================================


From 1.5a4 to 1.5b1
===================

- The Windows NT/95 installer now includes full HTML of all manuals.
It also has a checkbox that lets you decide whether to install the
interpreter and library.  The WISE installer script for the installer
is included in the source tree as PC/python15.wse, and so are the
icons used for Python files.  The config.c file for the Windows build
is now complete with the pcre module.

- sys.ps1 and sys.ps2 can now arbitrary objects; their str() is
evaluated for the prompt.

- The reference manual is brought up to date (more or less -- it still
needs work, e.g. in the area of package import).

- The icons used by latex2html are now included in the Doc
subdirectory (mostly so that tarring up the HTML files can be fully
automated).  A simple index.html is also added to Doc (it only works
after you have successfully run latex2html).

- For all you would-be proselytizers out there: a new version of
Misc/BLURB describes Python more concisely, and Misc/comparisons
compares Python to several other languages.  Misc/BLURB.WINDOWS
contains a blurb specifically aimed at Windows programmers (by Mark
Hammond).

- A new version of the Python mode for Emacs is included as
Misc/python-mode.el.  There are too many new features to list here.
See http://www.python.org/ftp/emacs/pmdetails.html for more info.

- New module fileinput makes iterating over the lines of a list of
files easier.  (This still needs some more thinking to make it more
extensible.)

- There's full OS/2 support, courtesy Jeff Rush.  To build the OS/2
version, see PC/readme.txt and PC/os2vacpp.  This is for IBM's Visual
Age C++ compiler.  I expect that Jeff will also provide a binary
release for this platform.

- On Linux, the configure script now uses '-Xlinker -export-dynamic'
instead of '-rdynamic' to link the main program so that it exports its
symbols to shared libraries it loads dynamically.  I hope this doesn't
break on older Linux versions; it is needed for mklinux and appears to
work on Linux 2.0.30.

- Some Tkinter resstructuring: the geometry methods that apply to a
master are now properly usable on toplevel master widgets.  There's a
new (internal) widget class, BaseWidget.  New, longer "official" names
for the geometry manager methods have been added,
e.g. "grid_columnconfigure()" instead of "columnconfigure()".  The old
shorter names still work, and where there's ambiguity, pack wins over
place wins over grid.  Also, the bind_class method now returns its
value.

- New, RFC-822 conformant parsing of email addresses and address lists
in the rfc822 module, courtesy Ben Escoto.

- New, revamped tkappinit.c with support for popular packages (PIL,
TIX, BLT, TOGL).  For the last three, you need to execute the Tcl
command "load {} Tix" (or Blt, or Togl) to gain access to them.
The Modules/Setup line for the _tkinter module has been rewritten
using the cool line-breaking feature of most Bourne shells.

- New socket method connect_ex() returns the error code from connect()
instead of raising an exception on errors; this makes the logic
required for asynchronous connects simpler and more efficient.

- New "locale" module with (still experimental) interface to the
standard C library locale interface, courtesy Martin von Löwis.  This
does not repeat my mistake in 1.5a4 of always calling
setlocale(LC_ALL, "").  In fact, we've pretty much decided that
Python's standard numerical formatting operations should always use
the conventions for the C locale; the locale module contains utility
functions to format numbers according to the user specified locale.
(All this is accomplished by an explicit call to setlocale(LC_NUMERIC,
"C") after locale-changing calls.)  See the library manual. (Alas, the
promised changes to the "re" module for locale support have not been
materialized yet.  If you care, volunteer!)

- Memory leak plugged in Py_BuildValue when building a dictionary.

- Shared modules can now live inside packages (hierarchical module
namespaces).  No changes to the shared module itself are needed.

- Improved policy for __builtins__: this is a module in __main__ and a
dictionary everywhere else.

- Python no longer catches SIGHUP and SIGTERM by default.  This was
impossible to get right in the light of thread contexts.  If you want
your program to clean up when a signal happens, use the signal module
to set up your own signal handler.

- New Python/C API PyNumber_CoerceEx() does not return an exception
when no coercion is possible.  This is used to fix a problem where
comparing incompatible numbers for equality would raise an exception
rather than return false as in Python 1.4 -- it once again will return
false.

- The errno module is changed again -- the table of error messages
(errorstr) is removed.  Instead, you can use os.strerror().  This
removes redundance and a potential locale dependency.

- New module xmllib, to parse XML files.  By Sjoerd Mullender.

- New C API PyOS_AfterFork() is called after fork() in posixmodule.c.
It resets the signal module's notion of what the current process ID
and thread are, so that signal handlers will work after (and across)
calls to os.fork().

- Fixed most occurrences of fatal errors due to missing thread state.

- For vgrind (a flexible source pretty printer) fans, there's a simple
Python definition in Misc/vgrindefs, courtesy Neale Pickett.

- Fixed memory leak in exec statement.

- The test.pystone module has a new function, pystones(loops=LOOPS),
which returns a (benchtime, stones) tuple.  The main() function now
calls this and prints the report.

- Package directories now *require* the presence of an __init__.py (or
__init__.pyc) file before they are considered as packages.  This is
done to prevent accidental subdirectories with common names from
overriding modules with the same name.

- Fixed some strange exceptions in __del__ methods in library modules
(e.g. urllib).  This happens because the built-in names are already
deleted by the time __del__ is called.  The solution (a hack, but it
works) is to set some instance variables to 0 instead of None.

- The table of built-in module initializers is replaced by a pointer
variable.  This makes it possible to switch to a different table at
run time, e.g. when a collection of modules is loaded from a shared
library.  (No example code of how to do this is given, but it is
possible.)  The table is still there of course, its name prefixed with
an underscore and used to initialize the pointer.

- The warning about a thread still having a frame now only happens in
verbose mode.

- Change the signal finalization so that it also resets the signal
handlers.  After this has been called, our signal handlers are no
longer active!

- New version of tokenize.py (by Ka-Ping Yee) recognizes raw string
literals.  There's now also a test fort this module.

- The copy module now also uses __dict__.update(state) instead of
going through individual attribute assignments, for class instances
without a __setstate__ method.

- New module reconvert translates old-style (regex module) regular
expressions to new-style (re module, Perl-style) regular expressions.

- Most modules that used to use the regex module now use the re
module.  The grep module has a new pgrep() function which uses
Perl-style regular expressions.

- The (very old, backwards compatibility) regexp.py module has been
deleted.

- Restricted execution (rexec): added the pcre module (support for the
re module) to the list of trusted extension modules.

- New version of Jim Fulton's CObject object type, adds
PyCObject_FromVoidPtrAndDesc() and PyCObject_GetDesc() APIs.

- Some patches to Lee Busby's fpectl mods that accidentally didn't
make it into 1.5a4.

- In the string module, add an optional 4th argument to count(),
matching find() etc.

- Patch for the nntplib module by Charles Waldman to add optional user
and password arguments to NNTP.__init__(), for nntp servers that need
them.

- The str() function for class objects now returns
"modulename.classname" instead of returning the same as repr().

- The parsing of \xXX escapes no longer relies on sscanf().

- The "sharedmodules" subdirectory of the installation is renamed to
"lib-dynload".  (You may have to edit your Modules/Setup file to fix
this in an existing installation!)

- Fixed Don Beaudry's mess-up with the OPT test in the configure
script.  Certain SGI platforms will still issue a warning for each
compile; there's not much I can do about this since the compiler's
exit status doesn't indicate that I was using an obsolete option.

- Fixed Barry's mess-up with {}.get(), and added test cases for it.

- Shared libraries didn't quite work under AIX because of the change
in status of the GNU readline interface.  Fix due to by Vladimir
Marangozov.


======================================================================


From 1.5a3 to 1.5a4
===================

- faqwiz.py: version 0.8; Recognize https:// as URL; <html>...</html>
feature; better install instructions; removed faqmain.py (which was an
older version).

- nntplib.py: Fixed some bugs reported by Lars Wirzenius (to Debian)
about the treatment of lines starting with '.'.  Added a minimal test
function.

- struct module: ignore most whitespace in format strings.

- urllib.py: close the socket and temp file in URLopener.retrieve() so
that multiple retrievals using the same connection work.

- All standard exceptions are now classes by default; use -X to make
them strings (for backward compatibility only).

- There's a new standard exception hierarchy, defined in the standard
library module exceptions.py (which you never need to import
explicitly).  See
http://grail.cnri.reston.va.us/python/essays/stdexceptions.html for
more info.

- Three new C API functions:

  - int PyErr_GivenExceptionMatches(obj1, obj2)

    Returns 1 if obj1 and obj2 are the same object, or if obj1 is an
    instance of type obj2, or of a class derived from obj2

  - int PyErr_ExceptionMatches(obj)

    Higher level wrapper around PyErr_GivenExceptionMatches() which uses
    PyErr_Occurred() as obj1.  This will be the more commonly called
    function.

  - void PyErr_NormalizeException(typeptr, valptr, tbptr)

    Normalizes exceptions, and places the normalized values in the
    arguments.  If type is not a class, this does nothing.  If type is a
    class, then it makes sure that value is an instance of the class by:

    1. if instance is of the type, or a class derived from type, it does
       nothing.

    2. otherwise it instantiates the class, using the value as an
       argument.  If value is None, it uses an empty arg tuple, and if
       the value is a tuple, it uses just that.

- Another new C API function: PyErr_NewException() creates a new
exception class derived from Exception; when -X is given, it creates a
new string exception.

- core interpreter: remove the distinction between tuple and list
unpacking; allow an arbitrary sequence on the right hand side of any
unpack instruction.  (UNPACK_LIST and UNPACK_TUPLE now do the same
thing, which should really be called UNPACK_SEQUENCE.)

- classes: Allow assignments to an instance's __dict__ or __class__,
so you can change ivars (including shared ivars -- shock horror) and
change classes dynamically.  Also make the check on read-only
attributes of classes less draconic -- only the specials names
__dict__, __bases__, __name__ and __{get,set,del}attr__ can't be
assigned.

- Two new built-in functions: issubclass() and isinstance().  Both
take classes as their second arguments.  The former takes a class as
the first argument and returns true iff first is second, or is a
subclass of second.  The latter takes any object as the first argument
and returns true iff first is an instance of the second, or any
subclass of second.

- configure: Added configuration tests for presence of alarm(),
pause(), and getpwent().

- Doc/Makefile: changed latex2html targets.

- classes: Reverse the search order for the Don Beaudry hook so that
the first class with an applicable hook wins.  Makes more sense.

- Changed the checks made in Py_Initialize() and Py_Finalize().  It is
now legal to call these more than once.  The first call to
Py_Initialize() initializes, the first call to Py_Finalize()
finalizes.  There's also a new API, Py_IsInitialized() which checks
whether we are already initialized (in case you want to leave things
as they were).

- Completely disable the declarations for malloc(), realloc() and
free().  Any 90's C compiler has these in header files, and the tests
to decide whether to suppress the declarations kept failing on some
platforms.

- *Before* (instead of after) signalmodule.o is added, remove both
intrcheck.o and sigcheck.o.  This should get rid of warnings in ar or
ld on various systems.

- Added reop to PC/config.c

- configure: Decided to use -Aa -D_HPUX_SOURCE on HP-UX platforms.
Removed outdated HP-UX comments from README.  Added Cray T3E comments.

- Various renames of statically defined functions that had name
conflicts on some systems, e.g. strndup (GNU libc), join (Cray),
roundup (sys/types.h).

- urllib.py: Interpret three slashes in file: URL as local file (for
Netscape on Windows/Mac).

- copy.py: Make sure the objects returned by __getinitargs__() are
kept alive (in the memo) to avoid a certain kind of nasty crash.  (Not
easily reproducible because it requires a later call to
__getinitargs__() to return a tuple that happens to be allocated at
the same address.)

- Added definition of AR to toplevel Makefile.  Renamed @buildno temp
file to buildno1.

- Moved Include/assert.h to Parser/assert.h, which seems to be the
only place where it's needed.

- Tweaked the dictionary lookup code again for some more speed
(Vladimir Marangozov).

- NT build: Changed the way python15.lib is included in the other
projects.  Per Mark Hammond's suggestion, add it to the extra libs in
Settings instead of to the project's source files.

- regrtest.py: Change default verbosity so that there are only three
levels left: -q, default and -v.  In default mode, the name of each
test is now printed.  -v is the same as the old -vv.  -q is more quiet
than the old default mode.

- Removed the old FAQ from the distribution.  You now have to get it
from the web!

- Removed the PC/make_nt.in file from the distribution; it is no
longer needed.

- Changed the build sequence so that shared modules are built last.
This fixes things for AIX and doesn't hurt elsewhere.

- Improved test for GNU MP v1 in mpzmodule.c

- fileobject.c: ftell() on Linux discards all buffered data; changed
read() code to use lseek() instead to get the same effect

- configure.in, configure, importdl.c: NeXT sharedlib fixes

- tupleobject.c: PyTuple_SetItem asserts refcnt==1

- resource.c: Different strategy regarding whether to declare
getrusage() and getpagesize() -- #ifdef doesn't work, Linux has
conflicting decls in its headers.  Choice: only declare the return
type, not the argument prototype, and not on Linux.

- importdl.c, configure*: set sharedlib extensions properly for NeXT

- configure*, Makefile.in, Modules/Makefile.pre.in: AIX shared libraries
fixed; moved addition of PURIFY to LINKCC to configure

- reopmodule.c, regexmodule.c, regexpr.c, zlibmodule.c: needed casts
added to shup up various compilers.

- _tkinter.c: removed buggy mac #ifndef

- Doc: various Mac documentation changes, added docs for 'ic' module

- PC/make_nt.in: deleted

- test_time.py, test_strftime.py: tweaks to catch %Z (which may return
"")

- test_rotor.py: print b -> print `b`

- Tkinter.py: (tagOrId) -> (tagOrId,)

- Tkinter.py: the Tk class now also has a configure() method and
friends (they have been moved to the Misc class to accomplish this).

- dict.get(key[, default]) returns dict[key] if it exists, or default
if it doesn't.  The default defaults to None.  This is quicker for
some applications than using either has_key() or try:...except
KeyError:....

- Tools/webchecker/: some small changes to webchecker.py; added
websucker.py (a simple web site mirroring script).

- Dictionary objects now have a get() method (also in UserDict.py).
dict.get(key, default) returns dict[key] if it exists and default
otherwise; default defaults to None.

- Tools/scripts/logmerge.py: print the author, too.

- Changes to import: support for "import a.b.c" is now built in.  See
http://grail.cnri.reston.va.us/python/essays/packages.html
for more info.  Most important deviations from "ni.py": __init__.py is
executed in the package's namespace instead of as a submodule; and
there's no support for "__" or "__domain__".  Note that "ni.py" is not
changed to match this -- it is simply declared obsolete (while at the
same time, it is documented...:-( ).
Unfortunately, "ihooks.py" has not been upgraded (but see "knee.py"
for an example implementation of hierarchical module import written in
Python).

- More changes to import: the site.py module is now imported by
default when Python is initialized; use -S to disable it.  The site.py
module extends the path with several more directories: site-packages
inside the lib/python1.5/ directory, site-python in the lib/
directory, and pathnames mentioned in *.pth files found in either of
those directories.  See
http://grail.cnri.reston.va.us/python/essays/packages.html
for more info.

- Changes to standard library subdirectory names: those subdirectories
that are not packages have been renamed with a hyphen in their name,
e.g. lib-tk, lib-stdwin, plat-win, plat-linux2, plat-sunos5, dos-8x3.
The test suite is now a package -- to run a test, you must now use
"import test.test_foo".

- A completely new re.py module is provided (thanks to Andrew
Kuchling, Tim Peters and Jeffrey Ollie) which uses Philip Hazel's
"pcre" re compiler and engine.  For a while, the "old" re.py (which
was new in 1.5a3!) will be kept around as re1.py.  The "old" regex
module and underlying parser and engine are still present -- while
regex is now officially obsolete, it will probably take several major
release cycles before it can be removed.

- The posix module now has a strerror() function which translates an
error code to a string.

- The emacs.py module (which was long obsolete) has been removed.

- The universal makefile Misc/Makefile.pre.in now features an
"install" target.  By default, installed shared libraries go into
$exec_prefix/lib/python$VERSION/site-packages/.

- The install-sh script is installed with the other configuration
specific files (in the config/ subdirectory).

- It turns out whatsound.py and sndhdr.py were identical modules.
Since there's also an imghdr.py file, I propose to make sndhdr.py the
official one.  For compatibility, whatsound.py imports * from
sndhdr.py.

- Class objects have a new attribute, __module__, giving the name of
the module in which they were declared.  This is useful for pickle and
for printing the full name of a class exception.

- Many extension modules no longer issue a fatal error when their
initialization fails; the importing code now checks whether an error
occurred during module initialization, and correctly propagates the
exception to the import statement.

- Most extension modules now raise class-based exceptions (except when
-X is used).

- Subtle changes to PyEval_{Save,Restore}Thread(): always swap the
thread state -- just don't manipulate the lock if it isn't there.

- Fixed a bug in Python/getopt.c that made it do the wrong thing when
an option was a single '-'.  Thanks to Andrew Kuchling.

- New module mimetypes.py will guess a MIME type from a filename's
extension.

- Windows: the DLL version is now settable via a resource rather than
being hardcoded.  This can be used for "branding" a binary Python
distribution.

- urllib.py is now threadsafe -- it now uses re instead of regex, and
sys.exc_info() instead of sys.exc_{type,value}.

- Many other library modules that used to use
sys.exc_{type,value,traceback} are now more thread-safe by virtue of
using sys.exc_info().

- The functions in popen2 have an optional buffer size parameter.
Also, the command argument can now be either a string (passed to the
shell) or a list of arguments (passed directly to execv).

- Alas, the thread support for _tkinter released with 1.5a3 didn't
work.  It's been rewritten.  The bad news is that it now requires a
modified version of a file in the standard Tcl distribution, which you
must compile with a -I option pointing to the standard Tcl source
tree.  For this reason, the thread support is disabled by default.

- The errno extension module adds two tables: errorcode maps errno
numbers to errno names (e.g. EINTR), and errorstr maps them to
message strings.  (The latter is redundant because the new call
posix.strerror() now does the same, but alla...)  (Marc-Andre Lemburg)

- The readline extension module now provides some interfaces to
internal readline routines that make it possible to write a completer
in Python.  An example completer, rlcompleter.py, is provided.

	When completing a simple identifier, it completes keywords,
	built-ins and globals in __main__; when completing
	NAME.NAME..., it evaluates (!) the expression up to the last
	dot and completes its attributes.

	It's very cool to do "import string" type "string.", hit the
	completion key (twice), and see the list of names defined by
	the string module!

	Tip: to use the tab key as the completion key, call

	    readline.parse_and_bind("tab: complete")

- The traceback.py module has a new function tb_lineno() by Marc-Andre
Lemburg which extracts the line number from the linenumber table in
the code object.  Apparently the traceback object doesn't contain the
right linenumber when -O is used.  Rather than guessing whether -O is
on or off, the module itself uses tb_lineno() unconditionally.

- Fixed Demo/tkinter/matt/canvas-moving-or-creating.py: change bind()
to tag_bind() so it works again.

- The pystone script is now a standard library module.  Example use:
"import test.pystone; test.pystone.main()".

- The import of the readline module in interactive mode is now also
attempted when -i is specified.  (Yes, I know, giving in to Marc-Andre
Lemburg, who asked for this. :-)

- rfc822.py: Entirely rewritten parseaddr() function by Sjoerd
Mullender, to be closer to the standard.  This fixes the getaddr()
method.  Unfortunately, getaddrlist() is as broken as ever, since it
splits on commas without regard for RFC 822 quoting conventions.

- pprint.py: correctly emit trailing "," in singleton tuples.

- _tkinter.c: export names for its type objects, TkappType and
TkttType.

- pickle.py: use __module__ when defined; fix a particularly hard to
reproduce bug that confuses the memo when temporary objects are
returned by custom pickling interfaces; and a semantic change: when
unpickling the instance variables of an instance, use
inst.__dict__.update(value) instead of a for loop with setattr() over
the value.keys().  This is more consistent (the pickling doesn't use
getattr() either but pickles inst.__dict__) and avoids problems with
instances that have a __setattr__ hook.  But it *is* a semantic change
(because the setattr hook is no longer used).  So beware!

- config.h is now installed (at last) in
$exec_prefix/include/python1.5/.  For most sites, this means that it
is actually in $prefix/include/python1.5/, with all the other Python
include files, since $prefix and $exec_prefix are the same by
default.

- The imp module now supports parts of the functionality to implement
import of hierarchical module names.  It now supports find_module()
and load_module() for all types of modules.  Docstrings have been
added for those functions in the built-in imp module that are still
relevant (some old interfaces are obsolete).  For a sample
implementation of hierarchical module import in Python, see the new
library module knee.py.

- The % operator on string objects now allows arbitrary nested parens
in a %(...)X style format.  (Brad Howes)

- Reverse the order in which Setup and Setup.local are passed to the
makesetup script.  This allows variable definitions in Setup.local to
override definitions in Setup.  (But you'll still have to edit Setup
if you want to disable modules that are enabled by default, or if such
modules need non-standard options.)

- Added PyImport_ImportModuleEx(name, globals, locals, fromlist); this
is like PyImport_ImporModule(name) but receives the globals and locals
dict and the fromlist arguments as well.  (The name is a char*; the
others are PyObject*s).

- The 'p' format in the struct extension module alloded to above is
new in 1.5a4.

- The types.py module now uses try-except in a few places to make it
more likely that it can be imported in restricted mode.  Some type
names are undefined in that case, e.g. CodeType (inaccessible),
FileType (not always accessible), and TracebackType and FrameType
(inaccessible).

- In urllib.py: added separate administration of temporary files
created y URLopener.retrieve() so cleanup() can properly remove them.
The old code removed everything in tempcache which was a bad idea if
the user had passed a non-temp file into it.  Also, in basejoin(),
interpret relative paths starting in "../".  This is necessary if the
server uses symbolic links.

- The Windows build procedure and project files are now based on
Microsoft Visual C++ 5.x.  The build now takes place in the PCbuild
directory.  It is much more robust, and properly builds separate Debug
and Release versions.  (The installer will be added shortly.)

- Added casts and changed some return types in regexpr.c to avoid
compiler warnings or errors on some platforms.

- The AIX build tools for shared libraries now supports VPATH.  (Donn
Cave)

- By default, disable the "portable" multimedia modules audioop,
imageop, and rgbimg, since they don't work on 64-bit platforms.

- Fixed a nasty bug in cStringIO.c when code was actually using the
close() method (the destructors would try to free certain fields a
second time).

- For those who think they need it, there's a "user.py" module.  This
is *not* imported by default, but can be imported to run user-specific
setup commands, ~/.pythonrc.py.

- Various speedups suggested by Fredrik Lundh, Marc-Andre Lemburg,
Vladimir Marangozov, and others.

- Added os.altsep; this is '/' on DOS/Windows, and None on systems
with a sane filename syntax.

- os.py: Write out the dynamic OS choice, to avoid exec statements.
Adding support for a new OS is now a bit more work, but I bet that
'dos' or 'nt' will cover most situations...

- The obsolete exception AccessError is now really gone.

- Tools/faqwiz/: New installation instructions show how to maintain
multiple FAQs.  Removed bootstrap script from end of faqwiz.py module.
Added instructions to bootstrap script, too.  Version bumped to 0.8.1.
Added <html>...</html> feature suggested by Skip Montanaro.  Added
leading text for Roulette, default to 'Hit Reload ...'.  Fix typo in
default SRCDIR.

- Documentation for the relatively new modules "keyword" and "symbol"
has been added (to the end of the section on the parser extension
module).

- In module bisect.py, but functions have two optional argument 'lo'
and 'hi' which allow you to specify a subsequence of the array to
operate on.

- In ftplib.py, changed most methods to return their status (even when
it is always "200 OK") rather than swallowing it.

- main() now calls setlocale(LC_ALL, ""), if setlocale() and
<locale.h> are defined.

- Changes to configure.in, the configure script, and both
Makefile.pre.in files, to support SGI's SGI_ABI platform selection
environment variable.


======================================================================


From 1.4 to 1.5a3
=================

Security
--------

- If you are using the setuid script C wrapper (Misc/setuid-prog.c),
please use the new version.  The old version has a huge security leak.

Miscellaneous
-------------

- Because of various (small) incompatible changes in the Python
bytecode interpreter, the magic number for .pyc files has changed
again.

- The default module search path is now much saner.  Both on Unix and
Windows, it is essentially derived from the path to the executable
(which can be overridden by setting the environment variable
$PYTHONHOME).  The value of $PYTHONPATH on Windows is now inserted in
front of the default path, like in Unix (instead of overriding the
default path).  On Windows, the directory containing the executable is
added to the end of the path.

- A new version of python-mode.el for Emacs has been included.  Also,
a new file ccpy-style.el has been added to configure Emacs cc-mode for
the preferred style in Python C sources.

- On Unix, when using sys.argv[0] to insert the script directory in
front of sys.path, expand a symbolic link.  You can now install a
program in a private directory and have a symbolic link to it in a
public bin directory, and it will put the private directory in the
module search path.  Note that the symlink is expanded in sys.path[0]
but not in sys.argv[0], so you can still tell the name by which you
were invoked.

- It is now recommended to use ``#!/usr/bin/env python'' instead of
``#!/usr/local/bin/python'' at the start of executable scripts, except
for CGI scripts.  It has been determined that the use of /usr/bin/env
is more portable than that of /usr/local/bin/python -- scripts almost
never have to be edited when the Python interpreter lives in a
non-standard place.  Note that this doesn't work for CGI scripts since
the python executable often doesn't live in the HTTP server's default
search path.

- The silly -s command line option and the corresponding
PYTHONSUPPRESS environment variable (and the Py_SuppressPrint global
flag in the Python/C API) are gone.

- Most problems on 64-bit platforms should now be fixed.  Andrew
Kuchling helped.  Some uncommon extension modules are still not
clean (image and audio ops?).

- Fixed a bug where multiple anonymous tuple arguments would be mixed up
when using the debugger or profiler (reported by Just van Rossum).
The simplest example is ``def f((a,b),(c,d)): print a,b,c,d''; this
would print the wrong value when run under the debugger or profiler.

- The hacks that the dictionary implementation used to speed up
repeated lookups of the same C string were removed; these were a
source of subtle problems and don't seem to serve much of a purpose
any longer.

- All traces of support for the long dead access statement have been
removed from the sources.

- Plugged the two-byte memory leak in the tokenizer when reading an
interactive EOF.

- There's a -O option to the interpreter that removes SET_LINENO
instructions and assert statements (see below); it uses and produces
.pyo files instead of .pyc files.  The speedup is only a few percent
in most cases.  The line numbers are still available in the .pyo file,
as a separate table (which is also available in .pyc files).  However,
the removal of the SET_LINENO instructions means that the debugger
(pdb) can't set breakpoints on lines in -O mode.  The traceback module
contains a function to extract a line number from the code object
referenced in a traceback object.  In the future it should be possible
to write external bytecode optimizers that create better optimized
.pyo files, and there should be more control over optimization;
consider the -O option a "teaser".  Without -O, the assert statement
actually generates code that first checks __debug__; if this variable
is false, the assertion is not checked.  __debug__ is a built-in
variable whose value is initialized to track the -O flag (it's true
iff -O is not specified).  With -O, no code is generated for assert
statements, nor for code of the form ``if __debug__: <something>''.
Sorry, no further constant folding happens.


Performance
-----------

- It's much faster (almost twice for pystone.py -- see
Tools/scripts).  See the entry on string interning below.

- Some speedup by using separate free lists for method objects (both
the C and the Python variety) and for floating point numbers.

- Big speedup by allocating frame objects with a single malloc() call.
The Python/C API for frames is changed (you shouldn't be using this
anyway).

- Significant speedup by inlining some common opcodes for common operand
types (e.g.  i+i, i-i, and list[i]).  Fredrik Lundh.

- Small speedup by reordering the method tables of some common
objects (e.g. list.append is now first).

- Big optimization to the read() method of file objects.  A read()
without arguments now attempts to use fstat to allocate a buffer of
the right size; for pipes and sockets, it will fall back to doubling
the buffer size.  While that the improvement is real on all systems,
it is most dramatic on Windows.


Documentation
-------------

- Many new pieces of library documentation were contributed, mostly by
Andrew Kuchling.  Even cmath is now documented!  There's also a
chapter of the library manual, "libundoc.tex", which provides a
listing of all undocumented modules, plus their status (e.g. internal,
obsolete, or in need of documentation).  Also contributions by Sue
Williams, Skip Montanaro, and some module authors who succumbed to
pressure to document their own contributed modules :-).  Note that
printing the documentation now kills fewer trees -- the margins have
been reduced.

- I have started documenting the Python/C API. Unfortunately this project
hasn't been completed yet.  It will be complete before the final release of
Python 1.5, though.  At the moment, it's better to read the LaTeX source
than to attempt to run it through LaTeX and print the resulting dvi file.

- The posix module (and hence os.py) now has doc strings!  Thanks to Neil
Schemenauer.  I received a few other contributions of doc strings.  In most
other places, doc strings are still wishful thinking...


Language changes
----------------

- Private variables with leading double underscore are now a permanent
feature of the language.  (These were experimental in release 1.4.  I have
favorable experience using them; I can't label them "experimental"
forever.)

- There's new string literal syntax for "raw strings".  Prefixing a string
literal with the letter r (or R) disables all escape processing in the
string; for example, r'\n' is a two-character string consisting of a
backslash followed by the letter n.  This combines with all forms of string
quotes; it is actually useful for triple quoted doc strings which might
contain references to \n or \t.  An embedded quote prefixed with a
backslash does not terminate the string, but the backslash is still
included in the string; for example, r'\'' is a two-character string
consisting of a backslash and a quote.  (Raw strings are also
affectionately known as Robin strings, after their inventor, Robin
Friedrich.)

- There's a simple assert statement, and a new exception
AssertionError.  For example, ``assert foo > 0'' is equivalent to ``if
not foo > 0: raise AssertionError''.  Sorry, the text of the asserted
condition is not available; it would be too complicated to generate
code for this (since the code is generated from a parse tree).
However, the text is displayed as part of the traceback!

- The raise statement has a new feature: when using "raise SomeClass,
somevalue" where somevalue is not an instance of SomeClass, it
instantiates SomeClass(somevalue).  In 1.5a4, if somevalue is an
instance of a *derived* class of SomeClass, the exception class raised
is set to somevalue.__class__, and SomeClass is ignored after that.

- Duplicate keyword arguments are now detected at compile time;
f(a=1,a=2) is now a syntax error.


Changes to built-in features
----------------------------

- There's a new exception FloatingPointError (used only by Lee Busby's
patches to catch floating point exceptions, at the moment).

- The obsolete exception ConflictError (presumably used by the long
obsolete access statement) has been deleted.

- There's a new function sys.exc_info() which returns the tuple
(sys.exc_type, sys.exc_value, sys.exc_traceback) in a thread-safe way.

- There's a new variable sys.executable, pointing to the executable file
for the Python interpreter.

- The sort() methods for lists no longer uses the C library qsort(); I
wrote my own quicksort implementation, with lots of help (in the form
of a kind of competition) from Tim Peters.  This solves a bug in
dictionary comparisons on some Solaris versions when Python is built
with threads, and makes sorting lists even faster.

- The semantics of comparing two dictionaries have changed, to make
comparison of unequal dictionaries faster.  A shorter dictionary is
always considered smaller than a larger dictionary.  For dictionaries
of the same size, the smallest differing element determines the
outcome (which yields the same results as before in this case, without
explicit sorting).  Thanks to Aaron Watters for suggesting something
like this.

- The semantics of try-except have changed subtly so that calling a
function in an exception handler that itself raises and catches an
exception no longer overwrites the sys.exc_* variables.  This also
alleviates the problem that objects referenced in a stack frame that
caught an exception are kept alive until another exception is caught
-- the sys.exc_* variables are restored to their previous value when
returning from a function that caught an exception.

- There's a new "buffer" interface.  Certain objects (e.g. strings and
arrays) now support the "buffer" protocol.  Buffer objects are acceptable
whenever formerly a string was required for a write operation; mutable
buffer objects can be the target of a read operation using the call
f.readinto(buffer).  A cool feature is that regular expression matching now
also work on array objects.  Contribution by Jack Jansen.  (Needs
documentation.)

- String interning: dictionary lookups are faster when the lookup
string object is the same object as the key in the dictionary, not
just a string with the same value.  This is done by having a pool of
"interned" strings.  Most names generated by the interpreter are now
automatically interned, and there's a new built-in function intern(s)
that returns the interned version of a string.  Interned strings are
not a different object type, and interning is totally optional, but by
interning most keys a speedup of about 15% was obtained for the
pystone benchmark.

- Dictionary objects have several new methods; clear() and copy() have
the obvious semantics, while update(d) merges the contents of another
dictionary d into this one, overriding existing keys.  The dictionary
implementation file is now called dictobject.c rather than the
confusing mappingobject.c.

- The intrinsic function dir() is much smarter; it looks in __dict__,
__members__ and __methods__.

- The intrinsic functions int(), long() and float() can now take a
string argument and then do the same thing as string.atoi(),
string.atol(), and string.atof().  No second 'base' argument is
allowed, and complex() does not take a string (nobody cared enough).

- When a module is deleted, its globals are now deleted in two phases.
In the first phase, all variables whose name begins with exactly one
underscore are replaced by None; in the second phase, all variables
are deleted.  This makes it possible to have global objects whose
destructors depend on other globals.  The deletion order within each
phase is still random.

- It is no longer an error for a function to be called without a
global variable __builtins__ -- an empty directory will be provided
by default.

- Guido's corollary to the "Don Beaudry hook": it is now possible to
do metaprogramming by using an instance as a base class.  Not for the
faint of heart; and undocumented as yet, but basically if a base class
is an instance, its class will be instantiated to create the new
class.  Jim Fulton will love it -- it also works with instances of his
"extension classes", since it is triggered by the presence of a
__class__ attribute on the purported base class.  See
Demo/metaclasses/index.html for an explanation and see that directory
for examples.

- Another change is that the Don Beaudry hook is now invoked when
*any* base class is special.  (Up to 1.5a3, the *last* special base
class is used; in 1.5a4, the more rational choice of the *first*
special base class is used.)

- New optional parameter to the readlines() method of file objects.
This indicates the number of bytes to read (the actual number of bytes
read will be somewhat larger due to buffering reading until the end of
the line).  Some optimizations have also been made to speed it up (but
not as much as read()).

- Complex numbers no longer have the ".conj" pseudo attribute; use
z.conjugate() instead, or complex(z.real, -z.imag).  Complex numbers
now *do* support the __members__ and __methods__ special attributes.

- The complex() function now looks for a __complex__() method on class
instances before giving up.

- Long integers now support arbitrary shift counts, so you can now
write 1L<<1000000, memory permitting.  (Python 1.4 reports "outrageous
shift count for this.)

- The hex() and oct() functions have been changed so that for regular
integers, they never emit a minus sign.  For example, on a 32-bit
machine, oct(-1) now returns '037777777777' and hex(-1) returns
'0xffffffff'.  While this may seem inconsistent, it is much more
useful.  (For long integers, a minus sign is used as before, to fit
the result in memory :-)

- The hash() function computes better hashes for several data types,
including strings, floating point numbers, and complex numbers.


New extension modules
---------------------

- New extension modules cStringIO.c and cPickle.c, written by Jim
Fulton and other folks at Digital Creations.  These are much more
efficient than their Python counterparts StringIO.py and pickle.py,
but don't support subclassing.  cPickle.c clocks up to 1000 times
faster than pickle.py; cStringIO.c's improvement is less dramatic but
still significant.

- New extension module zlibmodule.c, interfacing to the free zlib
library (gzip compatible compression).  There's also a module gzip.py
which provides a higher level interface.  Written by Andrew Kuchling
and Jeremy Hylton.

- New module readline; see the "miscellaneous" section above.

- New Unix extension module resource.c, by Jeremy Hylton, provides
access to getrlimit(), getrusage(), setrusage(), getpagesize(), and
related symbolic constants.

- New extension puremodule.c, by Barry Warsaw, which interfaces to the
Purify(TM) C API.  See also the file Misc/PURIFY.README.  It is also
possible to enable Purify by simply setting the PURIFY Makefile
variable in the Modules/Setup file.


Changes in extension modules
----------------------------

- The struct extension module has several new features to control byte
order and word size.  It supports reading and writing IEEE floats even
on platforms where this is not the native format.  It uses uppercase
format codes for unsigned integers of various sizes (always using
Python long ints for 'I' and 'L'), 's' with a size prefix for strings,
and 'p' for "Pascal strings" (with a leading length byte, included in
the size; blame Hannu Krosing; new in 1.5a4).  A prefix '>' forces
big-endian data and '<' forces little-endian data; these also select
standard data sizes and disable automatic alignment (use pad bytes as
needed).

- The array module supports uppercase format codes for unsigned data
formats (like the struct module).

- The fcntl extension module now exports the needed symbolic
constants.  (Formerly these were in FCNTL.py which was not available
or correct for all platforms.)

- The extension modules dbm, gdbm and bsddb now check that the
database is still open before making any new calls.

- The dbhash module is no more.  Use bsddb instead.  (There's a third
party interface for the BSD 2.x code somewhere on the web; support for
bsddb will be deprecated.)

- The gdbm module now supports a sync() method.

- The socket module now has some new functions: getprotobyname(), and
the set {ntoh,hton}{s,l}().

- Various modules now export their type object: socket.SocketType,
array.ArrayType.

- The socket module's accept() method now returns unknown addresses as
a tuple rather than raising an exception.  (This can happen in
promiscuous mode.)  Theres' also a new function getprotobyname().

- The pthread support for the thread module now works on most platforms.

- STDWIN is now officially obsolete.  Support for it will eventually
be removed from the distribution.

- The binascii extension module is now hopefully fully debugged.
(XXX Oops -- Fredrik Lundh promised me a uuencode fix that I never
received.)

- audioop.c: added a ratecv() function; better handling of overflow in
add().

- posixmodule.c: now exports the O_* flags (O_APPEND etc.).  On
Windows, also O_TEXT and O_BINARY.  The 'error' variable (the
exception is raises) is renamed -- its string value is now "os.error",
so newbies don't believe they have to import posix (or nt) to catch
it when they see os.error reported as posix.error.  The execve()
function now accepts any mapping object for the environment.

- A new version of the al (audio library) module for SGI was
contributed by Sjoerd Mullender.

- The regex module has a new function get_syntax() which retrieves the
syntax setting set by set_syntax().  The code was also sanitized,
removing worries about unclean error handling.  See also below for its
successor, re.py.

- The "new" module (which creates new objects of various types) once
again has a fully functioning new.function() method.  Dangerous as
ever!  Also, new.code() has several new arguments.

- A problem has been fixed in the rotor module: on systems with signed
characters, rotor-encoded data was not portable when the key contained
8-bit characters.  Also, setkey() now requires its argument rather
than having broken code to default it.

- The sys.builtin_module_names variable is now a tuple.  Another new
variables in sys is sys.executable (the full path to the Python
binary, if known).

- The specs for time.strftime() have undergone some revisions.  It
appears that not all format characters are supported in the same way
on all platforms.  Rather than reimplement it, we note these
differences in the documentation, and emphasize the shared set of
features.  There's also a thorough test set (that occasionally finds
problems in the C library implementation, e.g. on some Linuxes),
thanks to Skip Montanaro.

- The nis module seems broken when used with NIS+; unfortunately
nobody knows how to fix it.  It should still work with old NIS.


New library modules
-------------------

- New (still experimental) Perl-style regular expression module,
re.py, which uses a new interface for matching as well as a new
syntax; the new interface avoids the thread-unsafety of the regex
interface.  This comes with a helper extension reopmodule.c and vastly
rewritten regexpr.c.  Most work on this was done by Jeffrey Ollie, Tim
Peters, and Andrew Kuchling.  See the documentation libre.tex.  In
1.5, the old regex module is still fully supported; in the future, it
will become obsolete.

- New module gzip.py; see zlib above.

- New module keyword.py exports knowledge about Python's built-in
keywords.  (New version by Ka-Ping Yee.)

- New module pprint.py (with documentation) which supports
pretty-printing of lists, tuples, & dictionaries recursively.  By Fred
Drake.

- New module code.py.  The function code.compile_command() can
determine whether an interactively entered command is complete or not,
distinguishing incomplete from invalid input.  (XXX Unfortunately,
this seems broken at this moment, and I don't have the time to fix
it.  It's probably better to add an explicit interface to the parser
for this.)

- There is now a library module xdrlib.py which can read and write the
XDR data format as used by Sun RPC, for example.  It uses the struct
module.


Changes in library modules
--------------------------

- Module codehack.py is now completely obsolete.

- The pickle.py module has been updated to make it compatible with the
new binary format that cPickle.c produces.  By default it produces the
old all-ASCII format compatible with the old pickle.py, still much
faster than pickle.py; it will read both formats automatically.  A few
other updates have been made.

- A new helper module, copy_reg.py, is provided to register extensions
to the pickling code.

- Revamped module tokenize.py is much more accurate and has an
interface that makes it a breeze to write code to colorize Python
source code.  Contributed by Ka-Ping Yee.

- In ihooks.py, ModuleLoader.load_module() now closes the file under
all circumstances.

- The tempfile.py module has a new class, TemporaryFile, which creates
an open temporary file that will be deleted automatically when
closed.  This works on Windows and MacOS as well as on Unix.  (Jim
Fulton.)

- Changes to the cgi.py module: Most imports are now done at the
top of the module, which provides a speedup when using ni (Jim
Fulton).  The problem with file upload to a Windows platform is solved
by using the new tempfile.TemporaryFile class; temporary files are now
always opened in binary mode (Jim Fulton).  The cgi.escape() function
now takes an optional flag argument that quotes '"' to '&quot;'.  It
is now possible to invoke cgi.py from a command line script, to test
cgi scripts more easily outside an http server.  There's an optional
limit to the size of uploads to POST (Skip Montanaro).  Added a
'strict_parsing' option to all parsing functions (Jim Fulton).  The
function parse_qs() now uses urllib.unquote() on the name as well as
the value of fields (Clarence Gardner).  The FieldStorage class now
has a __len__() method.

- httplib.py: the socket object is no longer closed; all HTTP/1.*
responses are now accepted; and it is now thread-safe (by not using
the regex module).

- BaseHTTPModule.py: treat all HTTP/1.* versions the same.

- The popen2.py module is now rewritten using a class, which makes
access to the standard error stream and the process id of the
subprocess possible.

- Added timezone support to the rfc822.py module, in the form of a
getdate_tz() method and a parsedate_tz() function; also a mktime_tz().
Also added recognition of some non-standard date formats, by Lars
Wirzenius, and RFC 850 dates (Chris Lawrence).

- mhlib.py: various enhancements, including almost compatible parsing
of message sequence specifiers without invoking a subprocess.  Also
added a createmessage() method by Lars Wirzenius.

- The StringIO.StringIO class now supports readline(nbytes).  (Lars
Wirzenius.)  (Of course, you should be using cStringIO for performance.)

- UserDict.py supports the new dictionary methods as well.

- Improvements for whrandom.py by Tim Peters: use 32-bit arithmetic to
speed it up, and replace 0 seed values by 1 to avoid degeneration.
A bug was fixed in the test for invalid arguments.

- Module ftplib.py: added support for parsing a .netrc file (Fred
Drake).  Also added an ntransfercmd() method to the FTP class, which
allows access to the expected size of a transfer when available, and a
parse150() function to the module which parses the corresponding 150
response.

- urllib.py: the ftp cache is now limited to 10 entries.  Added
quote_plus() and unquote_plus() functions which are like quote() and
unquote() but also replace spaces with '+' or vice versa, for
encoding/decoding CGI form arguments.  Catch all errors from the ftp
module.  HTTP requests now add the Host: header line.  The proxy
variable names are now mapped to lower case, for Windows.  The
spliturl() function no longer erroneously throws away all data past
the first newline.  The basejoin() function now interprets "../"
correctly.  I *believe* that the problems with "exception raised in
__del__" under certain circumstances have been fixed (mostly by
changes elsewher in the interpreter).

- In urlparse.py, there is a cache for results in urlparse.urlparse();
its size limit is set to 20.  Also, new URL schemes shttp, https, and
snews are "supported".

- shelve.py: use cPickle and cStringIO when available.  Also added
a sync() method, which calls the database's sync() method if there is
one.

- The mimetools.py module now uses the available Python modules for
decoding quoted-printable, uuencode and base64 formats, rather than
creating a subprocess.

- The python debugger (pdb.py, and its base class bdb.py) now support
conditional breakpoints.  See the docs.

- The modules base64.py, uu.py and quopri.py can now be used as simple
command line utilities.

- Various small fixes to the nntplib.py module that I can't bother to
document in detail.

- Sjoerd Mullender's mimify.py module now supports base64 encoding and
includes functions to handle the funny encoding you sometimes see in mail
headers.  It is now documented.

- mailbox.py: Added BabylMailbox.  Improved the way the mailbox is
gotten from the environment.

- Many more modules now correctly open files in binary mode when this
is necessary on non-Unix platforms.

- The copying functions in the undocumented module shutil.py are
smarter.

- The Writer classes in the formatter.py module now have a flush()
method.

- The sgmllib.py module accepts hyphens and periods in the middle of
attribute names.  While this is against the SGML standard, there is
some HTML out there that uses this...

- The interface for the Python bytecode disassembler module, dis.py,
has been enhanced quite a bit.  There's now one main function,
dis.dis(), which takes almost any kind of object (function, module,
class, instance, method, code object) and disassembles it; without
arguments it disassembles the last frame of the last traceback.  The
other functions have changed slightly, too.

- The imghdr.py module recognizes new image types: BMP, PNG.

- The string.py module has a new function replace(str, old, new,
[maxsplit]) which does substring replacements.  It is actually
implemented in C in the strop module.  The functions [r]find() an
[r]index() have an optional 4th argument indicating the end of the
substring to search, alsoo implemented by their strop counterparts.
(Remember, never import strop -- import string uses strop when
available with zero overhead.)

- The string.join() function now accepts any sequence argument, not
just lists and tuples.

- The string.maketrans() requires its first two arguments to be
present.  The old version didn't require them, but there's not much
point without them, and the documentation suggests that they are
required, so we fixed the code to match the documentation.

- The regsub.py module has a function clear_cache(), which clears its
internal cache of compiled regular expressions.  Also, the cache now
takes the current syntax setting into account.  (However, this module
is now obsolete -- use the sub() or subn() functions or methods in the
re module.)

- The undocumented module Complex.py has been removed, now that Python
has built-in complex numbers.  A similar module remains as
Demo/classes/Complex.py, as an example.


Changes to the build process
----------------------------

- The way GNU readline is configured is totally different.  The
--with-readline configure option is gone.  It is now an extension
module, which may be loaded dynamically.  You must enable it (and
specify the correct libraries to link with) in the Modules/Setup file.
Importing the module installs some hooks which enable command line
editing.  When the interpreter shell is invoked interactively, it
attempts to import the readline module; when this fails, the default
input mechanism is used.  The hook variables are PyOS_InputHook and
PyOS_ReadlineFunctionPointer.  (Code contributed by Lee Busby, with
ideas from William Magro.)

- New build procedure: a single library, libpython1.5.a, is now built,
which contains absolutely everything except for a one-line main()
program (which calls Py_Main(argc, argv) to start the interpreter
shell).  This makes life much simpler for applications that need to
embed Python.  The serial number of the build is now included in the
version string (sys.version).

- As far as I can tell, neither gcc -Wall nor the Microsoft compiler
emits a single warning any more when compiling Python.

- A number of new Makefile variables have been added for special
situations, e.g. LDLAST is appended to the link command.  These are
used by editing the Makefile or passing them on the make command
line.

- A set of patches from Lee Busby has been integrated that make it
possible to catch floating point exceptions.  Use the configure option
--with-fpectl to enable the patches; the extension modules fpectl and
fpetest provide control to enable/disable and test the feature,
respectively.

- The support for shared libraries under AIX is now simpler and more
robust.  Thanks to Vladimir Marangozov for revamping his own patches!

- The Modules/makesetup script now reads a file Setup.local as well as
a file Setup.  Most changes to the Setup script can be done by editing
Setup.local instead, which makes it easier to carry a particular setup
over from one release to the next.

- The Modules/makesetup script now copies any "include" lines it
encounters verbatim into the output Makefile.  It also recognizes .cxx
and .cpp as C++ source files.

- The configure script is smarter about C compiler options; e.g. with
gcc it uses -O2 and -g when possible, and on some other platforms it
uses -Olimit 1500 to avoid a warning from the optimizer about the main
loop in ceval.c (which has more than 1000 basic blocks).

- The configure script now detects whether malloc(0) returns a NULL
pointer or a valid block (of length zero).  This avoids the nonsense
of always adding one byte to all malloc() arguments on most platforms.

- The configure script has a new option, --with-dec-threads, to enable
DEC threads on DEC Alpha platforms.  Also, --with-threads is now an
alias for --with-thread (this was the Most Common Typo in configure
arguments).

- Many changes in Doc/Makefile; amongst others, latex2html is now used
to generate HTML from all latex documents.


Change to the Python/C API
--------------------------

- Because some interfaces have changed, the PYTHON_API macro has been
bumped.  Most extensions built for the old API version will still run,
but I can't guarantee this.  Python prints a warning message on
version mismatches; it dumps core when the version mismatch causes a
serious problem :-)

- I've completed the Grand Renaming, with the help of Roger Masse and
Barry Warsaw.  This makes reading or debugging the code much easier.
Many other unrelated code reorganizations have also been carried out.
The allobjects.h header file is gone; instead, you would have to
include Python.h followed by rename2.h.  But you're better off running
Tools/scripts/fixcid.py -s Misc/RENAME on your source, so you can omit
the rename2.h; it will disappear in the next release.

- Various and sundry small bugs in the "abstract" interfaces have been
fixed.  Thanks to all the (involuntary) testers of the Python 1.4
version!  Some new functions have been added, e.g. PySequence_List(o),
equivalent to list(o) in Python.

- New API functions PyLong_FromUnsignedLong() and
PyLong_AsUnsignedLong().

- The API functions in the file cgensupport.c are no longer
supported.  This file has been moved to Modules and is only ever
compiled when the SGI specific 'gl' module is built.

- PyObject_Compare() can now raise an exception.  Check with
PyErr_Occurred().  The comparison function in an object type may also
raise an exception.

- The slice interface uses an upper bound of INT_MAX when no explicit
upper bound is given (e.x. for a[1:]).  It used to ask the object for
its length and do the calculations.

- Support for multiple independent interpreters.  See Doc/api.tex,
functions Py_NewInterpreter() and Py_EndInterpreter().  Since the
documentation is incomplete, also see the new Demo/pysvr example
(which shows how to use these in a threaded application) and the
source code.

- There is now a Py_Finalize() function which "de-initializes"
Python.  It is possible to completely restart the interpreter
repeatedly by calling Py_Finalize() followed by Py_Initialize().  A
change of functionality in Py_Initialize() means that it is now a
fatal error to call it while the interpreter is already initialized.
The old, half-hearted Py_Cleanup() routine is gone.  Use of Py_Exit()
is deprecated (it is nothing more than Py_Finalize() followed by
exit()).

- There are no known memory leaks left.  While Py_Finalize() doesn't
free *all* allocated memory (some of it is hard to track down),
repeated calls to Py_Finalize() and Py_Initialize() do not create
unaccessible heap blocks.

- There is now explicit per-thread state.  (Inspired by, but not the
same as, Greg Stein's free threading patches.)

- There is now better support for threading C applications.  There are
now explicit APIs to manipulate the interpreter lock.  Read the source
or the Demo/pysvr example; the new functions are
PyEval_{Acquire,Release}{Lock,Thread}().

- The test macro DEBUG has changed to Py_DEBUG, to avoid interference
with other libraries' DEBUG macros.  Likewise for any other test
macros that didn't yet start with Py_.

- New wrappers around malloc() and friends: Py_Malloc() etc. call
malloc() and call PyErr_NoMemory() when it fails; PyMem_Malloc() call
just malloc().  Use of these wrappers could be essential if multiple
memory allocators exist (e.g. when using certain DLL setups under
Windows).  (Idea by Jim Fulton.)

- New C API PyImport_Import() which uses whatever __import__() hook
that is installed for the current execution environment.  By Jim
Fulton.

- It is now possible for an extension module's init function to fail
non-fatally, by calling one of the PyErr_* functions and returning.

- The PyInt_AS_LONG() and PyFloat_AS_DOUBLE() macros now cast their
argument to the proper type, like the similar PyString macros already
did.  (Suggestion by Marc-Andre Lemburg.)  Similar for PyList_GET_SIZE
and PyList_GET_ITEM.

- Some of the Py_Get* function, like Py_GetVersion() (but not yet
Py_GetPath()) are now declared as returning a const char *.  (More
should follow.)

- Changed the run-time library to check for exceptions after object
comparisons.  PyObject_Compare() can now return an exception; use
PyErr_Occurred() to check (there is *no* special return value).

- PyFile_WriteString() and Py_Flushline() now return error indicators
instead of clearing exceptions.  This fixes an obscure bug where using
these would clear a pending exception, discovered by Just van Rossum.

- There's a new function, PyArg_ParseTupleAndKeywords(), which parses
an argument list including keyword arguments.  Contributed by Geoff
Philbrick.

- PyArg_GetInt() is gone.

- It's no longer necessary to include graminit.h when calling one of
the extended parser API functions.  The three public grammar start
symbols are now in Python.h as Py_single_input, Py_file_input, and
Py_eval_input.

- The CObject interface has a new function,
PyCObject_Import(module, name).  It calls PyCObject_AsVoidPtr()
on the object referenced by "module.name".


Tkinter
-------

- On popular demand, _tkinter once again installs a hook for readline
that processes certain Tk events while waiting for the user to type
(using PyOS_InputHook).

- A patch by Craig McPheeters plugs the most obnoxious memory leaks,
caused by command definitions referencing widget objects beyond their
lifetime.

- New standard dialog modules: tkColorChooser.py, tkCommonDialog.py,
tkMessageBox.py, tkFileDialog.py, tkSimpleDialog.py These interface
with the new Tk dialog scripts, and provide more "native platform"
style file selection dialog boxes on some platforms.  Contributed by
Fredrik Lundh.

- Tkinter.py: when the first Tk object is destroyed, it sets the
hiddel global _default_root to None, so that when another Tk object is
created it becomes the new default root.  Other miscellaneous
changes and fixes.

- The Image class now has a configure method.

- Added a bunch of new winfo options to Tkinter.py; we should now be
up to date with Tk 4.2.  The new winfo options supported are:
manager, pointerx, pointerxy, pointery, server, viewable, visualid,
visualsavailable.

- The broken bind() method on Canvas objects defined in the Canvas.py
module has been fixed.  The CanvasItem and Group classes now also have
an unbind() method.

- The problem with Tkinter.py falling back to trying to import
"tkinter" when "_tkinter" is not found has been fixed -- it no longer
tries "tkinter", ever.  This makes diagnosing the problem "_tkinter
not configured" much easier and will hopefully reduce the newsgroup
traffic on this topic.

- The ScrolledText module once again supports the 'cnf' parameter, to
be compatible with the examples in Mark Lutz' book (I know, I know,
too late...)

- The _tkinter.c extension module has been revamped.  It now support
Tk versions 4.1 through 8.0; support for 4.0 has been dropped.  It
works well under Windows and Mac (with the latest Tk ports to those
platforms).  It also supports threading -- it is safe for one
(Python-created) thread to be blocked in _tkinter.mainloop() while
other threads modify widgets.  To make the changes visible, those
threads must use update_idletasks()method.  (The patch for threading
in 1.5a3 was broken; in 1.5a4, it is back in a different version,
which requires access to the Tcl sources to get it to work -- hence it
is disabled by default.)

- A bug in _tkinter.c has been fixed, where Split() with a string
containing an unmatched '"' could cause an exception or core dump.

- Unfortunately, on Windows and Mac, Tk 8.0 no longer supports
CreateFileHandler, so _tkinter.createfilehandler is not available on
those platforms when using Tk 8.0 or later.  I will have to rethink
how to interface with Tcl's lower-level event mechanism, or with its
channels (which are like Python's file-like objects).  Jack Jansen has
provided a fix for the Mac, so createfilehandler *is* actually
supported there; maybe I can adapt his fix for Windows.


Tools and Demos
---------------

- A new regression test suite is provided, which tests most of the
standard and built-in modules.  The regression test is run by invoking
the script Lib/test/regrtest.py.  Barry Warsaw wrote the test harnass;
he and Roger Masse contributed most of the new tests.

- New tool: faqwiz -- the CGI script that is used to maintain the
Python FAQ (http://grail.cnri.reston.va.us/cgi-bin/faqw.py).  In
Tools/faqwiz.

- New tool: webchecker -- a simple extensible web robot that, when
aimed at a web server, checks that server for dead links.  Available
are a command line utility as well as a Tkinter based GUI version.  In
Tools/webchecker.  A simplified version of this program is dissected
in my article in O'Reilly's WWW Journal, the issue on Scripting
Languages (Vol 2, No 2); Scripting the Web with Python (pp 97-120).
Includes a parser for robots.txt files by Skip Montanaro.

- New small tools: cvsfiles.py (prints a list of all files under CVS
n a particular directory tree), treesync.py (a rather Guido-specific
script to synchronize two source trees, one on Windows NT, the other
one on Unix under CVS but accessible from the NT box), and logmerge.py
(sort a collection of RCS or CVS logs by date).  In Tools/scripts.

- The freeze script now also works under Windows (NT).  Another
feature allows the -p option to be pointed at the Python source tree
instead of the installation prefix.  This was loosely based on part of
xfreeze by Sam Rushing and Bill Tutt.

- New examples (Demo/extend) that show how to use the generic
extension makefile (Misc/Makefile.pre.in).

- Tools/scripts/h2py.py now supports C++ comments.

- Tools/scripts/pystone.py script is upgraded to version 1.1; there
was a bug in version 1.0 (distributed with Python 1.4) that leaked
memory.  Also, in 1.1, the LOOPS variable is incremented to 10000.

- Demo/classes/Rat.py completely rewritten by Sjoerd Mullender.


Windows (NT and 95)
-------------------

- New project files for Developer Studio (Visual C++) 5.0 for Windows
NT (the old VC++ 4.2 Makefile is also still supported, but will
eventually be withdrawn due to its bulkiness).

- See the note on the new module search path in the "Miscellaneous" section
above.

- Support for Win32s (the 32-bit Windows API under Windows 3.1) is
basically withdrawn.  If it still works for you, you're lucky.

- There's a new extension module, msvcrt.c, which provides various
low-level operations defined in the Microsoft Visual C++ Runtime Library.
These include locking(), setmode(), get_osfhandle(), set_osfhandle(), and
console I/O functions like kbhit(), getch() and putch().

- The -u option not only sets the standard I/O streams to unbuffered
status, but also sets them in binary mode.  (This can also be done
using msvcrt.setmode(), by the way.)

- The, sys.prefix and sys.exec_prefix variables point to the directory
where Python is installed, or to the top of the source tree, if it was run
from there.

- The various os.path modules (posixpath, ntpath, macpath) now support
passing more than two arguments to the join() function, so
os.path.join(a, b, c) is the same as os.path.join(a, os.path.join(b,
c)).

- The ntpath module (normally used as os.path) supports ~ to $HOME
expansion in expanduser().

- The freeze tool now works on Windows.

- See also the Tkinter category for a sad note on
_tkinter.createfilehandler().

- The truncate() method for file objects now works on Windows.

- Py_Initialize() is no longer called when the DLL is loaded.  You
must call it yourself.

- The time module's clock() function now has good precision through
the use of the Win32 API QueryPerformanceCounter().

- Mark Hammond will release Python 1.5 versions of PythonWin and his
other Windows specific code: the win32api extensions, COM/ActiveX
support, and the MFC interface.


Mac
---

- As always, the Macintosh port will be done by Jack Jansen.  He will
make a separate announcement for the Mac specific source code and the
binary distribution(s) when these are ready.


======================================================================


=====================================
==> Release 1.4 (October 25 1996) <==
=====================================

(Starting in reverse chronological order:)

- Changed disclaimer notice.

- Added SHELL=/bin/sh to Misc/Makefile.pre.in -- some Make versions
default to the user's login shell.

- In Lib/tkinter/Tkinter.py, removed bogus binding of <Delete> in Text
widget, and bogus bspace() function.

- In Lib/cgi.py, bumped __version__ to 2.0 and restored a truncated
paragraph.

- Fixed the NT Makefile (PC/vc40.mak) for VC 4.0 to set /MD for all
subprojects, and to remove the (broken) experimental NumPy
subprojects.

- In Lib/py_compile.py, cast mtime to long() so it will work on Mac
(where os.stat() returns mtimes as floats.)
- Set self.rfile unbuffered (like self.wfile) in SocketServer.py, to
fix POST in CGIHTTPServer.py.

- Version 2.83 of Misc/python-mode.el for Emacs is included.

- In Modules/regexmodule.c, fixed symcomp() to correctly handle a new
group starting immediately after a group tag.

- In Lib/SocketServer.py, changed the mode for rfile to unbuffered.

- In Objects/stringobject.c, fixed the compare function to do the
first char comparison in unsigned mode, for consistency with the way
other characters are compared by memcmp().

- In Lib/tkinter/Tkinter.py, fixed Scale.get() to support floats.

- In Lib/urllib.py, fix another case where openedurl wasn't set.

(XXX Sorry, the rest is in totally random order.  No time to fix it.)

- SyntaxError exceptions detected during code generation
(e.g. assignment to an expression) now include a line number.

- Don't leave trailing / or \ in script directory inserted in front of
sys.path.

- Added a note to Tools/scripts/classfix.py abouts its historical
importance.

- Added Misc/Makefile.pre.in, a universal Makefile for extensions
built outside the distribution.

- Rewritten Misc/faq2html.py, by Ka-Ping Yee.

- Install shared modules with mode 555 (needed for performance on some
platforms).

- Some changes to standard library modules to avoid calling append()
with more than one argument -- while supported, this should be
outlawed, and I don't want to set a bad example.

- bdb.py (and hence pdb.py) supports calling run() with a code object
instead of a code string.

- Fixed an embarrassing bug cgi.py which prevented correct uploading
of binary files from Netscape (which doesn't distinguish between
binary and text files).  Also added dormant logging support, which
makes it easier to debug the cgi module itself.

- Added default writer to constructor of NullFormatter class.

- Use binary mode for socket.makefile() calls in ftplib.py.

- The ihooks module no longer "installs" itself upon import -- this
was an experimental feature that helped ironing out some bugs but that
slowed down code that imported it without the need to install it
(e.g. the rexec module).  Also close the file in some cases and add
the __file__ attribute to loaded modules.

- The test program for mailbox.py is now more useful.

- Added getparamnames() to Message class in mimetools.py -- it returns
the names of parameters to the content-type header.

- Fixed a typo in ni that broke the loop stripping "__." from names.

- Fix sys.path[0] for scripts run via pdb.py's new main program.

- profile.py can now also run a script, like pdb.

- Fix a small bug in pyclbr -- don't add names starting with _ when
emulating from ... import *.

- Fixed a series of embarrassing typos in rexec's handling of standard
I/O redirection.  Added some more "safe" built-in modules: cmath,
errno, operator.

- Fixed embarrassing typo in shelve.py.

- Added SliceType and EllipsisType to types.py.

- In urllib.py, added handling for error 301 (same as 302); added
geturl() method to get the URL after redirection.

- Fixed embarrassing typo in xdrlib.py.  Also fixed typo in Setup.in
for _xdrmodule.c and removed redundant #include from _xdrmodule.c.

- Fixed bsddbmodule.c to add binary mode indicator on platforms that
have it.  This should make it working on Windows NT.

- Changed last uses of #ifdef NT to #ifdef MS_WINDOWS or MS_WIN32,
whatever applies.  Also rationalized some other tests for various MS
platforms.

- Added the sources for the NT installer script used for Python
1.4beta3.  Not tested with this release, but better than nothing.

- A compromise in pickle's defenses against Trojan horses: a
user-defined function is now okay where a class is expected.  A
built-in function is not okay, to prevent pickling something that
will execute os.system("rm -f *") when unpickling.

- dis.py will print the name of local variables referenced by local
load/store/delete instructions.

- Improved portability of SimpleHTTPServer module to non-Unix
platform.

- The thread.h interface adds an extra argument to down_sema().  This
only affects other C code that uses thread.c; the Python thread module
doesn't use semaphores (which aren't provided on all platforms where
Python threads are supported).  Note: on NT, this change is not
implemented.

- Fixed some typos in abstract.h; corrected signature of
PyNumber_Coerce, added PyMapping_DelItem.  Also fixed a bug in
abstract.c's PyObject_CallMethod().

- apply(classname, (), {}) now works even if the class has no
__init__() method.

- Implemented complex remainder and divmod() (these would dump core!).
Conversion of complex numbers to int, long int or float now raises an
exception, since there is no meaningful way to do it without losing
information.

- Fixed bug in built-in complex() function which gave the wrong result
for two real arguments.

- Change the hash algorithm for strings -- the multiplier is now
1000003 instead of 3, which gives better spread for short strings.

- New default path for Windows NT, the registry structure now supports
default paths for different install packages.  (Mark Hammond -- the
next PythonWin release will use this.)

- Added more symbols to the python_nt.def file.

- When using GNU readline, set rl_readline_name to "python".

- The Ellipses built-in name has been renamed to Ellipsis -- this is
the correct singular form.  Thanks to Ka-Ping Yee, who saved us from
eternal embarrassment.

- Bumped the PYTHON_API_VERSION to 1006, due to the Ellipses ->
Ellipsis name change.

- Updated the library reference manual.  Added documentation of
restricted mode (rexec, Bastion) and the formatter module (for use
with the htmllib module).  Fixed the documentation of htmllib
(finally).

- The reference manual is now maintained in FrameMaker.

- Upgraded scripts Doc/partparse.py and Doc/texi2html.py.

- Slight improvements to Doc/Makefile.

- Added fcntl.lockf(). This should be used for Unix file locking
instead of the posixfile module; lockf() is more portable.

- The getopt module now supports long option names, thanks to Lars
Wizenius.

- Plenty of changes to Tkinter and Canvas, mostly due to Fred Drake
and Nils Fischbeck.

- Use more bits of time.time() in whrandom's default seed().

- Performance hack for regex module's regs attribute.

- Don't close already closed socket in socket module.

- Correctly handle separators containing embedded nulls in
strop.split, strop.find and strop.rfind.  Also added more detail to
error message for strop.atoi and friends.

- Moved fallback definition for hypot() to Python/hypot.c.

- Added fallback definition for strdup, in Python/strdup.c.

- Fixed some bugs where a function would return 0 to indicate an error
where it should return -1.

- Test for error returned by time.localtime(), and rationalized its MS
tests.

- Added Modules/Setup.local file, which is processed after Setup.

- Corrected bug in toplevel Makefile.in -- execution of regen script
would not use the right PATH and PYTHONPATH.

- Various and sundry NeXT configuration changes (sigh).

- Support systems where libreadline needs neither termcap nor curses.

- Improved ld_so_aix script and python.exp file (for AIX).

- More stringent test for working <stdarg.h> in configure script.

- Removed Demo/www subdirectory -- it was totally out of date.

- Improved demos and docs for Fred Drake's parser module; fixed one
typo in the module itself.


=========================================
==> Release 1.4beta3 (August 26 1996) <==
=========================================


(XXX This is less readable that it should.  I promise to restructure
it for the final 1.4 release.)


What's new in 1.4beta3 (since beta2)?
-------------------------------------

- Name mangling to implement a simple form of class-private variables.
A name of the form "__spam" can't easily be used outside the class.
(This was added in 1.4beta3, but left out of the 1.4beta3 release
message.)

- In urllib.urlopen(): HTTP URLs containing user:passwd@host are now
handled correctly when using a proxy server.

- In ntpath.normpath(): don't truncate to 8+3 format.

- In mimetools.choose_boundary(): don't die when getuid() or getpid()
aren't defined.

- Module urllib: some optimizations to (un)quoting.

- New module MimeWriter for writing MIME documents.

- More changes to formatter module.

- The freeze script works once again and is much more robust (using
sys.prefix etc.).  It also supports a -o option to specify an
output directory.

- New module whichdb recognizes dbm, gdbm and bsddb/dbhash files.

- The Doc/Makefile targets have been reorganized somewhat to remove the
insistence on always generating PostScript.

- The texinfo to html filter (Doc/texi2html.py) has been improved somewhat.

- "errors.h" has been renamed to "pyerrors.h" to resolve a long-standing
name conflict on the Mac.

- Linking a module compiled with a different setting for Py_TRACE_REFS now
generates a linker error rather than a core dump.

- The cgi module has a new convenience function print_exception(), which
formats a python exception using HTML.  It also fixes a bug in the
compatibility code and adds a dubious feature which makes it possible to
have two query strings, one in the URL and one in the POST data.

- A subtle change in the unpickling of class instances makes it possible
to unpickle in restricted execution mode, where the __dict__ attribute is
not available (but setattr() is).

- Documentation for os.path.splitext() (== posixpath.splitext()) has been
cleared up.  It splits at the *last* dot.

- posixfile locking is now also correctly supported on AIX.

- The tempfile module once again honors an initial setting of tmpdir.  It
now works on Windows, too.

- The traceback module has some new functions to extract, format and print
the active stack.

- Some translation functions in the urllib module have been made a little
less sluggish.

- The addtag_* methods for Canvas widgets in Tkinter as well as in the
separate Canvas class have been fixed so they actually do something
meaningful.

- A tiny _test() function has been added to Tkinter.py.

- A generic Makefile for dynamically loaded modules is provided in the Misc
subdirectory (Misc/gMakefile).

- A new version of python-mode.el for Emacs is provided.  See
http://www.python.org/ftp/emacs/pmdetails.html for details.  The
separate file pyimenu.el is no longer needed, imenu support is folded
into python-mode.el.

- The configure script can finally correctly find the readline library in a
non-standard location.  The LDFLAGS variable is passed on the Makefiles
from the configure script.

- Shared libraries are now installed as programs (i.e. with executable
permission).  This is required on HP-UX and won't hurt on other systems.

- The objc.c module is no longer part of the distribution.  Objective-C
support may become available as contributed software on the ftp site.

- The sybase module is no longer part of the distribution.  A much
improved sybase module is available as contributed software from the
ftp site.

- _tkinter is now compatible with Tcl 7.5 / Tk 4.1 patch1 on Windows and
Mac (don't use unpatched Tcl/Tk!).  The default line in the Setup.in file
now links with Tcl 7.5 / Tk 4.1 rather than 7.4/4.0.

- In Setup, you can now write "*shared*" instead of "*noconfig*", and you
can use *.so and *.sl as shared libraries.

- Some more fidgeting for AIX shared libraries.

- The mpz module is now compatible with GMP 2.x.  (Not tested by me.)
(Note -- a complete replacement by Niels Mo"ller, called gpmodule, is
available from the contrib directory on the ftp site.)

- A warning is written to sys.stderr when a __del__ method raises an
exception (formerly, such exceptions were completely ignored).

- The configure script now defines HAVE_OLD_CPP if the C preprocessor is
incapable of ANSI style token concatenation and stringification.

- All source files (except a few platform specific modules) are once again
compatible with K&R C compilers as well as ANSI compilers.  In particular,
ANSI-isms have been removed or made conditional in complexobject.c,
getargs.c and operator.c.

- The abstract object API has three new functions, PyObject_DelItem,
PySequence_DelItem, and PySequence_DelSlice.

- The operator module has new functions delitem and delslice, and the
functions "or" and "and" are renamed to "or_" and "and_" (since "or" and
"and" are reserved words).  ("__or__" and "__and__" are unchanged.)

- The environment module is no longer supported; putenv() is now a function
in posixmodule (also under NT).

- Error in filter(<function>, "") has been fixed.

- Unrecognized keyword arguments raise TypeError, not KeyError.

- Better portability, fewer bugs and memory leaks, fewer compiler warnings,
some more documentation.

- Bug in float power boundary case (0.0 to the negative integer power)
fixed.

- The test of negative number to the float power has been moved from the
built-in pow() function to floatobject.c (so complex numbers can yield the
correct result).

- The bug introduced in beta2 where shared libraries loaded (using
dlopen()) from the current directory would fail, has been fixed.

- Modules imported as shared libraries now also have a __file__ attribute,
giving the filename from which they were loaded.  The only modules without
a __file__ attribute now are built-in modules.

- On the Mac, dynamically loaded modules can end in either ".slb" or
".<platform>.slb" where <platform> is either "CFM68K" or "ppc".  The ".slb"
extension should only be used for "fat" binaries.

- C API addition: marshal.c now supports
PyMarshal_WriteObjectToString(object).

- C API addition: getargs.c now supports
PyArg_ParseTupleAndKeywords(args, kwdict, format, kwnames, ...)
to parse keyword arguments.

- The PC versioning scheme (sys.winver) has changed once again.  the
version number is now "<digit>.<digit>.<digit>.<apiversion>", where the
first three <digit>s are the Python version (e.g. "1.4.0" for Python 1.4,
"1.4.1" for Python 1.4.1 -- the beta level is not included) and
<apiversion> is the four-digit PYTHON_API_VERSION (currently 1005).

- h2py.py accepts whitespace before the # in CPP directives

- On Solaris 2.5, it should now be possible to use either Posix threads or
Solaris threads (XXX: how do you select which is used???).  (Note: the
Python pthreads interface doesn't fully support semaphores yet -- anyone
care to fix this?)

- Thread support should now work on AIX, using either DCE threads or
pthreads.

- New file Demo/sockets/unicast.py

- Working Mac port, with CFM68K support, with Tk 4.1 support (though not
both) (XXX)

- New project setup for PC port, now compatible with PythonWin, with
_tkinter and NumPy support (XXX)

- New module site.py (XXX)

- New module xdrlib.py and optional support module _xdrmodule.c (XXX)

- parser module adapted to new grammar, complete w/ Doc & Demo (XXX)

- regen script fixed (XXX)

- new machdep subdirectories Lib/{aix3,aix4,next3_3,freebsd2,linux2} (XXX)

- testall now also tests math module (XXX)

- string.atoi c.s. now raise an exception for an empty input string.

- At last, it is no longer necessary to define HAVE_CONFIG_H in order to
have config.h included at various places.

- Unrecognized keyword arguments now raise TypeError rather than KeyError.

- The makesetup script recognizes files with extension .so or .sl as
(shared) libraries.

- 'access' is no longer a reserved word, and all code related to its
implementation is gone (or at least #ifdef'ed out).  This should make
Python a little speedier too!

- Performance enhancements suggested by Sjoerd Mullender.  This includes
the introduction of two new optional function pointers in type object,
getattro and setattro, which are like getattr and setattr but take a
string object instead of a C string pointer.

- New operations in string module: lstrip(s) and rstrip(s) strip whitespace
only on the left or only on the right, A new optional third argument to
split() specifies the maximum number of separators honored (so
splitfields(s, sep, n) returns a list of at most n+1 elements).  (Since
1.3, splitfields(s, None) is totally equivalent to split(s).)
string.capwords() has an optional second argument specifying the
separator (which is passed to split()).

- regsub.split() has the same addition as string.split().  regsub.splitx(s,
sep, maxsep) implements the functionality that was regsub.split(s, 1) in
1.4beta2 (return a list containing the delimiters as well as the words).

- Final touch for AIX loading, rewritten Misc/AIX-NOTES.

- In Modules/_tkinter.c, when using Tk 4.1 or higher, use className
argument to _tkinter.create() to set Tcl's argv0 variable, so X
resources use the right resource class again.

- Add #undef fabs to Modules/mathmodule.c for macintosh.

- Added some macro renames for AIX in Modules/operator.c.

- Removed spurious 'E' from Doc/liberrno.tex.

- Got rid of some cruft in Misc/ (dlMakefile, pyimenu.el); added new
Misc/gMakefile and new version of Misc/python-mode.el.

- Fixed typo in Lib/ntpath.py (islink has "return false" which gives a
NameError).

- Added missing "from types import *" to Lib/tkinter/Canvas.py.

- Added hint about using default args for __init__ to pickle docs.

- Corrected typo in Inclide/abstract.h: PySequence_Lenth ->
PySequence_Length.

- Some improvements to Doc/texi2html.py.

- In Python/import.c, Cast unsigned char * in struct _frozen to char *
in calls to rds_object().

- In doc/ref4.tex, added note about scope of lambda bodies.

What's new in 1.4beta2 (since beta1)?
-------------------------------------

- Portability bug in the md5.h header solved.

- The PC build procedure now really works, and sets sys.platform to a
meaningful value (a few things were botched in beta 1).  Lib/dos_8x3
is now a standard part of the distribution (alas).

- More improvements to the installation procedure.  Typing "make install"
now inserts the version number in the pathnames of almost everything
installed, and creates the machine dependent modules (FCNTL.py etc.) if not
supplied by the distribution.  (XXX There's still a problem with the latter
because the "regen" script requires that Python is installed.  Some manual
intervention may still be required.) (This has been fixed in 1.4beta3.)

- New modules: errno, operator (XXX).

- Changes for use with Numerical Python: built-in function slice() and
Ellipses object, and corresponding syntax:

	x[lo:hi:stride]		==	x[slice(lo, hi, stride)]
	x[a, ..., z]		==	x[(a, Ellipses, z)]

- New documentation for errno and cgi modules.

- The directory containing the script passed to the interpreter is
inserted in from of sys.path; "." is no longer a default path
component.

- Optional third string argument to string.translate() specifies
characters to delete.  New function string.maketrans() creates a
translation table for translate() or for regex.compile().

- Module posix (and hence module os under Unix) now supports putenv().
Moreover, module os is enhanced so that if putenv() is supported,
assignments to os.environ entries make the appropriate putenv() call.
(XXX the putenv() implementation can leak a small amount of memory per
call.)

- pdb.py can now be invoked from the command line to debug a script:
python pdb.py <script> <arg> ...

- Much improved parseaddr() in rfc822.

- In cgi.py, you can now pass an alternative value for environ to
nearly all functions.

- You can now assign to instance variables whose name begins and ends
with '__'.

- New version of Fred Drake's parser module and associates (token,
symbol, AST).

- New PYTHON_API_VERSION value and .pyc file magic number (again!).

- The "complex" internal structure type is now called "Py_complex" to
avoid name conflicts.

- Numerous small bugs fixed.

- Slight pickle speedups.

- Some slight speedups suggested by Sjoerd (more coming in 1.4 final).

- NeXT portability mods by Bill Bumgarner integrated.

- Modules regexmodule.c, bsddbmodule.c and xxmodule.c have been
converted to new naming style.


What's new in 1.4beta1 (since 1.3)?
-----------------------------------

- Added sys.platform and sys.exec_platform for Bill Janssen.

- Installation has been completely overhauled.  "make install" now installs
everything, not just the python binary.  Installation uses the install-sh
script (borrowed from X11) to install each file.

- New functions in the posix module: mkfifo, plock, remove (== unlink),
and ftruncate.  More functions are also available under NT.

- New function in the fcntl module: flock.

- Shared library support for FreeBSD.

- The --with-readline option can now be used without a DIRECTORY argument,
for systems where libreadline.* is in one of the standard places.  It is
also possible for it to be a shared library.

- The extension tkinter has been renamed to _tkinter, to avoid confusion
with Tkinter.py oncase insensitive file systems.  It now supports Tk 4.1 as
well as 4.0.

- Author's change of address from CWI in Amsterdam, The Netherlands, to
CNRI in Reston, VA, USA.

- The math.hypot() function is now always available (if it isn't found in
the C math library, Python provides its own implementation).

- The latex documentation is now compatible with latex2e, thanks to David
Ascher.

- The expression x**y is now equivalent to pow(x, y).

- The indexing expression x[a, b, c] is now equivalent to x[(a, b, c)].

- Complex numbers are now supported.  Imaginary constants are written with
a 'j' or 'J' prefix, general complex numbers can be formed by adding a real
part to an imaginary part, like 3+4j.  Complex numbers are always stored in
floating point form, so this is equivalent to 3.0+4.0j.  It is also
possible to create complex numbers with the new built-in function
complex(re, [im]).  For the footprint-conscious, complex number support can
be disabled by defining the symbol WITHOUT_COMPLEX.

- New built-in function list() is the long-awaited counterpart of tuple().

- There's a new "cmath" module which provides the same functions as the
"math" library but with complex arguments and results.  (There are very
good reasons why math.sqrt(-1) still raises an exception -- you have to use
cmath.sqrt(-1) to get 1j for an answer.)

- The Python.h header file (which is really the same as allobjects.h except
it disables support for old style names) now includes several more files,
so you have to have fewer #include statements in the average extension.

- The NDEBUG symbol is no longer used.  Code that used to be dependent on
the presence of NDEBUG is now present on the absence of DEBUG.  TRACE_REFS
and REF_DEBUG have been renamed to Py_TRACE_REFS and Py_REF_DEBUG,
respectively.  At long last, the source actually compiles and links without
errors when this symbol is defined.

- Several symbols that didn't follow the new naming scheme have been
renamed (usually by adding to rename2.h) to use a Py or _Py prefix.  There
are no external symbols left without a Py or _Py prefix, not even those
defined by sources that were incorporated from elsewhere (regexpr.c,
md5c.c).  (Macros are a different story...)

- There are now typedefs for the structures defined in config.c and
frozen.c.

- New PYTHON_API_VERSION value and .pyc file magic number.

- New module Bastion.  (XXX)

- Improved performance of StringIO module.

- UserList module now supports + and * operators.

- The binhex and binascii modules now actually work.

- The cgi module has been almost totally rewritten and documented.
It now supports file upload and a new data type to handle forms more
flexibly.

- The formatter module (for use with htmllib) has been overhauled (again).

- The ftplib module now supports passive mode and has doc strings.

- In (ideally) all places where binary files are read or written, the file
is now correctly opened in binary mode ('rb' or 'wb') so the code will work
on Mac or PC.

- Dummy versions of os.path.expandvars() and expanduser() are now provided
on non-Unix platforms.

- Module urllib now has two new functions url2pathname and pathname2url
which turn local filenames into "file:..." URLs using the same rules as
Netscape (why be different).  it also supports urlretrieve() with a
pathname parameter, and honors the proxy environment variables (http_proxy
etc.).  The URL parsing has been improved somewhat, too.

- Micro improvements to urlparse.  Added urlparse.urldefrag() which
removes a trailing ``#fragment'' if any.

- The mailbox module now supports MH style message delimiters as well.

- The mhlib module contains some new functionality: setcontext() to set the
current folder and parsesequence() to parse a sequence as commonly passed
to MH commands (e.g. 1-10 or last:5).

- New module mimify for conversion to and from MIME format of email
messages.

- Module ni now automatically installs itself when first imported -- this
is against the normal rule that modules should define classes and functions
but not invoke them, but appears more useful in the case that two
different, independent modules want to use ni's features.

- Some small performance enhancements in module pickle.

- Small interface change to the profile.run*() family of functions -- more
sensible handling of return values.

- The officially registered Mac creator for Python files is 'Pyth'.  This
replaces 'PYTH' which was used before but never registered.

- Added regsub.capwords().  (XXX)

- Added string.capwords(), string.capitalize() and string.translate().
(XXX)

- Fixed an interface bug in the rexec module: it was impossible to pass a
hooks instance to the RExec class.  rexec now also supports the dynamic
loading of modules from shared libraries.  Some other interfaces have been
added too.

- Module rfc822 now caches the headers in a dictionary for more efficient
lookup.

- The sgmllib module now understands a limited number of SGML "shorthands"
like <A/.../ for <A>...</A>.  (It's not clear that this was a good idea...)

- The tempfile module actually tries a number of different places to find a
usable temporary directory.  (This was prompted by certain Linux
installations that appear to be missing a /usr/tmp directory.) [A bug in
the implementation that would ignore a pre-existing tmpdir global has been
fixed in beta3.]

- Much improved and enhanved FileDialog module for Tkinter.

- Many small changes to Tkinter, to bring it more in line with Tk 4.0 (as
well as Tk 4.1).

- New socket interfaces include ntohs(), ntohl(), htons(), htonl(), and
s.dup().  Sockets now work correctly on Windows.  On Windows, the built-in
extension is called _socket and a wrapper module win/socket.py provides
"makefile()" and "dup()" functionality.  On Windows, the select module
works only with socket objects.

- Bugs in bsddb module fixed (e.g. missing default argument values).

- The curses extension now includes <ncurses.h> when available.

- The gdbm module now supports opening databases in "fast" mode by
specifying 'f' as the second character or the mode string.

- new variables sys.prefix and sys.exec_prefix pass corresponding
configuration options / Makefile variables to the Python programmer.

- The ``new'' module now supports creating new user-defined classes as well
as instances thereof.

- The soundex module now sports get_soundex() to get the soundex value for an
arbitrary string (formerly it would only do soundex-based string
comparison) as well as doc strings.

- New object type "cobject" to safely wrap void pointers for passing them
between various extension modules.

- More efficient computation of float**smallint.

- The mysterious bug whereby "x.x" (two occurrences of the same
one-character name) typed from the commandline would sometimes fail
mysteriously.

- The initialization of the readline function can now be invoked by a C
extension through PyOS_ReadlineInit().

- There's now an externally visible pointer PyImport_FrozenModules which
can be changed by an embedding application.

- The argument parsing functions now support a new format character 'D' to
specify complex numbers.

- Various memory leaks plugged and bugs fixed.

- Improved support for posix threads (now that real implementations are
beginning to apepar).  Still no fully functioning semaphores.

- Some various and sundry improvements and new entries in the Tools
directory.


=====================================
==> Release 1.3 (13 October 1995) <==
=====================================

Major change
============

Two words: Keyword Arguments.  See the first section of Chapter 12 of
the Tutorial.

(The rest of this file is textually the same as the remaining sections
of that chapter.)


Changes to the WWW and internet tools
=====================================

The "htmllib" module has been rewritten in an incompatible fashion.
The new version is considerably more complete (HTML 2.0 except forms,
but including all ISO-8859-1 entity definitions), and easy to use.
Small changes to "sgmllib" have also been made, to better match the
tokenization of HTML as recognized by other web tools.

A new module "formatter" has been added, for use with the new
"htmllib" module.

The "urllib"and "httplib" modules have been changed somewhat to allow
overriding unknown URL types and to support authentication.  They now
use "mimetools.Message" instead of "rfc822.Message" to parse headers.
The "endrequest()" method has been removed from the HTTP class since
it breaks the interaction with some servers.

The "rfc822.Message" class has been changed to allow a flag to be
passed in that says that the file is unseekable.

The "ftplib" module has been fixed to be (hopefully) more robust on
Linux.

Several new operations that are optionally supported by servers have
been added to "nntplib": "xover", "xgtitle", "xpath" and "date".

Other Language Changes
======================

The "raise" statement now takes an optional argument which specifies
the traceback to be used when printing the exception's stack trace.
This must be a traceback object, such as found in "sys.exc_traceback".
When omitted or given as "None", the old behavior (to generate a stack
trace entry for the current stack frame) is used.

The tokenizer is now more tolerant of alien whitespace.  Control-L in
the leading whitespace of a line resets the column number to zero,
while Control-R just before the end of the line is ignored.

Changes to Built-in Operations
==============================

For file objects, "f.read(0)" and "f.readline(0)" now return an empty
string rather than reading an unlimited number of bytes.  For the
latter, omit the argument altogether or pass a negative value.

A new system variable, "sys.platform", has been added.  It specifies
the current platform, e.g. "sunos5" or "linux1".

The built-in functions "input()" and "raw_input()" now use the GNU
readline library when it has been configured (formerly, only
interactive input to the interpreter itself was read using GNU
readline).  The GNU readline library provides elaborate line editing
and history.  The Python debugger ("pdb") is the first beneficiary of
this change.

Two new built-in functions, "globals()" and "locals()", provide access
to dictionaries containming current global and local variables,
respectively.  (These augment rather than replace "vars()", which
returns the current local variables when called without an argument,
and a module's global variables when called with an argument of type
module.)

The built-in function "compile()" now takes a third possible value for
the kind of code to be compiled: specifying "'single'" generates code
for a single interactive statement, which prints the output of
expression statements that evaluate to something else than "None".

Library Changes
===============

There are new module "ni" and "ihooks" that support importing modules
with hierarchical names such as "A.B.C".  This is enabled by writing
"import ni; ni.ni()" at the very top of the main program.  These
modules are amply documented in the Python source.

The module "rexec" has been rewritten (incompatibly) to define a class
and to use "ihooks".

The "string.split()" and "string.splitfields()" functions are now the
same function (the presence or absence of the second argument
determines which operation is invoked); similar for "string.join()"
and "string.joinfields()".

The "Tkinter" module and its helper "Dialog" have been revamped to use
keyword arguments.  Tk 4.0 is now the standard.  A new module
"FileDialog" has been added which implements standard file selection
dialogs.

The optional built-in modules "dbm" and "gdbm" are more coordinated
--- their "open()" functions now take the same values for their "flag"
argument, and the "flag" and "mode" argument have default values (to
open the database for reading only, and to create the database with
mode "0666" minuse the umask, respectively).  The memory leaks have
finally been fixed.

A new dbm-like module, "bsddb", has been added, which uses the BSD DB
package's hash method.

A portable (though slow) dbm-clone, implemented in Python, has been
added for systems where none of the above is provided.  It is aptly
dubbed "dumbdbm".

The module "anydbm" provides a unified interface to "bsddb", "gdbm",
"dbm", and "dumbdbm", choosing the first one available.

A new extension module, "binascii", provides a variety of operations
for conversion of text-encoded binary data.

There are three new or rewritten companion modules implemented in
Python that can encode and decode the most common such formats: "uu"
(uuencode), "base64" and "binhex".

A module to handle the MIME encoding quoted-printable has also been
added: "quopri".

The parser module (which provides an interface to the Python parser's
abstract syntax trees) has been rewritten (incompatibly) by Fred
Drake.  It now lets you change the parse tree and compile the result!

The \code{syslog} module has been upgraded and documented.

Other Changes
=============

The dynamic module loader recognizes the fact that different filenames
point to the same shared library and loads the library only once, so
you can have a single shared library that defines multiple modules.
(SunOS / SVR4 style shared libraries only.)

Jim Fulton's ``abstract object interface'' has been incorporated into
the run-time API.  For more detailes, read the files
"Include/abstract.h" and "Objects/abstract.c".

The Macintosh version is much more robust now.

Numerous things I have forgotten or that are so obscure no-one will
notice them anyway :-)


===================================
==> Release 1.2 (13 April 1995) <==
===================================

- Changes to Misc/python-mode.el:
  - Wrapping and indentation within triple quote strings should work
    properly now.
  - `Standard' bug reporting mechanism (use C-c C-b)
  - py-mark-block was moved to C-c C-m
  - C-c C-v shows you the python-mode version
  - a basic python-font-lock-keywords has been added for Emacs 19
    font-lock colorizations.
  - proper interaction with pending-del and del-sel modes.
  - New py-electric-colon (:) command for improved outdenting.  Also
    py-indent-line (TAB) should handle outdented lines better.
  - New commands py-outdent-left (C-c C-l) and py-indent-right (C-c C-r)

- The Library Reference has been restructured, and many new and
existing modules are now documented, in particular the debugger and
the profiler, as well as the persistency and the WWW/internet support
modules.

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

- All 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.  (Phase 3, fixing the rest of the sources, will be
executed gradually with the release later versions.)

- 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 (unsupported, undocumented) module rexec.py.

- The import statement now supports the syntax "import a.b.c" and
"from a.b.c import name".  No officially supported implementation
exists, but one can be prototyped by replacing the built-in __import__
function.  A proposal by Ken Manheimer is provided as newimp.py.

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

- Persistent storage is supported through the use of the modules
"pickle" and "shelve" (implemented in Python).  There's also a "copy"
module implementing deepcopy and normal (shallow) copy operations.
See the library reference manual.

- Documentation strings for many object 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.  (Basically, the type
object's tp_doc field contains the doc string for the type, and the
4th member of the methodlist structure contains the doc string for the
method.)

- 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 built-in open() function.
The same applies to posixfile.open() and the socket method makefile().

- The thread.exit_thread() function now raises SystemExit so that
'finally' clauses are honored and a memory leak is plugged.

- Improved X11 and Motif support, by Sjoerd Mullender.  This extension
is being maintained and distributed separately.

- Improved support for the Apple Macintosh, in part by Jack Jansen,
e.g. interfaces to (a few) resource manager functions, get/set file
type and creator, gestalt, sound manager, speech manager, MacTCP, comm
toolbox, and the think C console library.  This is being maintained
and distributed separately.

- Improved version for Windows NT, by Mark Hammond.  This is being
maintained and distributed separately.

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

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

- 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.  ALl built-in exceptions are still
string objects, but this will change in the future.

- The socket module exports a long list of socket related symbols.
(More built-in modules will export their symbolic constants instead of
relying on a separately generated Python module.)

- 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&", "[...]" and "{...}" in mkvalue().

- Extension to findmethod(): findmethodinchain() (where a chain is a
linked list of methodlist arrays).  The calling interface for
findmethod() has changed: it now gets a pointer to the (static!)
methodlist structure rather than just to the function name -- this
saves copying flags etc. into the (short-lived) method object.

- The callable() function is now public.

- Object types can define a few new operations by setting function
pointers in the type object structure: tp_call defines how an object
is called, and tp_str defines how an object's str() is computed.


===================================
==> Release 1.1.1 (10 Nov 1994) <==
===================================

This is a pure bugfix release again.  See the ChangeLog file for details.

One exception: a few new features were added to tkinter.


=================================
==> Release 1.1 (11 Oct 1994) <==
=================================

This release adds several new features, improved configuration and
portability, and fixes more bugs than I can list here (including some
memory leaks).

The source compiles and runs out of the box on more platforms than
ever -- including Windows NT.  Makefiles or projects for a variety of
non-UNIX platforms are provided.

APOLOGY: some new features are badly documented or not at all.  I had
the choice -- postpone the new release indefinitely, or release it
now, with working code but some undocumented areas.  The problem with
postponing the release is that people continue to suffer from existing
bugs, and send me patches based on the previous release -- which I
can't apply directly because my own source has changed.  Also, some
new modules (like signal) have been ready for release for quite some
time, and people are anxiously waiting for them.  In the case of
signal, the interface is simple enough to figure out without
documentation (if you're anxious enough :-).  In this case it was not
simple to release the module on its own, since it relies on many small
patches elsewhere in the source.

For most new Python modules, the source code contains comments that
explain how to use them.  Documentation for the Tk interface, written
by Matt Conway, is available as tkinter-doc.tar.gz from the Python
home and mirror ftp sites (see Misc/FAQ for ftp addresses).  For the
new operator overloading facilities, have a look at Demo/classes:
Complex.py and Rat.py show how to implement a numeric type without and
with __coerce__ method.  Also have a look at the end of the Tutorial
document (Doc/tut.tex).  If you're still confused: use the newsgroup
or mailing list.


New language features:

    - More flexible operator overloading for user-defined classes
    (INCOMPATIBLE WITH PREVIOUS VERSIONS!)  See end of tutorial.

    - Classes can define methods named __getattr__, __setattr__ and
    __delattr__ to trap attribute accesses.  See end of tutorial.

    - Classes can define method __call__ so instances can be called
    directly.  See end of tutorial.


New support facilities:

    - The Makefiles (for the base interpreter as well as for extensions)
    now support creating dynamically loadable modules if the platform
    supports shared libraries.

    - Passing the interpreter a .pyc file as script argument will execute
    the code in that file.  (On the Mac such files can be double-clicked!)

    - New Freeze script, to create independently distributable "binaries"
    of Python programs -- look in Demo/freeze

    - Improved h2py script (in Demo/scripts) follows #includes and
    supports macros with one argument

    - New module compileall generates .pyc files for all modules in a
    directory (tree) without also executing them

    - Threads should work on more platforms


New built-in modules:

    - tkinter (support for Tcl's Tk widget set) is now part of the base
    distribution

    - signal allows catching or ignoring UNIX signals (unfortunately still
    undocumented -- any taker?)

    - termios provides portable access to POSIX tty settings

    - curses provides an interface to the System V curses library

    - syslog provides an interface to the (BSD?) syslog daemon

    - 'new' provides interfaces to create new built-in object types
    (e.g. modules and functions)

    - sybase provides an interface to SYBASE database


New/obsolete built-in methods:

    - callable(x) tests whether x can be called

    - sockets now have a setblocking() method

    - sockets no longer have an allowbroadcast() method

    - socket methods send() and sendto() return byte count


New standard library modules:

    - types.py defines standard names for built-in types, e.g. StringType

    - urlparse.py parses URLs according to the latest internet draft

    - uu.py does uuencode/uudecode (not the fastest in the world, but
    quicker than installing uuencode on a non-UNIX machine :-)

    - New, faster and more powerful profile module.py

    - mhlib.py provides interface to MH folders and messages


New facilities for extension writers (unfortunately still
undocumented):

    - newgetargs() supports optional arguments and improved error messages

    - O!, O& O? formats for getargs allow more versatile type checking of
    non-standard types

    - can register pending asynchronous callback, to be called the next
    time the Python VM begins a new instruction (Py_AddPendingCall)

    - can register cleanup routines to be called when Python exits
    (Py_AtExit)

    - makesetup script understands C++ files in Setup file (use file.C
    or file.cc)

    - Make variable OPT is passed on to sub-Makefiles

    - An init<module>() routine may signal an error by not entering
    the module in the module table and raising an exception instead

    - For long module names, instead of foobarbletchmodule.c you can
    use foobarbletch.c

    - getintvalue() and getfloatvalue() try to convert any object
    instead of requiring an "intobject" or "floatobject"

    - All the [new]getargs() formats that retrieve an integer value
    will now also work if a float is passed

    - C function listtuple() converts list to tuple, fast

    - You should now call sigcheck() instead of intrcheck();
    sigcheck() also sets an exception when it returns nonzero


====================================
==> Release 1.0.3 (14 July 1994) <==
====================================

This release consists entirely of bug fixes to the C sources; see the
head of ../ChangeLog for a complete list.  Most important bugs fixed:

- Sometimes the format operator (string%expr) would drop the last
character of the format string

- Tokenizer looped when last line did not end in \n

- Bug when triple-quoted string ended in quote plus newline

- Typo in socketmodule (listen) (== instead of =)

- typing vars() at the >>> prompt would cause recursive output


==================================
==> Release 1.0.2 (4 May 1994) <==
==================================

Overview of the most visible changes.  Bug fixes are not listed.  See
also ChangeLog.

Tokens
------

* String literals follow Standard C rules: they may be continued on
the next line using a backslash; adjacent literals are concatenated
at compile time.

* A new kind of string literals, surrounded by triple quotes (""" or
'''), can be continued on the next line without a backslash.

Syntax
------

* Function arguments may have a default value, e.g. def f(a, b=1);
defaults are evaluated at function definition time.  This also applies
to lambda.

* The try-except statement has an optional else clause, which is
executed when no exception occurs in the try clause.

Interpreter
-----------

* The result of a statement-level expression is no longer printed,
except_ for expressions entered interactively.  Consequently, the -k
command line option is gone.

* The result of the last printed interactive expression is assigned to
the variable '_'.

* Access to implicit global variables has been speeded up by removing
an always-failing dictionary lookup in the dictionary of local
variables (mod suggested by Steve Makewski and Tim Peters).

* There is a new command line option, -u, to force stdout and stderr
to be unbuffered.

* Incorporated Steve Majewski's mods to import.c for dynamic loading
under AIX.

* Fewer chances of dumping core when trying to reload or re-import
static built-in, dynamically loaded built-in, or frozen modules.

* Loops over sequences now don't ask for the sequence's length when
they start, but try to access items 0, 1, 2, and so on until they hit
an IndexError.  This makes it possible to create classes that generate
infinite or indefinite sequences a la Steve Majewski.  This affects
for loops, the (not) in operator, and the built-in functions filter(),
map(), max(), min(), reduce().

Changed Built-in operations
---------------------------

* The '%' operator on strings (printf-style formatting) supports a new
feature (adapted from a patch by Donald Beaudry) to allow
'%(<key>)<format>' % {...} to take values from a dictionary by name
instead of from a tuple by position (see also the new function
vars()).

* The '%s' formatting operator is changed to accept any type and
convert it to a string using str().

* Dictionaries with more than 20,000 entries can now be created
(thanks to Steve Kirsch).

New Built-in Functions
----------------------

* vars() returns a dictionary containing the local variables; vars(m)
returns a dictionary containing the variables of module m.  Note:
dir(x) is now equivalent to vars(x).keys().

Changed Built-in Functions
--------------------------

* open() has an optional third argument to specify the buffer size: 0
for unbuffered, 1 for line buffered, >1 for explicit buffer size, <0
for default.

* open()'s second argument is now optional; it defaults to "r".

* apply() now checks that its second argument is indeed a tuple.

New Built-in Modules
--------------------

Changed Built-in Modules
------------------------

The thread module no longer supports exit_prog().

New Python Modules
------------------

* Module addpack contains a standard interface to modify sys.path to
find optional packages (groups of related modules).

* Module urllib contains a number of functions to access
World-Wide-Web files specified by their URL.

* Module httplib implements the client side of the HTTP protocol used
by World-Wide-Web servers.

* Module gopherlib implements the client side of the Gopher protocol.

* Module mailbox (by Jack Jansen) contains a parser for UNIX and MMDF
style mailbox files.

* Module random contains various random distributions, e.g. gauss().

* Module lockfile locks and unlocks open files using fcntl (inspired
by a similar module by Andy Bensky).

* Module ntpath (by Jaap Vermeulen) implements path operations for
Windows/NT.

* Module test_thread (in Lib/test) contains a small test set for the
thread module.

Changed Python Modules
----------------------

* The string module's expandvars() function is now documented and is
implemented in Python (using regular expressions) instead of forking
off a shell process.

* Module rfc822 now supports accessing the header fields using the
mapping/dictionary interface, e.g. h['subject'].

* Module pdb now makes it possible to set a break on a function
(syntax: break <expression>, where <expression> yields a function
object).

Changed Demos
-------------

* The Demo/scripts/freeze.py script is working again (thanks to Jaap
Vermeulen).

New Demos
---------

* Demo/threads/Generator.py is a proposed interface for restartable
functions a la Tim Peters.

* Demo/scripts/newslist.py, by Quentin Stafford-Fraser, generates a
directory full of HTML pages which between them contain links to all
the newsgroups available on your server.

* Demo/dns contains a DNS (Domain Name Server) client.

* Demo/lutz contains miscellaneous demos by Mark Lutz (e.g. psh.py, a
nice enhanced Python shell!!!).

* Demo/turing contains a Turing machine by Amrit Prem.

Documentation
-------------

* Documented new language features mentioned above (but not all new
modules).

* Added a chapter to the Tutorial describing recent additions to
Python.

* Clarified some sentences in the reference manual,
e.g. break/continue, local/global scope, slice assignment.

Source Structure
----------------

* Moved Include/tokenizer.h to Parser/tokenizer.h.

* Added Python/getopt.c for systems that don't have it.

Emacs mode
----------

* Indentation of continuated lines is done more intelligently;
consequently the variable py-continuation-offset is gone.


========================================
==> Release 1.0.1 (15 February 1994) <==
========================================

* Many portability fixes should make it painless to build Python on
several new platforms, e.g. NeXT, SEQUENT, WATCOM, DOS, and Windows.

* Fixed test for <stdarg.h> -- this broke on some platforms.

* Fixed test for shared library dynalic loading -- this broke on SunOS
4.x using the GNU loader.

* Changed order and number of SVR4 networking libraries (it is now
-lsocket -linet -lnsl, if these libraries exist).

* Installing the build intermediate stages with "make libainstall" now
also installs config.c.in, Setup and makesetup, which are used by the
new Extensions mechanism.

* Improved README file contains more hints and new troubleshooting
section.

* The built-in module strop now defines fast versions of three more
functions of the standard string module: atoi(), atol() and atof().
The strop versions of atoi() and atol() support an optional second
argument to specify the base (default 10).  NOTE: you don't have to
explicitly import strop to use the faster versions -- the string
module contains code to let versions from stop override the default
versions.

* There is now a working Lib/dospath.py for those who use Python under
DOS (or Windows).  Thanks, Jaap!

* There is now a working Modules/dosmodule.c for DOS (or Windows)
system calls.

* Lib.os.py has been reorganized (making it ready for more operating
systems).

* Lib/ospath.py is now obsolete (use os.path instead).

* Many fixes to the tutorial to make it match Python 1.0.  Thanks,
Tim!

* Fixed Doc/Makefile, Doc/README and various scripts there.

* Added missing description of fdopen to Doc/libposix.tex.

* Made cleanup() global, for the benefit of embedded applications.

* Added parsing of addresses and dates to Lib/rfc822.py.

* Small fixes to Lib/aifc.py, Lib/sunau.py, Lib/tzparse.py to make
them usable at all.

* New module Lib/wave.py reads RIFF (*.wav) audio files.

* Module Lib/filewin.py moved to Lib/stdwin/filewin.py where it
belongs.

* New options and comments for Modules/makesetup (used by new
Extension mechanism).

* Misc/HYPE contains text of announcement of 1.0.0 in comp.lang.misc
and elsewhere.

* Fixed coredump in filter(None, 'abcdefg').


=======================================
==> Release 1.0.0 (26 January 1994) <==
=======================================

As is traditional, so many things have changed that I can't pretend to
be complete in these release notes, but I'll try anyway :-)

Note that the very last section is labeled "remaining bugs".


Source organization and build process
-------------------------------------

* The sources have finally been split: instead of a single src
subdirectory there are now separate directories Include, Parser,
Grammar, Objects, Python and Modules.  Other directories also start
with a capital letter: Misc, Doc, Lib, Demo.

* A few extensions (notably Amoeba and X support) have been moved to a
separate subtree Extensions, which is no longer in the core
distribution, but separately ftp'able as extensions.tar.Z.  (The
distribution contains a placeholder Ext-dummy with a description of
the Extensions subtree as well as the most recent versions of the
scripts used there.)

* A few large specialized demos (SGI video and www) have been
moved to a separate subdirectory Demo2, which is no longer in the core
distribution, but separately ftp'able as demo2.tar.Z.

* Parts of the standard library have been moved to subdirectories:
there are now standard subdirectories stdwin, test, sgi and sun4.

* The configuration process has radically changed: I now use GNU
autoconf.  This makes it much easier to build on new Unix flavors, as
well as fully supporting VPATH (if your Make has it).  The scripts
Configure.py and Addmodule.sh are no longer needed.  Many source files
have been adapted in order to work with the symbols that the configure
script generated by autoconf defines (or not); the resulting source is
much more portable to different C compilers and operating systems,
even non Unix systems (a Mac port was done in an afternoon).  See the
toplevel README file for a description of the new build process.

* GNU readline (a slightly newer version) is now a subdirectory of the
Python toplevel.  It is still not automatically configured (being
totally autoconf-unaware :-).  One problem has been solved: typing
Control-C to a readline prompt will now work.  The distribution no
longer contains a "super-level" directory (above the python toplevel
directory), and dl, dl-dld and GNU dld are no longer part of the
Python distribution (you can still ftp them from
ftp.cwi.nl:/pub/dynload).

* The DOS functions have been taken out of posixmodule.c and moved
into a separate file dosmodule.c.

* There's now a separate file version.c which contains nothing but
the version number.

* The actual main program is now contained in config.c (unless NO_MAIN
is defined); pythonmain.c now contains a function realmain() which is
called from config.c's main().

* All files needed to use the built-in module md5 are now contained in
the distribution.  The module has been cleaned up considerably.


Documentation
-------------

* The library manual has been split into many more small latex files,
so it is easier to edit Doc/lib.tex file to create a custom library
manual, describing only those modules supported on your system.  (This
is not automated though.)

* A fourth manual has been added, titled "Extending and Embedding the
Python Interpreter" (Doc/ext.tex), which collects information about
the interpreter which was previously spread over several files in the
misc subdirectory.

* The entire documentation is now also available on-line for those who
have a WWW browser (e.g. NCSA Mosaic).  Point your browser to the URL
"http://www.cwi.nl/~guido/Python.html".


Syntax
------

* Strings may now be enclosed in double quotes as well as in single
quotes.  There is no difference in interpretation.  The repr() of
string objects will use double quotes if the string contains a single
quote and no double quotes.  Thanks to Amrit Prem for these changes!

* There is a new keyword 'exec'.  This replaces the exec() built-in
function.  If a function contains an exec statement, local variable
optimization is not performed for that particular function, thus
making assignment to local variables in exec statements less
confusing.  (As a consequence, os.exec and python.exec have been
renamed to execv.)

* There is a new keyword 'lambda'.  An expression of the form

	lambda <parameters> : <expression>

yields an anonymous function.  This is really only syntactic sugar;
you can just as well define a local function using

	def some_temporary_name(<parameters>): return <expression>

Lambda expressions are particularly useful in combination with map(),
filter() and reduce(), described below.  Thanks to Amrit Prem for
submitting this code (as well as map(), filter(), reduce() and
xrange())!


Built-in functions
------------------

* The built-in module containing the built-in functions is called
__builtin__ instead of builtin.

* New built-in functions map(), filter() and reduce() perform standard
functional programming operations (though not lazily):

- map(f, seq) returns a new sequence whose items are the items from
seq with f() applied to them.

- filter(f, seq) returns a subsequence of seq consisting of those
items for which f() is true.

- reduce(f, seq, initial) returns a value computed as follows:
	acc = initial
	for item in seq: acc = f(acc, item)
	return acc

* New function xrange() creates a "range object".  Its arguments are
the same as those of range(), and when used in a for loop a range
objects also behaves identical.  The advantage of xrange() over
range() is that its representation (if the range contains many
elements) is much more compact than that of range().  The disadvantage
is that the result cannot be used to initialize a list object or for
the "Python idiom" [RED, GREEN, BLUE] = range(3).  On some modern
architectures, benchmarks have shown that "for i in range(...): ..."
actually executes *faster* than "for i in xrange(...): ...", but on
memory starved machines like PCs running DOS range(100000) may be just
too big to be represented at all...

* Built-in function exec() has been replaced by the exec statement --
see above.


The interpreter
---------------

* Syntax errors are now not printed to stderr by the parser, but
rather the offending line and other relevant information are packed up
in the SyntaxError exception argument.  When the main loop catches a
SyntaxError exception it will print the error in the same format as
previously, but at the proper position in the stack traceback.

* You can now set a maximum to the number of traceback entries
printed by assigning to sys.tracebacklimit.  The default is 1000.

* The version number in .pyc files has changed yet again.

* It is now possible to have a .pyc file without a corresponding .py
file.  (Warning: this may break existing installations if you have an
old .pyc file lingering around somewhere on your module search path
without a corresponding .py file, when there is a .py file for a
module of the same name further down the path -- the new interpreter
will find the first .pyc file and complain about it, while the old
interpreter would ignore it and use the .py file further down.)

* The list sys.builtin_module_names is now sorted and also contains
the names of a few hardwired built-in modules (sys, __main__ and
__builtin__).

* A module can now find its own name by accessing the global variable
__name__.  Assigning to this variable essentially renames the module
(it should also be stored under a different key in sys.modules).
A neat hack follows from this: a module that wants to execute a main
program when called as a script no longer needs to compare
sys.argv[0]; it can simply do "if __name__ == '__main__': main()".

* When an object is printed by the print statement, its implementation
of str() is used.  This means that classes can define __str__(self) to
direct how their instances are printed.  This is different from
__repr__(self), which should define an unambiguous string
representation of the instance.  (If __str__() is not defined, it
defaults to __repr__().)

* Functions and code objects can now be compared meaningfully.

* On systems supporting SunOS or SVR4 style shared libraries, dynamic
loading of modules using shared libraries is automatically configured.
Thanks to Bill Jansen and Denis Severson for contributing this change!


Built-in objects
----------------

* File objects have acquired a new method writelines() which is the
reverse of readlines().  (It does not actually write lines, just a
list of strings, but the symmetry makes the choice of name OK.)


Built-in modules
----------------

* Socket objects no longer support the avail() method.  Use the select
module instead, or use this function to replace it:

	def avail(f):
		import select
		return f in select.select([f], [], [], 0)[0]

* Initialization of stdwin is done differently.  It actually modifies
sys.argv (taking out the options the X version of stdwin recognizes)
the first time it is imported.

* A new built-in module parser provides a rudimentary interface to the
python parser.  Corresponding standard library modules token and symbol
defines the numeric values of tokens and non-terminal symbols.

* The posix module has acquired new functions setuid(), setgid(),
execve(), and exec() has been renamed to execv().

* The array module is extended with 8-byte object swaps, the 'i'
format character, and a reverse() method.  The read() and write()
methods are renamed to fromfile() and tofile().

* The rotor module has freed of portability bugs.  This introduces a
backward compatibility problem: strings encoded with the old rotor
module can't be decoded by the new version.

* For select.select(), a timeout (4th) argument of None means the same
as leaving the timeout argument out.

* Module strop (and hence standard library module string) has acquired
a new function: rindex().  Thanks to Amrit Prem!

* Module regex defines a new function symcomp() which uses an extended
regular expression syntax: parenthesized subexpressions may be labeled
using the form "\(<labelname>...\)", and the group() method can return
sub-expressions by name.  Thanks to Tracy Tims for these changes!

* Multiple threads are now supported on Solaris 2.  Thanks to Sjoerd
Mullender!


Standard library modules
------------------------

* The library is now split in several subdirectories: all stuff using
stdwin is in Lib/stdwin, all SGI specific (or SGI Indigo or GL) stuff
is in Lib/sgi, all Sun Sparc specific stuff is in Lib/sun4, and all
test modules are in Lib/test.  The default module search path will
include all relevant subdirectories by default.

* Module os now knows about trying to import dos.  It defines
functions execl(), execle(), execlp() and execvp().

* New module dospath (should be attacked by a DOS hacker though).

* All modules defining classes now define __init__() constructors
instead of init() methods.  THIS IS AN INCOMPATIBLE CHANGE!

* Some minor changes and bugfixes module ftplib (mostly Steve
Majewski's suggestions); the debug() method is renamed to
set_debuglevel().

* Some new test modules (not run automatically by testall though):
test_audioop, test_md5, test_rgbimg, test_select.

* Module string now defines rindex() and rfind() in analogy of index()
and find().  It also defines atof() and atol() (and corresponding
exceptions) in analogy to atoi().

* Added help() functions to modules profile and pdb.

* The wdb debugger (now in Lib/stdwin) now shows class or instance
variables on a double click.  Thanks to Sjoerd Mullender!

* The (undocumented) module lambda has gone -- you couldn't import it
any more, and it was basically more a demo than a library module...


Multimedia extensions
---------------------

* The optional built-in modules audioop and imageop are now standard
parts of the interpreter.  Thanks to Sjoerd Mullender and Jack Jansen
for contributing this code!

* There's a new operation in audioop: minmax().

* There's a new built-in module called rgbimg which supports portable
efficient reading of SGI RCG image files.  Thanks also to Paul
Haeberli for the original code!  (Who will contribute a GIF reader?)

* The module aifc is gone -- you should now always use aifc, which has
received a facelift.

* There's a new module sunau., for reading Sun (and NeXT) audio files.

* There's a new module audiodev which provides a uniform interface to
(SGI Indigo and Sun Sparc) audio hardware.

* There's a new module sndhdr which recognizes various sound files by
looking in their header and checking for various magic words.


Optimizations
-------------

* Most optimizations below can be configured by compile-time flags.
Thanks to Sjoerd Mullender for submitting these optimizations!

* Small integers (default -1..99) are shared -- i.e. if two different
functions compute the same value it is possible (but not
guaranteed!!!) that they return the same *object*.  Python programs
can detect this but should *never* rely on it.

* Empty tuples (which all compare equal) are shared in the same
manner.

* Tuples of size up to 20 (default) are put in separate free lists
when deallocated.

* There is a compile-time option to cache a string's hash function,
but this appeared to have a negligeable effect, and as it costs 4
bytes per string it is disabled by default.


Embedding Python
----------------

* The initialization interface has been simplified somewhat.  You now
only call "initall()" to initialize the interpreter.

* The previously announced renaming of externally visible identifiers
has not been carried out.  It will happen in a later release.  Sorry.


Miscellaneous bugs that have been fixed
---------------------------------------

* All known portability bugs.

* Version 0.9.9 dumped core in <listobject>.sort() which has been
fixed.  Thanks to Jaap Vermeulen for fixing this and posting the fix
on the mailing list while I was away!

* Core dump on a format string ending in '%', e.g. in the expression
'%' % None.

* The array module yielded a bogus result for concatenation (a+b would
yield a+a).

* Some serious memory leaks in strop.split() and strop.splitfields().

* Several problems with the nis module.

* Subtle problem when copying a class method from another class
through assignment (the method could not be called).


Remaining bugs
--------------

* One problem with 64-bit machines remains -- since .pyc files are
portable and use only 4 bytes to represent an integer object, 64-bit
integer literals are silently truncated when written into a .pyc file.
Work-around: use eval('123456789101112').

* The freeze script doesn't work any more.  A new and more portable
one can probably be cooked up using tricks from Extensions/mkext.py.

* The dos support hasn't been tested yet.  (Really Soon Now we should
have a PC with a working C compiler!)


===================================
==> Release 0.9.9 (29 Jul 1993) <==
===================================

I *believe* these are the main user-visible changes in this release,
but there may be others.  SGI users may scan the {src,lib}/ChangeLog
files for improvements of some SGI specific modules, e.g. aifc and
cl.  Developers of extension modules should also read src/ChangeLog.


Naming of C symbols used by the Python interpreter
--------------------------------------------------

* This is the last release using the current naming conventions.  New
naming conventions are explained in the file misc/NAMING.
Summarizing, all externally visible symbols get (at least) a "Py"
prefix, and most functions are renamed to the standard form
PyModule_FunctionName.

* Writers of extensions are urged to start using the new naming
conventions.  The next release will use the new naming conventions
throughout (it will also have a different source directory
structure).

* As a result of the preliminary work for the great renaming, many
functions that were accidentally global have been made static.


BETA X11 support
----------------

* There are now modules interfacing to the X11 Toolkit Intrinsics, the
Athena widgets, and the Motif 1.1 widget set.  These are not yet
documented except through the examples and README file in the demo/x11
directory.  It is expected that this interface will be replaced by a
more powerful and correct one in the future, which may or may not be
backward compatible.  In other words, this part of the code is at most
BETA level software!  (Note: the rest of Python is rock solid as ever!)

* I understand that the above may be a bit of a disappointment,
however my current schedule does not allow me to change this situation
before putting the release out of the door.  By releasing it
undocumented and buggy, at least some of the (working!) demo programs,
like itr (my Internet Talk Radio browser) become available to a larger
audience.

* There are also modules interfacing to SGI's "Glx" widget (a GL
window wrapped in a widget) and to NCSA's "HTML" widget (which can
format HyperText Markup Language, the document format used by the
World Wide Web).

* I've experienced some problems when building the X11 support.  In
particular, the Xm and Xaw widget sets don't go together, and it
appears that using X11R5 is better than using X11R4.  Also the threads
module and its link time options may spoil things.  My own strategy is
to build two Python binaries: one for use with X11 and one without
it, which can contain a richer set of built-in modules.  Don't even
*think* of loading the X11 modules dynamically...


Environmental changes
---------------------

* Compiled files (*.pyc files) created by this Python version are
incompatible with those created by the previous version.  Both
versions detect this and silently create a correct version, but it
means that it is not a good idea to use the same library directory for
an old and a new interpreter, since they will start to "fight" over
the *.pyc files...

* When a stack trace is printed, the exception is printed last instead
of first.  This means that if the beginning of the stack trace
scrolled out of your window you can still see what exception caused
it.

* Sometimes interrupting a Python operation does not work because it
hangs in a blocking system call.  You can now kill the interpreter by
interrupting it three times.  The second time you interrupt it, a
message will be printed telling you that the third interrupt will kill
the interpreter.  The "sys.exitfunc" feature still makes limited
clean-up possible in this case.


Changes to the command line interface
-------------------------------------

* The python usage message is now much more informative.

* New option -i enters interactive mode after executing a script --
useful for debugging.

* New option -k raises an exception when an expression statement
yields a value other than None.

* For each option there is now also a corresponding environment
variable.


Using Python as an embedded language
------------------------------------

* The distribution now contains (some) documentation on the use of
Python as an "embedded language" in other applications, as well as a
simple example.  See the file misc/EMBEDDING and the directory embed/.


Speed improvements
------------------

* Function local variables are now generally stored in an array and
accessed using an integer indexing operation, instead of through a
dictionary lookup.  (This compensates the somewhat slower dictionary
lookup caused by the generalization of the dictionary module.)


Changes to the syntax
---------------------

* Continuation lines can now *sometimes* be written without a
backslash: if the continuation is contained within nesting (), [] or
{} brackets the \ may be omitted.  There's a much improved
python-mode.el in the misc directory which knows about this as well.

* You can no longer use an empty set of parentheses to define a class
without base classes.  That is, you no longer write this:

	class Foo(): # syntax error
		...

You must write this instead:

	class Foo:
		...

This was already the preferred syntax in release 0.9.8 but many
people seemed not to have picked it up.  There's a Python script that
fixes old code: demo/scripts/classfix.py.

* There's a new reserved word: "access".  The syntax and semantics are
still subject of research and debate (as well as undocumented), but
the parser knows about the keyword so you must not use it as a
variable, function, or attribute name.


Changes to the semantics of the language proper
-----------------------------------------------

* The following compatibility hack is removed: if a function was
defined with two or more arguments, and called with a single argument
that was a tuple with just as many arguments, the items of this tuple
would be used as the arguments.  This is no longer supported.


Changes to the semantics of classes and instances
-------------------------------------------------

* Class variables are now also accessible as instance variables for
reading (assignment creates an instance variable which overrides the
class variable of the same name though).

* If a class attribute is a user-defined function, a new kind of
object is returned: an "unbound method".  This contains a pointer to
the class and can only be called with a first argument which is a
member of that class (or a derived class).

* If a class defines a method __init__(self, arg1, ...) then this
method is called when a class instance is created by the classname()
construct.  Arguments passed to classname() are passed to the
__init__() method.  The __init__() methods of base classes are not
automatically called; the derived __init__() method must call these if
necessary (this was done so the derived __init__() method can choose
the call order and arguments for the base __init__() methods).

* If a class defines a method __del__(self) then this method is called
when an instance of the class is about to be destroyed.  This makes it
possible to implement clean-up of external resources attached to the
instance.  As with __init__(), the __del__() methods of base classes
are not automatically called.  If __del__ manages to store a reference
to the object somewhere, its destruction is postponed; when the object
is again about to be destroyed its __del__() method will be called
again.

* Classes may define a method __hash__(self) to allow their instances
to be used as dictionary keys.  This must return a 32-bit integer.


Minor improvements
------------------

* Function and class objects now know their name (the name given in
the 'def' or 'class' statement that created them).

* Class instances now know their class name.


Additions to built-in operations
--------------------------------

* The % operator with a string left argument implements formatting
similar to sprintf() in C.  The right argument is either a single
value or a tuple of values.  All features of Standard C sprintf() are
supported except %p.

* Dictionaries now support almost any key type, instead of just
strings.  (The key type must be an immutable type or must be a class
instance where the class defines a method __hash__(), in order to
avoid losing track of keys whose value may change.)

* Built-in methods are now compared properly: when comparing x.meth1
and y.meth2, if x is equal to y and the methods are defined by the
same function, x.meth1 compares equal to y.meth2.


Additions to built-in functions
-------------------------------

* str(x) returns a string version of its argument.  If the argument is
a string it is returned unchanged, otherwise it returns `x`.

* repr(x) returns the same as `x`.  (Some users found it easier to
have this as a function.)

* round(x) returns the floating point number x rounded to a whole
number, represented as a floating point number.  round(x, n) returns x
rounded to n digits.

* hasattr(x, name) returns true when x has an attribute with the given
name.

* hash(x) returns a hash code (32-bit integer) of an arbitrary
immutable object's value.

* id(x) returns a unique identifier (32-bit integer) of an arbitrary
object.

* compile() compiles a string to a Python code object.

* exec() and eval() now support execution of code objects.


Changes to the documented part of the library (standard modules)
----------------------------------------------------------------

* os.path.normpath() (a.k.a. posixpath.normpath()) has been fixed so
the border case '/foo/..' returns '/' instead of ''.

* A new function string.find() is added with similar semantics to
string.index(); however when it does not find the given substring it
returns -1 instead of raising string.index_error.


Changes to built-in modules
---------------------------

* New optional module 'array' implements operations on sequences of
integers or floating point numbers of a particular size.  This is
useful to manipulate large numerical arrays or to read and write
binary files consisting of numerical data.

* Regular expression objects created by module regex now support a new
method named group(), which returns one or more \(...\) groups by number.
The number of groups is increased from 10 to 100.

* Function compile() in module regex now supports an optional mapping
argument; a variable casefold is added to the module which can be used
as a standard uppercase to lowercase mapping.

* Module time now supports many routines that are defined in the
Standard C time interface (<time.h>): gmtime(), localtime(),
asctime(), ctime(), mktime(), as well as these variables (taken from
System V): timezone, altzone, daylight and tzname.  (The corresponding
functions in the undocumented module calendar have been removed; the
undocumented and unfinished module tzparse is now obsolete and will
disappear in a future release.)

* Module strop (the fast built-in version of standard module string)
now uses C's definition of whitespace instead of fixing it to space,
tab and newline; in practice this usually means that vertical tab,
form feed and return are now also considered whitespace.  It exports
the string of characters that are considered whitespace as well as the
characters that are considered lowercase or uppercase.

* Module sys now defines the variable builtin_module_names, a list of
names of modules built into the current interpreter (including not
yet imported, but excluding two special modules that always have to be
defined -- sys and builtin).

* Objects created by module sunaudiodev now also support flush() and
close() methods.

* Socket objects created by module socket now support an optional
flags argument for their methods sendto() and recvfrom().

* Module marshal now supports dumping to and loading from strings,
through the functions dumps() and loads().

* Module stdwin now supports some new functionality.  You may have to
ftp the latest version: ftp.cwi.nl:/pub/stdwin/stdwinforviews.tar.Z.)


Bugs fixed
----------

* Fixed comparison of negative long integers.

* The tokenizer no longer botches input lines longer than BUFSIZ.

* Fixed several severe memory leaks in module select.

* Fixed memory leaks in modules socket and sv.

* Fixed memory leak in divmod() for long integers.

* Problems with definition of floatsleep() on Suns fixed.

* Many portability bugs fixed (and undoubtedly new ones added :-).


Changes to the build procedure
------------------------------

* The Makefile supports some new targets: "make default" and "make
all".  Both are by normally equivalent to "make python".

* The Makefile no longer uses $> since it's not supported by all
versions of Make.

* The header files now all contain #ifdef constructs designed to make
it safe to include the same header file twice, as well as support for
inclusion from C++ programs (automatic extern "C" { ... } added).


Freezing Python scripts
-----------------------

* There is now some support for "freezing" a Python script as a
stand-alone executable binary file.  See the script
demo/scripts/freeze.py.  It will require some site-specific tailoring
of the script to get this working, but is quite worthwhile if you write
Python code for other who may not have built and installed Python.


MS-DOS
------

* A new MS-DOS port has been done, using MSC 6.0 (I believe).  Thanks,
Marcel van der Peijl!  This requires fewer compatibility hacks in
posixmodule.c.  The executable is not yet available but will be soon
(check the mailing list).

* The default PYTHONPATH has changed.


Changes for developers of extension modules
-------------------------------------------

* Read src/ChangeLog for full details.


SGI specific changes
--------------------

* Read src/ChangeLog for full details.


==================================
==> Release 0.9.8 (9 Jan 1993) <==
==================================

I claim no completeness here, but I've tried my best to scan the log
files throughout my source tree for interesting bits of news.  A more
complete account of the changes is to be found in the various
ChangeLog files. See also "News for release 0.9.7beta" below if you're
still using release 0.9.6, and the file HISTORY if you have an even
older release.

	--Guido


Changes to the language proper
------------------------------

There's only one big change: the conformance checking for function
argument lists (of user-defined functions only) is stricter.  Earlier,
you could get away with the following:

	(a) define a function of one argument and call it with any
	    number of arguments; if the actual argument count wasn't
	    one, the function would receive a tuple containing the
	    arguments (an empty tuple if there were none).

	(b) define a function of two arguments, and call it with more
	    than two arguments; if there were more than two arguments,
	    the second argument would be passed as a tuple containing
	    the second and further actual arguments.

(Note that an argument (formal or actual) that is a tuple is counted as
one; these rules don't apply inside such tuples, only at the top level
of the argument list.)

Case (a) was needed to accommodate variable-length argument lists;
there is now an explicit "varargs" feature (precede the last argument
with a '*').  Case (b) was needed for compatibility with old class
definitions: up to release 0.9.4 a method with more than one argument
had to be declared as "def meth(self, (arg1, arg2, ...)): ...".
Version 0.9.6 provide better ways to handle both casees, bot provided
backward compatibility; version 0.9.8 retracts the compatibility hacks
since they also cause confusing behavior if a function is called with
the wrong number of arguments.

There's a script that helps converting classes that still rely on (b),
provided their methods' first argument is called "self":
demo/scripts/methfix.py.

If this change breaks lots of code you have developed locally, try
#defining COMPAT_HACKS in ceval.c.

(There's a third compatibility hack, which is the reverse of (a): if a
function is defined with two or more arguments, and called with a
single argument that is a tuple with just as many arguments, the items
of this tuple will be used as the arguments.  Although this can (and
should!) be done using the built-in function apply() instead, it isn't
withdrawn yet.)


One minor change: comparing instance methods works like expected, so
that if x is an instance of a user-defined class and has a method m,
then (x.m==x.m) yields 1.


The following was already present in 0.9.7beta, but not explicitly
mentioned in the NEWS file: user-defined classes can now define types
that behave in almost allrespects like numbers.  See
demo/classes/Rat.py for a simple example.


Changes to the build process
----------------------------

The Configure.py script and the Makefile has been made somewhat more
bullet-proof, after reports of (minor) trouble on certain platforms.

There is now a script to patch Makefile and config.c to add a new
optional built-in module: Addmodule.sh.  Read the script before using!

Using Addmodule.sh, all optional modules can now be configured at
compile time using Configure.py, so there are no modules left that
require dynamic loading.

The Makefile has been fixed to make it easier to use with the VPATH
feature of some Make versions (e.g. SunOS).


Changes affecting portability
-----------------------------

Several minor portability problems have been solved, e.g. "malloc.h"
has been renamed to "mymalloc.h", "strdup.c" is no longer used, and
the system now tolerates malloc(0) returning 0.

For dynamic loading on the SGI, Jack Jansen's dl 1.6 is now
distributed with Python.  This solves several minor problems, in
particular scripts invoked using #! can now use dynamic loading.


Changes to the interpreter interface
------------------------------------

On popular demand, there's finally a "profile" feature for interactive
use of the interpreter.  If the environment variable $PYTHONSTARTUP is
set to the name of an existing file, Python statements in this file
are executed when the interpreter is started in interactive mode.

There is a new clean-up mechanism, complementing try...finally: if you
assign a function object to sys.exitfunc, it will be called when
Python exits or receives a SIGTERM or SIGHUP signal.

The interpreter is now generally assumed to live in
/usr/local/bin/python (as opposed to /usr/local/python).  The script
demo/scripts/fixps.py will update old scripts in place (you can easily
modify it to do other similar changes).

Most I/O that uses sys.stdin/stdout/stderr will now use any object
assigned to those names as long as the object supports readline() or
write() methods.

The parser stack has been increased to 500 to accommodate more
complicated expressions (7 levels used to be the practical maximum,
it's now about 38).

The limit on the size of the *run-time* stack has completely been
removed -- this means that tuple or list displays can contain any
number of elements (formerly more than 50 would crash the
interpreter).


Changes to existing built-in functions and methods
--------------------------------------------------

The built-in functions int(), long(), float(), oct() and hex() now
also apply to class instalces that define corresponding methods
(__int__ etc.).


New built-in functions
----------------------

The new functions str() and repr() convert any object to a string.
The function repr(x) is in all respects equivalent to `x` -- some
people prefer a function for this.  The function str(x) does the same
except if x is already a string -- then it returns x unchanged
(repr(x) adds quotes and escapes "funny" characters as octal escapes).

The new function cmp(x, y) returns -1 if x<y, 0 if x==y, 1 if x>y.


Changes to general built-in modules
-----------------------------------

The time module's functions are more general: time() returns a
floating point number and sleep() accepts one.  Their accuracies
depends on the precision of the system clock.  Millisleep is no longer
needed (although it still exists for now), but millitimer is still
needed since on some systems wall clock time is only available with
seconds precision, while a source of more precise time exists that
isn't synchronized with the wall clock.  (On UNIX systems that support
the BSD gettimeofday() function, time.time() is as time.millitimer().)

The string representation of a file object now includes an address:
'<file 'filename', mode 'r' at #######>' where ###### is a hex number
(the object's address) to make it unique.

New functions added to posix: nice(), setpgrp(), and if your system
supports them: setsid(), setpgid(), tcgetpgrp(), tcsetpgrp().

Improvements to the socket module: socket objects have new methods
getpeername() and getsockname(), and the {get,set}sockopt methods can
now get/set any kind of option using strings built with the new struct
module.  And there's a new function fromfd() which creates a socket
object given a file descriptor (useful for servers started by inetd,
which have a socket connected to stdin and stdout).


Changes to SGI-specific built-in modules
----------------------------------------

The FORMS library interface (fl) now requires FORMS 2.1a.  Some new
functions have been added and some bugs have been fixed.

Additions to al (audio library interface): added getname(),
getdefault() and getminmax().

The gl modules doesn't call "foreground()" when initialized (this
caused some problems) like it dit in 0.9.7beta (but not before).
There's a new gl function 'gversion() which returns a version string.

The interface to sv (Indigo video interface) has totally changed.
(Sorry, still no documentation, but see the examples in
demo/sgi/{sv,video}.)


Changes to standard library modules
-----------------------------------

Most functions in module string are now much faster: they're actually
implemented in C.  The module containing the C versions is called
"strop" but you should still import "string" since strop doesn't
provide all the interfaces defined in string (and strop may be renamed
to string when it is complete in a future release).

string.index() now accepts an optional third argument giving an index
where to start searching in the first argument, so you can find second
and further occurrences (this is similar to the regular expression
functions in regex).

The definition of what string.splitfields(anything, '') should return
is changed for the last time: it returns a singleton list containing
its whole first argument unchanged.  This is compatible with
regsub.split() which also ignores empty delimiter matches.

posixpath, macpath: added dirname() and normpath() (and basename() to
macpath).

The mainloop module (for use with stdwin) can now demultiplex input
from other sources, as long as they can be polled with select().


New built-in modules
--------------------

Module struct defines functions to pack/unpack values to/from strings
representing binary values in native byte order.

Module strop implements C versions of many functions from string (see
above).

Optional module fcntl defines interfaces to fcntl() and ioctl() --
UNIX only.  (Not yet properly documented -- see however src/fcntl.doc.)

Optional module mpz defines an interface to an altaernative long
integer implementation, the GNU MPZ library.

Optional module md5 uses the GNU MPZ library to calculate MD5
signatures of strings.

There are also optional new modules specific to SGI machines: imageop
defines some simple operations to images represented as strings; sv
interfaces to the Indigo video board; cl interfaces to the (yet
unreleased) compression library.


New standard library modules
----------------------------

(Unfortunately the following modules are not all documented; read the
sources to find out more about them!)

autotest: run testall without showing any output unless it differs
from the expected output

bisect: use bisection to insert or find an item in a sorted list

colorsys: defines conversions between various color systems (e.g. RGB
<-> YUV)

nntplib: a client interface to NNTP servers

pipes: utility to construct pipeline from templates, e.g. for
conversion from one file format to another using several utilities.

regsub: contains three functions that are more or less compatible with
awk functions of the same name: sub() and gsub() do string
substitution, split() splits a string using a regular expression to
define how separators are define.

test_types: test operations on the built-in types of Python

toaiff: convert various audio file formats to AIFF format

tzparse: parse the TZ environment parameter (this may be less general
than it could be, let me know if you fix it).

(Note that the obsolete module "path" no longer exists.)


New SGI-specific library modules
--------------------------------

CL: constants for use with the built-in compression library interface (cl)

Queue: a multi-producer, multi-consumer queue class implemented for
use with the built-in thread module

SOCKET: constants for use with built-in module socket, e.g. to set/get
socket options.  This is SGI-specific because the constants to be
passed are system-dependent.  You can generate a version for your own
system by running the script demo/scripts/h2py.py with
/usr/include/sys/socket.h as input.

cddb: interface to the database used by the CD player

torgb: convert various image file types to rgb format (requires pbmplus)


New demos
---------

There's an experimental interface to define Sun RPC clients and
servers in demo/rpc.

There's a collection of interfaces to WWW, WAIS and Gopher (both
Python classes and program providing a user interface) in demo/www.
This includes a program texi2html.py which converts texinfo files to
HTML files (the format used hy WWW).

The ibrowse demo has moved from demo/stdwin/ibrowse to demo/ibrowse.

For SGI systems, there's a whole collection of programs and classes
that make use of the Indigo video board in demo/sgi/{sv,video}.  This
represents a significant amount of work that we're giving away!

There are demos "rsa" and "md5test" that exercise the mpz and md5
modules, respectively.  The rsa demo is a complete implementation of
the RSA public-key cryptosystem!

A bunch of games and examples submitted by Stoffel Erasmus have been
included in demo/stoffel.

There are miscellaneous new files in some existing demo
subdirectories: classes/bitvec.py, scripts/{fixps,methfix}.py,
sgi/al/cmpaf.py, sockets/{mcast,gopher}.py.

There are also many minor changes to existing files, but I'm too lazy
to run a diff and note the differences -- you can do this yourself if
you save the old distribution's demos.  One highlight: the
stdwin/python.py demo is much improved!


Changes to the documentation
----------------------------

The LaTeX source for the library uses different macros to enable it to
be converted to texinfo, and from there to INFO or HTML format so it
can be browsed as a hypertext.  The net result is that you can now
read the Python library documentation in Emacs info mode!


Changes to the source code that affect C extension writers
----------------------------------------------------------

The function strdup() no longer exists (it was used only in one places
and is somewhat of a portability problem since some systems have the
same function in their C library.

The functions NEW() and RENEW() allocate one spare byte to guard
against a NULL return from malloc(0) being taken for an error, but
this should not be relied upon.


=========================
==> Release 0.9.7beta <==
=========================


Changes to the language proper
------------------------------

User-defined classes can now implement operations invoked through
special syntax, such as x[i] or `x` by defining methods named
__getitem__(self, i) or __repr__(self), etc.


Changes to the build process
----------------------------

Instead of extensive manual editing of the Makefile to select
compile-time options, you can now run a Configure.py script.
The Makefile as distributed builds a minimal interpreter sufficient to
run Configure.py.  See also misc/BUILD

The Makefile now includes more "utility" targets, e.g. install and
tags/TAGS

Using the provided strtod.c and strtol.c are now separate options, as
on the Sun the provided strtod.c dumps core :-(

The regex module is now an option chosen by the Makefile, since some
(old) C compilers choke on regexpr.c


Changes affecting portability
-----------------------------

You need STDWIN version 0.9.7 (released 30 June 1992) for the stdwin
interface

Dynamic loading is now supported for Sun (and other non-COFF systems)
through dld-3.2.3, as well as for SGI (a new version of Jack Jansen's
DL is out, 1.4)

The system-dependent code for the use of the select() system call is
moved to one file: myselect.h

Thanks to Jaap Vermeulen, the code should now port cleanly to the
SEQUENT


Changes to the interpreter interface
------------------------------------

The interpretation of $PYTHONPATH in the environment is different: it
is inserted in front of the default path instead of overriding it


Changes to existing built-in functions and methods
--------------------------------------------------

List objects now support an optional argument to their sort() method,
which is a comparison function similar to qsort(3) in C

File objects now have a method fileno(), used by the new select module
(see below)


New built-in function
---------------------

coerce(x, y): take two numbers and return a tuple containing them
both converted to a common type


Changes to built-in modules
---------------------------

sys: fixed core dumps in settrace() and setprofile()

socket: added socket methods setsockopt() and getsockopt(); and
fileno(), used by the new select module (see below)

stdwin: added fileno() == connectionnumber(), in support of new module
select (see below)

posix: added get{eg,eu,g,u}id(); waitpid() is now a separate function.

gl: added qgetfd()

fl: added several new functions, fixed several obscure bugs, adapted
to FORMS 2.1


Changes to standard modules
---------------------------

posixpath: changed implementation of ismount()

string: atoi() no longer mistakes leading zero for octal number

...


New built-in modules
--------------------

Modules marked "dynamic only" are not configured at compile time but
can be loaded dynamically.  You need to turn on the DL or DLD option in
the Makefile for support dynamic loading of modules (this requires
external code).

select: interfaces to the BSD select() system call

dbm: interfaces to the (new) dbm library (dynamic only)

nis: interfaces to some NIS functions (aka yellow pages)

thread: limited form of multiple threads (sgi only)

audioop: operations useful for audio programs, e.g. u-LAW and ADPCM
coding (dynamic only)

cd: interface to Indigo SCSI CDROM player audio library (sgi only)

jpeg: read files in JPEG format (dynamic only, sgi only; needs
external code)

imgfile: read SGI image files (dynamic only, sgi only)

sunaudiodev: interface to sun's /dev/audio (dynamic only, sun only)

sv: interface to Indigo video library (sgi only)

pc: a minimal set of MS-DOS interfaces (MS-DOS only)

rotor: encryption, by Lance Ellinghouse (dynamic only)


New standard modules
--------------------

Not all these modules are documented.  Read the source:
lib/<modulename>.py.  Sometimes a file lib/<modulename>.doc contains
additional documentation.

imghdr: recognizes image file headers

sndhdr: recognizes sound file headers

profile: print run-time statistics of Python code

readcd, cdplayer: companion modules for built-in module cd (sgi only)

emacs: interface to Emacs using py-connect.el (see below).

SOCKET: symbolic constant definitions for socket options

SUNAUDIODEV: symbolic constant definitions for sunaudiodef (sun only)

SV: symbolic constant definitions for sv (sgi only)

CD: symbolic constant definitions for cd (sgi only)


New demos
---------

scripts/pp.py: execute Python as a filter with a Perl-like command
line interface

classes/: examples using the new class features

threads/: examples using the new thread module

sgi/cd/: examples using the new cd module


Changes to the documentation
----------------------------

The last-minute syntax changes of release 0.9.6 are now reflected
everywhere in the manuals

The reference manual has a new section (3.2) on implementing new kinds
of numbers, sequences or mappings with user classes

Classes are now treated extensively in the tutorial (chapter 9)

Slightly restructured the system-dependent chapters of the library
manual

The file misc/EXTENDING incorporates documentation for mkvalue() and
a new section on error handling

The files misc/CLASSES and misc/ERRORS are no longer necessary

The doc/Makefile now creates PostScript files automatically


Miscellaneous changes
---------------------

Incorporated Tim Peters' changes to python-mode.el, it's now version
1.06

A python/Emacs bridge (provided by Terrence M. Brannon) lets a Python
program running in an Emacs buffer execute Emacs lisp code.  The
necessary Python code is in lib/emacs.py.  The Emacs code is
misc/py-connect.el (it needs some external Emacs lisp code)


Changes to the source code that affect C extension writers
----------------------------------------------------------

New service function mkvalue() to construct a Python object from C
values according to a "format" string a la getargs()

Most functions from pythonmain.c moved to new pythonrun.c which is
in libpython.a.  This should make embedded versions of Python easier

ceval.h is split in eval.h (which needs compile.h and only declares
eval_code) and ceval.h (which doesn't need compile.hand declares the
rest)

ceval.h defines macros BGN_SAVE / END_SAVE for use with threads (to
improve the parallelism of multi-threaded programs by letting other
Python code run when a blocking system call or something similar is
made)

In structmember.[ch], new member types BYTE, CHAR and unsigned
variants have been added

New file xxmodule.c is a template for new extension modules.


==================================
==> Release 0.9.6 (6 Apr 1992) <==
==================================

Misc news in 0.9.6:
- Restructured the misc subdirectory
- Reference manual completed, library manual much extended (with indexes!)
- the GNU Readline library is now distributed standard with Python
- the script "../demo/scripts/classfix.py" fixes Python modules using old
  class syntax
- Emacs python-mode.el (was python.el) vastly improved (thanks, Tim!)
- Because of the GNU copyleft business I am not using the GNU regular
  expression implementation but a free re-implementation by Tatu Ylonen
  that recently appeared in comp.sources.misc (Bravo, Tatu!)

New features in 0.9.6:
- stricter try stmt syntax: cannot mix except and finally clauses on 1 try
- New module 'os' supplants modules 'mac' and 'posix' for most cases;
  module 'path' is replaced by 'os.path'
- os.path.split() return value differs from that of old path.split()
- sys.exc_type, sys.exc_value, sys.exc_traceback are set to the exception
  currently being handled
- sys.last_type, sys.last_value, sys.last_traceback remember last unhandled
  exception
- New function string.expandtabs() expands tabs in a string
- Added times() interface to posix (user & sys time of process & children)
- Added uname() interface to posix (returns OS type, hostname, etc.)
- New built-in function execfile() is like exec() but from a file
- Functions exec() and eval() are less picky about whitespace/newlines
- New built-in functions getattr() and setattr() access arbitrary attributes
- More generic argument handling in built-in functions (see "./EXTENDING")
- Dynamic loading of modules written in C or C++ (see "./DYNLOAD")
- Division and modulo for long and plain integers with negative operands
  have changed; a/b is now floor(float(a)/float(b)) and a%b is defined
  as a-(a/b)*b.  So now the outcome of divmod(a,b) is the same as
  (a/b, a%b) for integers.  For floats, % is also changed, but of course
  / is unchanged, and divmod(x,y) does not yield (x/y, x%y)...
- A function with explicit variable-length argument list can be declared
  like this: def f(*args): ...; or even like this: def f(a, b, *rest): ...
- Code tracing and profiling features have been added, and two source
  code debuggers are provided in the library (pdb.py, tty-oriented,
  and wdb, window-oriented); you can now step through Python programs!
  See sys.settrace() and sys.setprofile(), and "../lib/pdb.doc"
- '==' is now the only equality operator; "../demo/scripts/eqfix.py" is
  a script that fixes old Python modules
- Plain integer right shift now uses sign extension
- Long integer shift/mask operations now simulate 2's complement
  to give more useful results for negative operands
- Changed/added range checks for long/plain integer shifts
- Options found after "-c command" are now passed to the command in sys.argv
  (note subtle incompatibility with "python -c command -- -options"!)
- Module stdwin is better protected against touching objects after they've
  been closed; menus can now also be closed explicitly
- Stdwin now uses its own exception (stdwin.error)

New features in 0.9.5 (released as Macintosh application only, 2 Jan 1992):
- dictionary objects can now be compared properly; e.g., {}=={} is true
- new exception SystemExit causes termination if not caught;
  it is raised by sys.exit() so that 'finally' clauses can clean up,
  and it may even be caught.  It does work interactively!
- new module "regex" implements GNU Emacs style regular expressions;
  module "regexp" is rewritten in Python for backward compatibility
- formal parameter lists may contain trailing commas

Bugs fixed in 0.9.6:
- assigning to or deleting a list item with a negative index dumped core
- divmod(-10L,5L) returned (-3L, 5L) instead of (-2L, 0L)

Bugs fixed in 0.9.5:
- masking operations involving negative long integers gave wrong results


===================================
==> Release 0.9.4 (24 Dec 1991) <==
===================================

- new function argument handling (see below)
- built-in apply(func, args) means func(args[0], args[1], ...)
- new, more refined exceptions
- new exception string values (NameError = 'NameError' etc.)
- better checking for math exceptions
- for sequences (string/tuple/list), x[-i] is now equivalent to x[len(x)-i]
- fixed list assignment bug: "a[1:1] = a" now works correctly
- new class syntax, without extraneous parentheses
- new 'global' statement to assign global variables from within a function


New class syntax
----------------

You can now declare a base class as follows:

	class B:			# Was: class B():
		def some_method(self): ...
		...

and a derived class thusly:

	class D(B):			# Was: class D() = B():
		def another_method(self, arg): ...

Multiple inheritance looks like this:

	class M(B, D):			# Was: class M() = B(), D():
		def this_or_that_method(self, arg): ...

The old syntax is still accepted by Python 0.9.4, but will disappear
in Python 1.0 (to be posted to comp.sources).


New 'global' statement
----------------------

Every now and then you have a global variable in a module that you
want to change from within a function in that module -- say, a count
of calls to a function, or an option flag, etc.  Until now this was
not directly possible.  While several kludges are known that
circumvent the problem, and often the need for a global variable can
be avoided by rewriting the module as a class, this does not always
lead to clearer code.

The 'global' statement solves this dilemma.  Its occurrence in a
function body means that, for the duration of that function, the
names listed there refer to global variables.  For instance:

	total = 0.0
	count = 0

	def add_to_total(amount):
		global total, count
		total = total + amount
		count = count + 1

'global' must be repeated in each function where it is needed.  The
names listed in a 'global' statement must not be used in the function
before the statement is reached.

Remember that you don't need to use 'global' if you only want to *use*
a global variable in a function; nor do you need to for assignments to
parts of global variables (e.g., list or dictionary items or
attributes of class instances).  This has not changed; in fact
assignment to part of a global variable was the standard workaround.


New exceptions
--------------

Several new exceptions have been defined, to distinguish more clearly
between different types of errors.

name			meaning					was

AttributeError		reference to non-existing attribute	NameError
IOError			unexpected I/O error			RuntimeError
ImportError		import of non-existing module or name	NameError
IndexError		invalid string, tuple or list index	RuntimeError
KeyError		key not in dictionary			RuntimeError
OverflowError		numeric overflow			RuntimeError
SyntaxError		invalid syntax				RuntimeError
ValueError		invalid argument value			RuntimeError
ZeroDivisionError	division by zero			RuntimeError

The string value of each exception is now its name -- this makes it
easier to experimentally find out which operations raise which
exceptions; e.g.:

	>>> KeyboardInterrupt
	'KeyboardInterrupt'
	>>>


New argument passing semantics
------------------------------

Off-line discussions with Steve Majewski and Daniel LaLiberte have
convinced me that Python's parameter mechanism could be changed in a
way that made both of them happy (I hope), kept me happy, fixed a
number of outstanding problems, and, given some backward compatibility
provisions, would only break a very small amount of existing code --
probably all mine anyway.  In fact I suspect that most Python users
will hardly notice the difference.  And yet it has cost me at least
one sleepless night to decide to make the change...

Philosophically, the change is quite radical (to me, anyway): a
function is no longer called with either zero or one argument, which
is a tuple if there appear to be more arguments.  Every function now
has an argument list containing 0, 1 or more arguments.  This list is
always implemented as a tuple, and it is a (run-time) error if a
function is called with a different number of arguments than expected.

What's the difference? you may ask.  The answer is, very little unless
you want to write variadic functions -- functions that may be called
with a variable number of arguments.  Formerly, you could write a
function that accepted one or more arguments with little trouble, but
writing a function that could be called with either 0 or 1 argument
(or more) was next to impossible.  This is now a piece of cake: you
can simply declare an argument that receives the entire argument
tuple, and check its length -- it will be of size 0 if there are no
arguments.

Another anomaly of the old system was the way multi-argument methods
(in classes) had to be declared, e.g.:

	class Point():
		def init(self, (x, y, color)): ...
		def setcolor(self, color): ...
		dev moveto(self, (x, y)): ...
		def draw(self): ...

Using the new scheme there is no need to enclose the method arguments
in an extra set of parentheses, so the above class could become:

	class Point:
		def init(self, x, y, color): ...
		def setcolor(self, color): ...
		dev moveto(self, x, y): ...
		def draw(self): ...

That is, the equivalence rule between methods and functions has
changed so that now p.moveto(x,y) is equivalent to Point.moveto(p,x,y)
while formerly it was equivalent to Point.moveto(p,(x,y)).

A special backward compatibility rule makes that the old version also
still works: whenever a function with exactly two arguments (at the top
level) is called with more than two arguments, the second and further
arguments are packed into a tuple and passed as the second argument.
This rule is invoked independently of whether the function is actually a
method, so there is a slight chance that some erroneous calls of
functions expecting two arguments with more than that number of
arguments go undetected at first -- when the function tries to use the
second argument it may find it is a tuple instead of what was expected.
Note that this rule will be removed from future versions of the
language; it is a backward compatibility provision *only*.

Two other rules and a new built-in function handle conversion between
tuples and argument lists:

Rule (a): when a function with more than one argument is called with a
single argument that is a tuple of the right size, the tuple's items
are used as arguments.

Rule (b): when a function with exactly one argument receives no
arguments or more than one, that one argument will receive a tuple
containing the arguments (the tuple will be empty if there were no
arguments).


A new built-in function, apply(), was added to support functions that
need to call other functions with a constructed argument list.  The call

	apply(function, tuple)

is equivalent to

	function(tuple[0], tuple[1], ..., tuple[len(tuple)-1])


While no new argument syntax was added in this phase, it would now be
quite sensible to add explicit syntax to Python for default argument
values (as in C++ or Modula-3), or a "rest" argument to receive the
remaining arguments of a variable-length argument list.


========================================================
==> Release 0.9.3 (never made available outside CWI) <==
========================================================

- string sys.version shows current version (also printed on interactive entry)
- more detailed exceptions, e.g., IOError, ZeroDivisionError, etc.
- 'global' statement to declare module-global variables assigned in functions.
- new class declaration syntax: class C(Base1, Base2, ...): suite
  (the old syntax is still accepted -- be sure to convert your classes now!)
- C shifting and masking operators: << >> ~ & ^ | (for ints and longs).
- C comparison operators: == != (the old = and <> remain valid).
- floating point numbers may now start with a period (e.g., .14).
- definition of integer division tightened (always truncates towards zero).
- new builtins hex(x), oct(x) return hex/octal string from (long) integer.
- new list method l.count(x) returns the number of occurrences of x in l.
- new SGI module: al (Indigo and 4D/35 audio library).
- the FORMS interface (modules fl and FL) now uses FORMS 2.0
- module gl: added lrect{read,write}, rectzoom and pixmode;
  added (non-GL) functions (un)packrect.
- new socket method: s.allowbroadcast(flag).
- many objects support __dict__, __methods__ or __members__.
- dir() lists anything that has __dict__.
- class attributes are no longer read-only.
- classes support __bases__, instances support __class__ (and __dict__).
- divmod() now also works for floats.
- fixed obscure bug in eval('1            ').


===================================
==> Release 0.9.2 (Autumn 1991) <==
===================================

Highlights
----------

- tutorial now (almost) complete; library reference reorganized
- new syntax: continue statement; semicolons; dictionary constructors;
  restrictions on blank lines in source files removed
- dramatically improved module load time through precompiled modules
- arbitrary precision integers: compute 2 to the power 1000 and more...
- arithmetic operators now accept mixed type operands, e.g., 3.14/4
- more operations on list: remove, index, reverse; repetition
- improved/new file operations: readlines, seek, tell, flush, ...
- process management added to the posix module: fork/exec/wait/kill etc.
- BSD socket operations (with example servers and clients!)
- many new STDWIN features (color, fonts, polygons, ...)
- new SGI modules: font manager and FORMS library interface


Extended list of changes in 0.9.2
---------------------------------

Here is a summary of the most important user-visible changes in 0.9.2,
in somewhat arbitrary order.  Changes in later versions are listed in
the "highlights" section above.


1. Changes to the interpreter proper

- Simple statements can now be separated by semicolons.
  If you write "if t: s1; s2", both s1 and s2 are executed
  conditionally.
- The 'continue' statement was added, with semantics as in C.
- Dictionary displays are now allowed on input: {key: value, ...}.
- Blank lines and lines bearing only a comment no longer need to
  be indented properly.  (A completely empty line still ends a multi-
  line statement interactively.)
- Mixed arithmetic is supported, 1 compares equal to 1.0, etc.
- Option "-c command" to execute statements from the command line
- Compiled versions of modules are cached in ".pyc" files, giving a
  dramatic improvement of start-up time
- Other, smaller speed improvements, e.g., extracting characters from
  strings, looking up single-character keys, and looking up global
  variables
- Interrupting a print operation raises KeyboardInterrupt instead of
  only cancelling the print operation
- Fixed various portability problems (it now passes gcc with only
  warnings -- more Standard C compatibility will be provided in later
  versions)
- Source is prepared for porting to MS-DOS
- Numeric constants are now checked for overflow (this requires
  standard-conforming strtol() and strtod() functions; a correct
  strtol() implementation is provided, but the strtod() provided
  relies on atof() for everything, including error checking


2. Changes to the built-in types, functions and modules

- New module socket: interface to BSD socket primitives
- New modules pwd and grp: access the UNIX password and group databases
- (SGI only:) New module "fm" interfaces to the SGI IRIX Font Manager
- (SGI only:) New module "fl" interfaces to Mark Overmars' FORMS library
- New numeric type: long integer, for unlimited precision
	- integer constants suffixed with 'L' or 'l' are long integers
	- new built-in function long(x) converts int or float to long
	- int() and float() now also convert from long integers
- New built-in function:
	- pow(x, y) returns x to the power y
- New operation and methods for lists:
	- l*n returns a new list consisting of n concatenated copies of l
	- l.remove(x) removes the first occurrence of the value x from l
	- l.index(x) returns the index of the first occurrence of x in l
	- l.reverse() reverses l in place
- New operation for tuples:
	- t*n returns a tuple consisting of n concatenated copies of t
- Improved file handling:
	- f.readline() no longer restricts the line length, is faster,
	  and isn't confused by null bytes; same for raw_input()
	- f.read() without arguments reads the entire (rest of the) file
	- mixing of print and sys.stdout.write() has different effect
- New methods for files:
	- f.readlines() returns a list containing the lines of the file,
	  as read with f.readline()
	- f.flush(), f.tell(), f.seek() call their stdio counterparts
	- f.isatty() tests for "tty-ness"
- New posix functions:
	- _exit(), exec(), fork(), getpid(), getppid(), kill(), wait()
	- popen() returns a file object connected to a pipe
	- utime() replaces utimes() (the latter is not a POSIX name)
- New stdwin features, including:
	- font handling
	- color drawing
	- scroll bars made optional
	- polygons
	- filled and xor shapes
	- text editing objects now have a 'settext' method


3. Changes to the standard library

- Name change: the functions path.cat and macpath.cat are now called
  path.join and macpath.join
- Added new modules: formatter, mutex, persist, sched, mainloop
- Added some modules and functionality to the "widget set" (which is
  still under development, so please bear with me):
	DirList, FormSplit, TextEdit, WindowSched
- Fixed module testall to work non-interactively
- Module string:
	- added functions join() and joinfields()
	- fixed center() to work correct and make it "transitive"
- Obsolete modules were removed: util, minmax
- Some modules were moved to the demo directory


4. Changes to the demonstration programs

- Added new useful scripts: byteyears, eptags, fact, from, lfact,
  objgraph, pdeps, pi, primes, ptags, which
- Added a bunch of socket demos
- Doubled the speed of ptags
- Added new stdwin demos: microedit, miniedit
- Added a windowing interface to the Python interpreter: python (most
  useful on the Mac)
- Added a browser for Emacs info files: demo/stdwin/ibrowse
  (yes, I plan to put all STDWIN and Python documentation in texinfo
  form in the future)


5. Other changes to the distribution

- An Emacs Lisp file "python.el" is provided to facilitate editing
  Python programs in GNU Emacs (slightly improved since posted to
  gnu.emacs.sources)
- Some info on writing an extension in C is provided
- Some info on building Python on non-UNIX platforms is provided


=====================================
==> Release 0.9.1 (February 1991) <==
=====================================

- Micro changes only
- Added file "patchlevel.h"


=====================================
==> Release 0.9.0 (February 1991) <==
=====================================

Original posting to alt.sources.
