diff --git a/Misc/HISTORY b/Misc/HISTORY index 4e104692a93..50a6749eb09 100644 --- a/Misc/HISTORY +++ b/Misc/HISTORY @@ -1,4 +1,4 @@ -Python history +Python History -------------- This file contains the release messages for previous Python releases. @@ -8,6 +8,310 @@ As you read on you go back to the dark ages of Python's history. ====================================================================== +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://starship.python.net/crew/amk/python/writing/new-python/. + +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 +build-in function unicode(), an 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.: 'Spam' instance has no attribute 'eggs'. This may +break code 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 dependance. (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 IDLE home +page 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 .writelines() with a +list containing non-string objects would crash, and there were +situations where a lost SyntaxError could dump core. + +- The .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. + + +====================================================================== + + From 1.5.2c1 to 1.5.2 (final) =============================