Python history -------------- This file contains the release messages for previous Python releases (slightly edited to adapt them to the format of this file). As you read on you go back to the dark ages of Python's history. ===================================== ==> Release 1.4 (October 25 1996) <== ===================================== (Starting in reverse chronological order:) - Changed disclaimer notice. - Added SHELL=/bin/sh to Misc/Makefile.pre.in -- some Make versions default to the user's login shell. - In Lib/tkinter/Tkinter.py, removed bogus binding of in Text widget, and bogus bspace() function. - In Lib/cgi.py, bumped __version__ to 2.0 and restored a truncated paragraph. - Fixed the NT Makefile (PC/vc40.mak) for VC 4.0 to set /MD for all subprojects, and to remove the (broken) experimental NumPy subprojects. - In Lib/py_compile.py, cast mtime to long() so it will work on Mac (where os.stat() returns mtimes as floats.) - Set self.rfile unbuffered (like self.wfile) in SocketServer.py, to fix POST in CGIHTTPServer.py. - Version 2.83 of Misc/python-mode.el for Emacs is included. - In Modules/regexmodule.c, fixed symcomp() to correctly handle a new group starting immediately after a group tag. - In Lib/SocketServer.py, changed the mode for rfile to unbuffered. - In Objects/stringobject.c, fixed the compare function to do the first char comparison in unsigned mode, for consistency with the way other characters are compared by memcmp(). - In Lib/tkinter/Tkinter.py, fixed Scale.get() to support floats. - In Lib/urllib.py, fix another case where openedurl wasn't set. (XXX Sorry, the rest is in totally random order. No time to fix it.) - SyntaxError exceptions detected during code generation (e.g. assignment to an expression) now include a line number. - Don't leave trailing / or \ in script directory inserted in front of sys.path. - Added a note to Tools/scripts/classfix.py abouts its historical importance. - Added Misc/Makefile.pre.in, a universal Makefile for extensions built outside the distribution. - Rewritten Misc/faq2html.py, by Ka-Ping Yee. - Install shared modules with mode 555 (needed for performance on some platforms). - Some changes to standard library modules to avoid calling append() with more than one argument -- while supported, this should be outlawed, and I don't want to set a bad example. - bdb.py (and hence pdb.py) supports calling run() with a code object instead of a code string. - Fixed an embarrassing bug cgi.py which prevented correct uploading of binary files from Netscape (which doesn't distinguish between binary and text files). Also added dormant logging support, which makes it easier to debug the cgi module itself. - Added default writer to constructor of NullFormatter class. - Use binary mode for socket.makefile() calls in ftplib.py. - The ihooks module no longer "installs" itself upon import -- this was an experimental feature that helped ironing out some bugs but that slowed down code that imported it without the need to install it (e.g. the rexec module). Also close the file in some cases and add the __file__ attribute to loaded modules. - The test program for mailbox.py is now more useful. - Added getparamnames() to Message class in mimetools.py -- it returns the names of parameters to the content-type header. - Fixed a typo in ni that broke the loop stripping "__." from names. - Fix sys.path[0] for scripts run via pdb.py's new main program. - profile.py can now also run a script, like pdb. - Fix a small bug in pyclbr -- don't add names starting with _ when emulating from ... import *. - Fixed a series of embarrassing typos in rexec's handling of standard I/O redirection. Added some more "safe" built-in modules: cmath, errno, operator. - Fixed embarrassing typo in shelve.py. - Added SliceType and EllipsisType to types.py. - In urllib.py, added handling for error 301 (same as 302); added geturl() method to get the URL after redirection. - Fixed embarrassing typo in xdrlib.py. Also fixed typo in Setup.in for _xdrmodule.c and removed redundant #include from _xdrmodule.c. - Fixed bsddbmodule.c to add binary mode indicator on platforms that have it. This should make it working on Windows NT. - Changed last uses of #ifdef NT to #ifdef MS_WINDOWS or MS_WIN32, whatever applies. Also rationalized some other tests for various MS platforms. - Added the sources for the NT installer script used for Python 1.4beta3. Not tested with this release, but better than nothing. - A compromise in pickle's defenses against Trojan horses: a user-defined function is now okay where a class is expected. A built-in function is not okay, to prevent pickling something that will execute os.system("rm -f *") when unpickling. - dis.py will print the name of local variables referenced by local load/store/delete instructions. - Improved portability of SimpleHTTPServer module to non-Unix platform. - The thread.h interface adds an extra argument to down_sema(). This only affects other C code that uses thread.c; the Python thread module doesn't use semaphores (which aren't provided on all platforms where Python threads are supported). Note: on NT, this change is not implemented. - Fixed some typos in abstract.h; corrected signature of PyNumber_Coerce, added PyMapping_DelItem. Also fixed a bug in abstract.c's PyObject_CallMethod(). - apply(classname, (), {}) now works even if the class has no __init__() method. - Implemented complex remainder and divmod() (these would dump core!). Conversion of complex numbers to int, long int or float now raises an exception, since there is no meaningful way to do it without losing information. - Fixed bug in built-in complex() function which gave the wrong result for two real arguments. - Change the hash algorithm for strings -- the multiplier is now 1000003 instead of 3, which gives better spread for short strings. - New default path for Windows NT, the registry structure now supports default paths for different install packages. (Mark Hammond -- the next PythonWin release will use this.) - Added more symbols to the python_nt.def file. - When using GNU readline, set rl_readline_name to "python". - The Ellipses built-in name has been renamed to Ellipsis -- this is the correct singular form. Thanks to Ka-Ping Yee, who saved us from eternal embarrassment. - Bumped the PYTHON_API_VERSION to 1006, due to the Ellipses -> Ellipsis name change. - Updated the library reference manual. Added documentation of restricted mode (rexec, Bastion) and the formatter module (for use with the htmllib module). Fixed the documentation of htmllib (finally). - The reference manual is now maintained in FrameMaker. - Upgraded scripts Doc/partparse.py and Doc/texi2html.py. - Slight improvements to Doc/Makefile. - Added fcntl.lockf(). This should be used for Unix file locking instead of the posixfile module; lockf() is more portable. - The getopt module now supports long option names, thanks to Lars Wizenius. - Plenty of changes to Tkinter and Canvas, mostly due to Fred Drake and Nils Fischbeck. - Use more bits of time.time() in whrandom's default seed(). - Performance hack for regex module's regs attribute. - Don't close already closed socket in socket module. - Correctly handle separators containing embedded nulls in strop.split, strop.find and strop.rfind. Also added more detail to error message for strop.atoi and friends. - Moved fallback definition for hypot() to Python/hypot.c. - Added fallback definition for strdup, in Python/strdup.c. - Fixed some bugs where a function would return 0 to indicate an error where it should return -1. - Test for error returned by time.localtime(), and rationalized its MS tests. - Added Modules/Setup.local file, which is processed after Setup. - Corrected bug in toplevel Makefile.in -- execution of regen script would not use the right PATH and PYTHONPATH. - Various and sundry NeXT configuration changes (sigh). - Support systems where libreadline needs neither termcap nor curses. - Improved ld_so_aix script and python.exp file (for AIX). - More stringent test for working in configure script. - Removed Demo/www subdirectory -- it was totally out of date. - Improved demos and docs for Fred Drake's parser module; fixed one typo in the module itself. ========================================= ==> Release 1.4beta3 (August 26 1996) <== ========================================= (XXX This is less readable that it should. I promise to restructure it for the final 1.4 release.) What's new in 1.4beta3 (since beta2)? ------------------------------------- - Name mangling to implement a simple form of class-private variables. A name of the form "__spam" can't easily be used outside the class. (This was added in 1.4beta3, but left out of the 1.4beta3 release message.) - In urllib.urlopen(): HTTP URLs containing user:passwd@host are now handled correctly when using a proxy server. - In ntpath.normpath(): don't truncate to 8+3 format. - In mimetools.choose_boundary(): don't die when getuid() or getpid() aren't defined. - Module urllib: some optimizations to (un)quoting. - New module MimeWriter for writing MIME documents. - More changes to formatter module. - The freeze script works once again and is much more robust (using sys.prefix etc.). It also supports a -o option to specify an output directory. - New module whichdb recognizes dbm, gdbm and bsddb/dbhash files. - The Doc/Makefile targets have been reorganized somewhat to remove the insistence on always generating PostScript. - The texinfo to html filter (Doc/texi2html.py) has been improved somewhat. - "errors.h" has been renamed to "pyerrors.h" to resolve a long-standing name conflict on the Mac. - Linking a module compiled with a different setting for Py_TRACE_REFS now generates a linker error rather than a core dump. - The cgi module has a new convenience function print_exception(), which formats a python exception using HTML. It also fixes a bug in the compatibility code and adds a dubious feature which makes it possible to have two query strings, one in the URL and one in the POST data. - A subtle change in the unpickling of class instances makes it possible to unpickle in restricted execution mode, where the __dict__ attribute is not available (but setattr() is). - Documentation for os.path.splitext() (== posixpath.splitext()) has been cleared up. It splits at the *last* dot. - posixfile locking is now also correctly supported on AIX. - The tempfile module once again honors an initial setting of tmpdir. It now works on Windows, too. - The traceback module has some new functions to extract, format and print the active stack. - Some translation functions in the urllib module have been made a little less sluggish. - The addtag_* methods for Canvas widgets in Tkinter as well as in the separate Canvas class have been fixed so they actually do something meaningful. - A tiny _test() function has been added to Tkinter.py. - A generic Makefile for dynamically loaded modules is provided in the Misc subdirectory (Misc/gMakefile). - A new version of python-mode.el for Emacs is provided. See http://www.python.org/ftp/emacs/pmdetails.html for details. The separate file pyimenu.el is no longer needed, imenu support is folded into python-mode.el. - The configure script can finally correctly find the readline library in a non-standard location. The LDFLAGS variable is passed on the the Makefiles from the configure script. - Shared libraries are now installed as programs (i.e. with executable permission). This is required on HP-UX and won't hurt on other systems. - The objc.c module is no longer part of the distribution. Objective-C support may become available as contributed software on the ftp site. - The sybase module is no longer part of the distribution. A much improved sybase module is available as contributed software from the ftp site. - _tkinter is now compatible with Tcl 7.5 / Tk 4.1 patch1 on Windows and Mac (don't use unpatched Tcl/Tk!). The default line in the Setup.in file now links with Tcl 7.5 / Tk 4.1 rather than 7.4/4.0. - In Setup, you can now write "*shared*" instead of "*noconfig*", and you can use *.so and *.sl as shared libraries. - Some more fidgeting for AIX shared libraries. - The mpz module is now compatible with GMP 2.x. (Not tested by me.) (Note -- a complete replacement by Niels Mo"ller, called gpmodule, is available from the contrib directory on the ftp site.) - A warning is written to sys.stderr when a __del__ method raises an exception (formerly, such exceptions were completely ignored). - The configure script now defines HAVE_OLD_CPP if the C preprocessor is incapable of ANSI style token concatenation and stringification. - All source files (except a few platform specific modules) are once again compatible with K&R C compilers as well as ANSI compilers. In particular, ANSI-isms have been removed or made conditional in complexobject.c, getargs.c and operator.c. - The abstract object API has three new functions, PyObject_DelItem, PySequence_DelItem, and PySequence_DelSlice. - The operator module has new functions delitem and delslice, and the functions "or" and "and" are renamed to "or_" and "and_" (since "or" and "and" are reserved words). ("__or__" and "__and__" are unchanged.) - The environment module is no longer supported; putenv() is now a function in posixmodule (also under NT). - Error in filter(, "") has been fixed. - Unrecognized keyword arguments raise TypeError, not KeyError. - Better portability, fewer bugs and memory leaks, fewer compiler warnings, some more documentation. - Bug in float power boundary case (0.0 to the negative integer power) fixed. - The test of negative number to the float power has been moved from the built-in pow() functin to floatobject.c (so complex numbers can yield the correct result). - The bug introduced in beta2 where shared libraries loaded (using dlopen()) from the current directory would fail, has been fixed. - Modules imported as shared libraries now also have a __file__ attribute, giving the filename from which they were loaded. The only modules without a __file__ attribute now are built-in modules. - On the Mac, dynamically loaded modules can end in either ".slb" or "..slb" where is either "CFM68K" or "ppc". The ".slb" extension should only be used for "fat" binaries. - C API addition: marshal.c now supports PyMarshal_WriteObjectToString(object). - C API addition: getargs.c now supports PyArg_ParseTupleAndKeywords(args, kwdict, format, kwnames, ...) to parse keyword arguments. - The PC versioning scheme (sys.winver) has changed once again. the version number is now "...", where the first three s are the Python version (e.g. "1.4.0" for Python 1.4, "1.4.1" for Python 1.4.1 -- the beta level is not included) and is the four-digit PYTHON_API_VERSION (currently 1005). - h2py.py accepts whitespace before the # in CPP directives - On Solaris 2.5, it should now be possible to use either Posix threads or Solaris threads (XXX: how do you select which is used???). (Note: the Python pthreads interface doesn't fully support semaphores yet -- anyone care to fix this?) - Thread support should now work on AIX, using either DCE threads or pthreads. - New file Demo/sockets/unicast.py - Working Mac port, with CFM68K support, with Tk 4.1 support (though not both) (XXX) - New project setup for PC port, now compatible with PythonWin, with _tkinter and NumPy support (XXX) - New module site.py (XXX) - New module xdrlib.py and optional support module _xdrmodule.c (XXX) - parser module adapted to new grammar, complete w/ Doc & Demo (XXX) - regen script fixed (XXX) - new machdep subdirectories Lib/{aix3,aix4,next3_3,freebsd2,linux2} (XXX) - testall now also tests math module (XXX) - string.atoi c.s. now raise an exception for an empty input string. - At last, it is no longer necessary to define HAVE_CONFIG_H in order to have config.h included at various places. - Unrecognized keyword arguments now raise TypeError rather than KeyError. - The makesetup script recognizes files with extension .so or .sl as (shared) libraries. - 'access' is no longer a reserved word, and all code related to its implementation is gone (or at least #ifdef'ed out). This should make Python a little speedier too! - Performance enhancements suggested by Sjoerd Mullender. This includes the introduction of two new optional function pointers in type object, getattro and setattro, which are like getattr and setattr but take a string object instead of a C string pointer. - New operations in string module: lstrip(s) and rstrip(s) strip whitespace only on the left or only on the right, A new optional third argument to split() specifies the maximum number of separators honored (so splitfields(s, sep, n) returns a list of at most n+1 elements). (Since 1.3, splitfields(s, None) is totally equivalent to split(s).) string.capwords() has an optional second argument specifying the separator (which is passed to split()). - regsub.split() has the same addition as string.split(). regsub.splitx(s, sep, maxsep) implements the functionality that was regsub.split(s, 1) in 1.4beta2 (return a list containing the delimiters as well as the words). - Final touch for AIX loading, rewritten Misc/AIX-NOTES. - In Modules/_tkinter.c, when using Tk 4.1 or higher, use className argument to _tkinter.create() to set Tcl's argv0 variable, so X resources use the right resource class again. - Add #undef fabs to Modules/mathmodule.c for macintosh. - Added some macro renames for AIX in Modules/operator.c. - Removed spurious 'E' from Doc/liberrno.tex. - Got rid of some cruft in Misc/ (dlMakefile, pyimenu.el); added new Misc/gMakefile and new version of Misc/python-mode.el. - Fixed typo in Lib/ntpath.py (islink has "return false" which gives a NameError). - Added missing "from types import *" to Lib/tkinter/Canvas.py. - Added hint about using default args for __init__ to pickle docs. - Corrected typo in Inclide/abstract.h: PySequence_Lenth -> PySequence_Length. - Some improvements to Doc/texi2html.py. - In Python/import.c, Cast unsigned char * in struct _frozen to char * in calls to rds_object(). - In doc/ref4.tex, added note about scope of lambda bodies. What's new in 1.4beta2 (since beta1)? ------------------------------------- - Portability bug in the md5.h header solved. - The PC build procedure now really works, and sets sys.platform to a meaningful value (a few things were botched in beta 1). Lib/dos_8x3 is now a standard part of the distribution (alas). - More improvements to the installation procedure. Typing "make install" now inserts the version number in the pathnames of almost everything installed, and creates the machine dependent modules (FCNTL.py etc.) if not supplied by the distribution. (XXX There's still a problem with the latter because the "regen" script requires that Python is installed. Some manual intervention may still be required.) (This has been fixed in 1.4beta3.) - New modules: errno, operator (XXX). - Changes for use with Numerical Python: builtin function slice() and Ellipses object, and corresponding syntax: x[lo:hi:stride] == x[slice(lo, hi, stride)] x[a, ..., z] == x[(a, Ellipses, z)] - New documentation for errno and cgi mdoules. - The directory containing the script passed to the interpreter is inserted in from of sys.path; "." is no longer a default path component. - Optional third string argument to string.translate() specifies characters to delete. New function string.maketrans() creates a translation table for translate() or for regex.compile(). - Module posix (and hence module os under Unix) now supports putenv(). Moreover, module os is enhanced so that if putenv() is supported, assignments to os.environ entries make the appropriate putenv() call. (XXX the putenv() implementation can leak a small amount of memory per call.) - pdb.py can now be invoked from the command line to debug a script: python pdb.py