diff options
author | Skip Montanaro <skip@pobox.com> | 2002-09-17 20:55:31 (GMT) |
---|---|---|
committer | Skip Montanaro <skip@pobox.com> | 2002-09-17 20:55:31 (GMT) |
commit | 4cb22048515deb55fdf46775400da9c841706248 (patch) | |
tree | 51a101379dbd4aa4a9444a460adaa8e32d0d8922 | |
parent | 16aac45fc269ad355f069d5f76a0f4cafd06063f (diff) | |
download | cpython-4cb22048515deb55fdf46775400da9c841706248.zip cpython-4cb22048515deb55fdf46775400da9c841706248.tar.gz cpython-4cb22048515deb55fdf46775400da9c841706248.tar.bz2 |
migrate news about 2.1 and earlier releases from NEWS to HISTORY in
preparation for ReST-ification of NEWS. (Also tests checkin ability
from my new Powerbook. woohoo!)
-rw-r--r-- | Misc/HISTORY | 1822 | ||||
-rw-r--r-- | Misc/NEWS | 1825 |
2 files changed, 1822 insertions, 1825 deletions
diff --git a/Misc/HISTORY b/Misc/HISTORY index 242cca2..329d0b3 100644 --- a/Misc/HISTORY +++ b/Misc/HISTORY @@ -8,6 +8,1828 @@ As you read on you go back to the dark ages of Python's history. ====================================================================== +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 an 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 builtin 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 + builtin 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 an 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://starship.python.net/crew/amk/python/writing/new-python/. + +--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 builtin + 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 Misc/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) <== ======================================= @@ -2022,1828 +2022,3 @@ 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 an 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 builtin 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 - builtin 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 an 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://starship.python.net/crew/amk/python/writing/new-python/. - ---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 builtin - 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 Misc/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/ - - -====================================================================== |