mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	Moved older news to HISTORY file
This commit is contained in:
		
							parent
							
								
									94ed6f5f63
								
							
						
					
					
						commit
						aa25386fc2
					
				
					 2 changed files with 659 additions and 655 deletions
				
			
		
							
								
								
									
										659
									
								
								Misc/HISTORY
									
										
									
									
									
								
							
							
						
						
									
										659
									
								
								Misc/HISTORY
									
										
									
									
									
								
							| 
						 | 
					@ -5,6 +5,663 @@ This file contains the release messages for previous Python releases
 | 
				
			||||||
(slightly edited to adapt them to the format of this file).  As you
 | 
					(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.
 | 
					read on you go back to the dark ages of Python's history.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					====================================
 | 
				
			||||||
 | 
					==> Release 1.0.3 (14 July 1994) <==
 | 
				
			||||||
 | 
					====================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This release consists entirely of bug fixes to the C sources; see the
 | 
				
			||||||
 | 
					head of ../ChangeLog for a complete list.  Most important bugs fixed:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Sometimes the format operator (string%expr) would drop the last
 | 
				
			||||||
 | 
					character of the format string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Tokenizer looped when last line did not end in \n
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Bug when triple-quoted string ended in quote plus newline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Typo in socketmodule (listen) (== instead of =)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- typing vars() at the >>> prompt would cause recursive output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					==================================
 | 
				
			||||||
 | 
					==> Release 1.0.2 (4 May 1994) <==
 | 
				
			||||||
 | 
					==================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Overview of the most visible changes.  Bug fixes are not listed.  See
 | 
				
			||||||
 | 
					also ChangeLog.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tokens
 | 
				
			||||||
 | 
					------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* String literals follow Standard C rules: they may be continued on
 | 
				
			||||||
 | 
					the next line using a backslash; adjacent literals are concatenated
 | 
				
			||||||
 | 
					at compile time.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* A new kind of string literals, surrounded by triple quotes (""" or
 | 
				
			||||||
 | 
					'''), can be continued on the next line without a backslash.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax
 | 
				
			||||||
 | 
					------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Function arguments may have a default value, e.g. def f(a, b=1);
 | 
				
			||||||
 | 
					defaults are evaluated at function definition time.  This also applies
 | 
				
			||||||
 | 
					to lambda.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The try-except statement has an optional else clause, which is
 | 
				
			||||||
 | 
					executed when no exception occurs in the try clause.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Interpreter
 | 
				
			||||||
 | 
					-----------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The result of a statement-level expression is no longer printed,
 | 
				
			||||||
 | 
					except_ for expressions entered interactively.  Consequently, the -k
 | 
				
			||||||
 | 
					command line option is gone.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The result of the last printed interactive expression is assigned to
 | 
				
			||||||
 | 
					the variable '_'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Access to implicit global variables has been speeded up by removing
 | 
				
			||||||
 | 
					an always-failing dictionary lookup in the dictionary of local
 | 
				
			||||||
 | 
					variables (mod suggested by Steve Makewski and Tim Peters).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There is a new command line option, -u, to force stdout and stderr
 | 
				
			||||||
 | 
					to be unbuffered.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Incorporated Steve Majewski's mods to import.c for dynamic loading
 | 
				
			||||||
 | 
					under AIX.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Fewer chances of dumping core when trying to reload or re-import
 | 
				
			||||||
 | 
					static built-in, dynamically loaded built-in, or frozen modules.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Loops over sequences now don't ask for the sequence's length when
 | 
				
			||||||
 | 
					they start, but try to access items 0, 1, 2, and so on until they hit
 | 
				
			||||||
 | 
					an IndexError.  This makes it possible to create classes that generate
 | 
				
			||||||
 | 
					infinite or indefinite sequences a la Steve Majewski.  This affects
 | 
				
			||||||
 | 
					for loops, the (not) in operator, and the built-in functions filter(),
 | 
				
			||||||
 | 
					map(), max(), min(), reduce().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Changed Built-in operations
 | 
				
			||||||
 | 
					---------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The '%' operator on strings (printf-style formatting) supports a new
 | 
				
			||||||
 | 
					feature (adapted from a patch by Donald Beaudry) to allow
 | 
				
			||||||
 | 
					'%(<key>)<format>' % {...} to take values from a dictionary by name
 | 
				
			||||||
 | 
					instead of from a tuple by position (see also the new function
 | 
				
			||||||
 | 
					vars()).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The '%s' formatting operator is changed to accept any type and
 | 
				
			||||||
 | 
					convert it to a string using str().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Dictionaries with more than 20,000 entries can now be created
 | 
				
			||||||
 | 
					(thanks to Steve Kirsch).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					New Built-in Functions
 | 
				
			||||||
 | 
					----------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* vars() returns a dictionary containing the local variables; vars(m)
 | 
				
			||||||
 | 
					returns a dictionary containing the variables of module m.  Note:
 | 
				
			||||||
 | 
					dir(x) is now equivalent to vars(x).keys().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Changed Built-in Functions
 | 
				
			||||||
 | 
					--------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* open() has an optional third argument to specify the buffer size: 0
 | 
				
			||||||
 | 
					for unbuffered, 1 for line buffered, >1 for explicit buffer size, <0
 | 
				
			||||||
 | 
					for default.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* open()'s second argument is now optional; it defaults to "r".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* apply() now checks that its second argument is indeed a tuple.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					New Built-in Modules
 | 
				
			||||||
 | 
					--------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Changed Built-in Modules
 | 
				
			||||||
 | 
					------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The thread module no longer supports exit_prog().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					New Python Modules
 | 
				
			||||||
 | 
					------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module addpack contains a standard interface to modify sys.path to
 | 
				
			||||||
 | 
					find optional packages (groups of related modules).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module urllib contains a number of functions to access
 | 
				
			||||||
 | 
					World-Wide-Web files specified by their URL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module httplib implements the client side of the HTTP protocol used
 | 
				
			||||||
 | 
					by World-Wide-Web servers.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module gopherlib implements the client side of the Gopher protocol.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module mailbox (by Jack Jansen) contains a parser for UNIX and MMDF
 | 
				
			||||||
 | 
					style mailbox files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module random contains various random distributions, e.g. gauss().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module lockfile locks and unlocks open files using fcntl (inspired
 | 
				
			||||||
 | 
					by a similar module by Andy Bensky).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module ntpath (by Jaap Vermeulen) implements path operations for
 | 
				
			||||||
 | 
					Windows/NT.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module test_thread (in Lib/test) contains a small test set for the
 | 
				
			||||||
 | 
					thread module.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Changed Python Modules
 | 
				
			||||||
 | 
					----------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The string module's expandvars() function is now documented and is
 | 
				
			||||||
 | 
					implemented in Python (using regular expressions) instead of forking
 | 
				
			||||||
 | 
					off a shell process.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module rfc822 now supports accessing the header fields using the
 | 
				
			||||||
 | 
					mapping/dictionary interface, e.g. h['subject'].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module pdb now makes it possible to set a break on a function
 | 
				
			||||||
 | 
					(syntax: break <expression>, where <expression> yields a function
 | 
				
			||||||
 | 
					object).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Changed Demos
 | 
				
			||||||
 | 
					-------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The Demo/scripts/freeze.py script is working again (thanks to Jaap
 | 
				
			||||||
 | 
					Vermeulen).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					New Demos
 | 
				
			||||||
 | 
					---------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Demo/threads/Generator.py is a proposed interface for restartable
 | 
				
			||||||
 | 
					functions a la Tim Peters.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Demo/scripts/newslist.py, by Quentin Stafford-Fraser, generates a
 | 
				
			||||||
 | 
					directory full of HTML pages which between them contain links to all
 | 
				
			||||||
 | 
					the newsgroups available on your server.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Demo/dns contains a DNS (Domain Name Server) client.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Demo/lutz contains miscellaneous demos by Mark Lutz (e.g. psh.py, a
 | 
				
			||||||
 | 
					nice enhanced Python shell!!!).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Demo/turing contains a Turing machine by Amrit Prem.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Documentation
 | 
				
			||||||
 | 
					-------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Documented new language features mentioned above (but not all new
 | 
				
			||||||
 | 
					modules).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Added a chapter to the Tutorial describing recent additions to
 | 
				
			||||||
 | 
					Python.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Clarified some sentences in the reference manual,
 | 
				
			||||||
 | 
					e.g. break/continue, local/global scope, slice assignment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Source Structure
 | 
				
			||||||
 | 
					----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Moved Include/tokenizer.h to Parser/tokenizer.h.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Added Python/getopt.c for systems that don't have it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Emacs mode
 | 
				
			||||||
 | 
					----------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Indentation of continuated lines is done more intelligently;
 | 
				
			||||||
 | 
					consequently the variable py-continuation-offset is gone.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					========================================
 | 
				
			||||||
 | 
					==> Release 1.0.1 (15 February 1994) <==
 | 
				
			||||||
 | 
					========================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Many portability fixes should make it painless to build Python on
 | 
				
			||||||
 | 
					several new platforms, e.g. NeXT, SEQUENT, WATCOM, DOS, and Windows.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Fixed test for <stdarg.h> -- this broke on some platforms.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Fixed test for shared library dynalic loading -- this broke on SunOS
 | 
				
			||||||
 | 
					4.x using the GNU loader.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Changed order and number of SVR4 networking libraries (it is now
 | 
				
			||||||
 | 
					-lsocket -linet -lnsl, if these libraries exist).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Installing the build intermediate stages with "make libainstall" now
 | 
				
			||||||
 | 
					also installs config.c.in, Setup and makesetup, which are used by the
 | 
				
			||||||
 | 
					new Extensions mechanism.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Improved README file contains more hints and new troubleshooting
 | 
				
			||||||
 | 
					section.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The built-in module strop now defines fast versions of three more
 | 
				
			||||||
 | 
					functions of the standard string module: atoi(), atol() and atof().
 | 
				
			||||||
 | 
					The strop versions of atoi() and atol() support an optional second
 | 
				
			||||||
 | 
					argument to specify the base (default 10).  NOTE: you don't have to
 | 
				
			||||||
 | 
					explicitly import strop to use the faster versions -- the string
 | 
				
			||||||
 | 
					module contains code to let versions from stop override the default
 | 
				
			||||||
 | 
					versions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There is now a working Lib/dospath.py for those who use Python under
 | 
				
			||||||
 | 
					DOS (or Windows).  Thanks, Jaap!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There is now a working Modules/dosmodule.c for DOS (or Windows)
 | 
				
			||||||
 | 
					system calls.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Lib.os.py has been reorganized (making it ready for more operating
 | 
				
			||||||
 | 
					systems).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Lib/ospath.py is now obsolete (use os.path instead).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Many fixes to the tutorial to make it match Python 1.0.  Thanks,
 | 
				
			||||||
 | 
					Tim!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Fixed Doc/Makefile, Doc/README and various scripts there.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Added missing description of fdopen to Doc/libposix.tex.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Made cleanup() global, for the benefit of embedded applications.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Added parsing of addresses and dates to Lib/rfc822.py.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Small fixes to Lib/aifc.py, Lib/sunau.py, Lib/tzparse.py to make
 | 
				
			||||||
 | 
					them usable at all.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* New module Lib/wave.py reads RIFF (*.wav) audio files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module Lib/filewin.py moved to Lib/stdwin/filewin.py where it
 | 
				
			||||||
 | 
					belongs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* New options and comments for Modules/makesetup (used by new
 | 
				
			||||||
 | 
					Extension mechanism).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Misc/HYPE contains text of announcement of 1.0.0 in comp.lang.misc
 | 
				
			||||||
 | 
					and elsewhere.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Fixed coredump in filter(None, 'abcdefg').
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=======================================
 | 
				
			||||||
 | 
					==> Release 1.0.0 (26 January 1994) <==
 | 
				
			||||||
 | 
					=======================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As is traditional, so many things have changed that I can't pretend to
 | 
				
			||||||
 | 
					be complete in these release notes, but I'll try anyway :-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note that the very last section is labeled "remaining bugs".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Source organization and build process
 | 
				
			||||||
 | 
					-------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The sources have finally been split: instead of a single src
 | 
				
			||||||
 | 
					subdirectory there are now separate directories Include, Parser,
 | 
				
			||||||
 | 
					Grammar, Objects, Python and Modules.  Other directories also start
 | 
				
			||||||
 | 
					with a capital letter: Misc, Doc, Lib, Demo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* A few extensions (notably Amoeba and X support) have been moved to a
 | 
				
			||||||
 | 
					separate subtree Extensions, which is no longer in the core
 | 
				
			||||||
 | 
					distribution, but separately ftp'able as extensions.tar.Z.  (The
 | 
				
			||||||
 | 
					distribution contains a placeholder Ext-dummy with a description of
 | 
				
			||||||
 | 
					the Extensions subtree as well as the most recent versions of the
 | 
				
			||||||
 | 
					scripts used there.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* A few large specialized demos (SGI video and www) have been
 | 
				
			||||||
 | 
					moved to a separate subdirectory Demo2, which is no longer in the core
 | 
				
			||||||
 | 
					distribution, but separately ftp'able as demo2.tar.Z.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Parts of the standard library have been moved to subdirectories:
 | 
				
			||||||
 | 
					there are now standard subdirectories stdwin, test, sgi and sun4.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The configuration process has radically changed: I now use GNU
 | 
				
			||||||
 | 
					autoconf.  This makes it much easier to build on new Unix flavors, as
 | 
				
			||||||
 | 
					well as fully supporting VPATH (if your Make has it).  The scripts
 | 
				
			||||||
 | 
					Configure.py and Addmodule.sh are no longer needed.  Many source files
 | 
				
			||||||
 | 
					have been adapted in order to work with the symbols that the configure
 | 
				
			||||||
 | 
					script generated by autoconf defines (or not); the resulting source is
 | 
				
			||||||
 | 
					much more portable to different C compilers and operating systems,
 | 
				
			||||||
 | 
					even non Unix systems (a Mac port was done in an afternoon).  See the
 | 
				
			||||||
 | 
					toplevel README file for a description of the new build process.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* GNU readline (a slightly newer version) is now a subdirectory of the
 | 
				
			||||||
 | 
					Python toplevel.  It is still not automatically configured (being
 | 
				
			||||||
 | 
					totally autoconf-unaware :-).  One problem has been solved: typing
 | 
				
			||||||
 | 
					Control-C to a readline prompt will now work.  The distribution no
 | 
				
			||||||
 | 
					longer contains a "super-level" directory (above the python toplevel
 | 
				
			||||||
 | 
					directory), and dl, dl-dld and GNU dld are no longer part of the
 | 
				
			||||||
 | 
					Python distribution (you can still ftp them from
 | 
				
			||||||
 | 
					ftp.cwi.nl:/pub/dynload).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The DOS functions have been taken out of posixmodule.c and moved
 | 
				
			||||||
 | 
					into a separate file dosmodule.c.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There's now a separate file version.c which contains nothing but
 | 
				
			||||||
 | 
					the version number.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The actual main program is now contained in config.c (unless NO_MAIN
 | 
				
			||||||
 | 
					is defined); pythonmain.c now contains a function realmain() which is
 | 
				
			||||||
 | 
					called from config.c's main().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* All files needed to use the built-in module md5 are now contained in
 | 
				
			||||||
 | 
					the distribution.  The module has been cleaned up considerably.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Documentation
 | 
				
			||||||
 | 
					-------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The library manual has been split into many more small latex files,
 | 
				
			||||||
 | 
					so it is easier to edit Doc/lib.tex file to create a custom library
 | 
				
			||||||
 | 
					manual, describing only those modules supported on your system.  (This
 | 
				
			||||||
 | 
					is not automated though.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* A fourth manual has been added, titled "Extending and Embedding the
 | 
				
			||||||
 | 
					Python Interpreter" (Doc/ext.tex), which collects information about
 | 
				
			||||||
 | 
					the interpreter which was previously spread over several files in the
 | 
				
			||||||
 | 
					misc subdirectory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The entire documentation is now also available on-line for those who
 | 
				
			||||||
 | 
					have a WWW browser (e.g. NCSA Mosaic).  Point your browser to the URL
 | 
				
			||||||
 | 
					"http://www.cwi.nl/~guido/Python.html".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax
 | 
				
			||||||
 | 
					------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Strings may now be enclosed in double quotes as well as in single
 | 
				
			||||||
 | 
					quotes.  There is no difference in interpretation.  The repr() of
 | 
				
			||||||
 | 
					string objects will use double quotes if the string contains a single
 | 
				
			||||||
 | 
					quote and no double quotes.  Thanks to Amrit Prem for these changes!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There is a new keyword 'exec'.  This replaces the exec() built-in
 | 
				
			||||||
 | 
					function.  If a function contains an exec statement, local variable
 | 
				
			||||||
 | 
					optimization is not performed for that particular function, thus
 | 
				
			||||||
 | 
					making assignment to local variables in exec statements less
 | 
				
			||||||
 | 
					confusing.  (As a consequence, os.exec and python.exec have been
 | 
				
			||||||
 | 
					renamed to execv.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There is a new keyword 'lambda'.  An expression of the form
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						lambda <parameters> : <expression>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					yields an anonymous function.  This is really only syntactic sugar;
 | 
				
			||||||
 | 
					you can just as well define a local function using
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def some_temporary_name(<parameters>): return <expression>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Lambda expressions are particularly useful in combination with map(),
 | 
				
			||||||
 | 
					filter() and reduce(), described below.  Thanks to Amrit Prem for
 | 
				
			||||||
 | 
					submitting this code (as well as map(), filter(), reduce() and
 | 
				
			||||||
 | 
					xrange())!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Built-in functions
 | 
				
			||||||
 | 
					------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The built-in module containing the built-in functions is called
 | 
				
			||||||
 | 
					__builtin__ instead of builtin.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* New built-in functions map(), filter() and reduce() perform standard
 | 
				
			||||||
 | 
					functional programming operations (though not lazily):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- map(f, seq) returns a new sequence whose items are the items from
 | 
				
			||||||
 | 
					seq with f() applied to them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- filter(f, seq) returns a subsequence of seq consisting of those
 | 
				
			||||||
 | 
					items for which f() is true.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- reduce(f, seq, initial) returns a value computed as follows:
 | 
				
			||||||
 | 
						acc = initial
 | 
				
			||||||
 | 
						for item in seq: acc = f(acc, item)
 | 
				
			||||||
 | 
						return acc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* New function xrange() creates a "range object".  Its arguments are
 | 
				
			||||||
 | 
					the same as those of range(), and when used in a for loop a range
 | 
				
			||||||
 | 
					objects also behaves identical.  The advantage of xrange() over
 | 
				
			||||||
 | 
					range() is that its representation (if the range contains many
 | 
				
			||||||
 | 
					elements) is much more compact than that of range().  The disadvantage
 | 
				
			||||||
 | 
					is that the result cannot be used to initialize a list object or for
 | 
				
			||||||
 | 
					the "Python idiom" [RED, GREEN, BLUE] = range(3).  On some modern
 | 
				
			||||||
 | 
					architectures, benchmarks have shown that "for i in range(...): ..."
 | 
				
			||||||
 | 
					actually executes *faster* than "for i in xrange(...): ...", but on
 | 
				
			||||||
 | 
					memory starved machines like PCs running DOS range(100000) may be just
 | 
				
			||||||
 | 
					too big to be represented at all...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Built-in function exec() has been replaced by the exec statement --
 | 
				
			||||||
 | 
					see above.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The interpreter
 | 
				
			||||||
 | 
					---------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Syntax errors are now not printed to stderr by the parser, but
 | 
				
			||||||
 | 
					rather the offending line and other relevant information are packed up
 | 
				
			||||||
 | 
					in the SyntaxError exception argument.  When the main loop catches a
 | 
				
			||||||
 | 
					SyntaxError exception it will print the error in the same format as
 | 
				
			||||||
 | 
					previously, but at the proper position in the stack traceback.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* You can now set a maximum to the number of traceback entries
 | 
				
			||||||
 | 
					printed by assigning to sys.tracebacklimit.  The default is 1000.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The version number in .pyc files has changed yet again.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* It is now possible to have a .pyc file without a corresponding .py
 | 
				
			||||||
 | 
					file.  (Warning: this may break existing installations if you have an
 | 
				
			||||||
 | 
					old .pyc file lingering around somewhere on your module search path
 | 
				
			||||||
 | 
					without a corresponding .py file, when there is a .py file for a
 | 
				
			||||||
 | 
					module of the same name further down the path -- the new interpreter
 | 
				
			||||||
 | 
					will find the first .pyc file and complain about it, while the old
 | 
				
			||||||
 | 
					interpreter would ignore it and use the .py file further down.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The list sys.builtin_module_names is now sorted and also contains
 | 
				
			||||||
 | 
					the names of a few hardwired built-in modules (sys, __main__ and
 | 
				
			||||||
 | 
					__builtin__).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* A module can now find its own name by accessing the global variable
 | 
				
			||||||
 | 
					__name__.  Assigning to this variable essentially renames the module
 | 
				
			||||||
 | 
					(it should also be stored under a different key in sys.modules).
 | 
				
			||||||
 | 
					A neat hack follows from this: a module that wants to execute a main
 | 
				
			||||||
 | 
					program when called as a script no longer needs to compare
 | 
				
			||||||
 | 
					sys.argv[0]; it can simply do "if __name__ == '__main__': main()".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* When an object is printed by the print statement, its implementation
 | 
				
			||||||
 | 
					of str() is used.  This means that classes can define __str__(self) to
 | 
				
			||||||
 | 
					direct how their instances are printed.  This is different from
 | 
				
			||||||
 | 
					__repr__(self), which should define an unambigous string
 | 
				
			||||||
 | 
					representation of the instance.  (If __str__() is not defined, it
 | 
				
			||||||
 | 
					defaults to __repr__().)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Functions and code objects can now be compared meaningfully.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* On systems supporting SunOS or SVR4 style shared libraries, dynamic
 | 
				
			||||||
 | 
					loading of modules using shared libraries is automatically configured.
 | 
				
			||||||
 | 
					Thanks to Bill Jansen and Denis Severson for contributing this change!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Built-in objects
 | 
				
			||||||
 | 
					----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* File objects have acquired a new method writelines() which is the
 | 
				
			||||||
 | 
					reverse of readlines().  (It does not actually write lines, just a
 | 
				
			||||||
 | 
					list of strings, but the symmetry makes the choice of name OK.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Built-in modules
 | 
				
			||||||
 | 
					----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Socket objects no longer support the avail() method.  Use the select
 | 
				
			||||||
 | 
					module instead, or use this function to replace it:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def avail(f):
 | 
				
			||||||
 | 
							import select
 | 
				
			||||||
 | 
							return f in select.select([f], [], [], 0)[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Initialization of stdwin is done differently.  It actually modifies
 | 
				
			||||||
 | 
					sys.argv (taking out the options the X version of stdwin recognizes)
 | 
				
			||||||
 | 
					the first time it is imported.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* A new built-in module parser provides a rudimentary interface to the
 | 
				
			||||||
 | 
					python parser.  Corresponding standard library modules token and symbol
 | 
				
			||||||
 | 
					defines the numeric values of tokens and non-terminal symbols.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The posix module has aquired new functions setuid(), setgid(),
 | 
				
			||||||
 | 
					execve(), and exec() has been renamed to execv().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The array module is extended with 8-byte object swaps, the 'i'
 | 
				
			||||||
 | 
					format character, and a reverse() method.  The read() and write()
 | 
				
			||||||
 | 
					methods are renamed to fromfile() and tofile().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The rotor module has freed of portability bugs.  This introduces a
 | 
				
			||||||
 | 
					backward compatibility problem: strings encoded with the old rotor
 | 
				
			||||||
 | 
					module can't be decoded by the new version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* For select.select(), a timeout (4th) argument of None means the same
 | 
				
			||||||
 | 
					as leaving the timeout argument out.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module strop (and hence standard library module string) has aquired
 | 
				
			||||||
 | 
					a new function: rindex().  Thanks to Amrit Prem!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module regex defines a new function symcomp() which uses an extended
 | 
				
			||||||
 | 
					regular expression syntax: parenthesized subexpressions may be labeled
 | 
				
			||||||
 | 
					using the form "\(<labelname>...\)", and the group() method can return
 | 
				
			||||||
 | 
					sub-expressions by name.  Thanks to Tracy Tims for these changes!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Multiple threads are now supported on Solaris 2.  Thanks to Sjoerd
 | 
				
			||||||
 | 
					Mullender!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Standard library modules
 | 
				
			||||||
 | 
					------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The library is now split in several subdirectories: all stuff using
 | 
				
			||||||
 | 
					stdwin is in Lib/stdwin, all SGI specific (or SGI Indigo or GL) stuff
 | 
				
			||||||
 | 
					is in Lib/sgi, all Sun Sparc specific stuff is in Lib/sun4, and all
 | 
				
			||||||
 | 
					test modules are in Lib/test.  The default module search path will
 | 
				
			||||||
 | 
					include all relevant subdirectories by default.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module os now knows about trying to import dos.  It defines
 | 
				
			||||||
 | 
					functions execl(), execle(), execlp() and execvp().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* New module dospath (should be attacked by a DOS hacker though).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* All modules defining classes now define __init__() constructors
 | 
				
			||||||
 | 
					instead of init() methods.  THIS IS AN INCOMPATIBLE CHANGE!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Some minor changes and bugfixes module ftplib (mostly Steve
 | 
				
			||||||
 | 
					Majewski's suggestions); the debug() method is renamed to
 | 
				
			||||||
 | 
					set_debuglevel().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Some new test modules (not run automatically by testall though):
 | 
				
			||||||
 | 
					test_audioop, test_md5, test_rgbimg, test_select.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Module string now defines rindex() and rfind() in analogy of index()
 | 
				
			||||||
 | 
					and find().  It also defines atof() and atol() (and corresponding
 | 
				
			||||||
 | 
					exceptions) in analogy to atoi().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Added help() functions to modules profile and pdb.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The wdb debugger (now in Lib/stdwin) now shows class or instance
 | 
				
			||||||
 | 
					variables on a double click.  Thanks to Sjoerd Mullender!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The (undocumented) module lambda has gone -- you couldn't import it
 | 
				
			||||||
 | 
					any more, and it was basically more a demo than a library module...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Multimedia extensions
 | 
				
			||||||
 | 
					---------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The optional built-in modules audioop and imageop are now standard
 | 
				
			||||||
 | 
					parts of the interpreter.  Thanks to Sjoerd Mullender and Jack Jansen
 | 
				
			||||||
 | 
					for contributing this code!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There's a new operation in audioop: minmax().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There's a new built-in module called rgbimg which supports portable
 | 
				
			||||||
 | 
					efficient reading of SGI RCG image files.  Thanks also to Paul
 | 
				
			||||||
 | 
					Haeberli for the original code!  (Who will contribute a GIF reader?)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The module aifc is gone -- you should now always use aifc, which has
 | 
				
			||||||
 | 
					received a facelift.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There's a new module sunau., for reading Sun (and NeXT) audio files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There's a new module audiodev which provides a uniform interface to
 | 
				
			||||||
 | 
					(SGI Indigo and Sun Sparc) audio hardware.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There's a new module sndhdr which recognizes various sound files by
 | 
				
			||||||
 | 
					looking in their header and checking for various magic words.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Optimizations
 | 
				
			||||||
 | 
					-------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Most optimizations below can be configured by compile-time flags.
 | 
				
			||||||
 | 
					Thanks to Sjoerd Mullender for submitting these optimizations!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Small integers (default -1..99) are shared -- i.e. if two different
 | 
				
			||||||
 | 
					functions compute the same value it is possible (but not
 | 
				
			||||||
 | 
					guaranteed!!!) that they return the same *object*.  Python programs
 | 
				
			||||||
 | 
					can detect this but should *never* rely on it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Empty tuples (which all compare equal) are shared in the same
 | 
				
			||||||
 | 
					manner.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Tuples of size up to 20 (default) are put in separate free lists
 | 
				
			||||||
 | 
					when deallocated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There is a compile-time option to cache a string's hash function,
 | 
				
			||||||
 | 
					but this appeared to have a negligeable effect, and as it costs 4
 | 
				
			||||||
 | 
					bytes per string it is disabled by default.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Embedding Python
 | 
				
			||||||
 | 
					----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The initialization interface has been simplified somewhat.  You now
 | 
				
			||||||
 | 
					only call "initall()" to initialize the interpreter.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The previously announced renaming of externally visible identifiers
 | 
				
			||||||
 | 
					has not been carried out.  It will happen in a later release.  Sorry.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Miscellaneous bugs that have been fixed
 | 
				
			||||||
 | 
					---------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* All known portability bugs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Version 0.9.9 dumped core in <listobject>.sort() which has been
 | 
				
			||||||
 | 
					fixed.  Thanks to Jaap Vermeulen for fixing this and posting the fix
 | 
				
			||||||
 | 
					on the mailing list while I was away!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Core dump on a format string ending in '%', e.g. in the expression
 | 
				
			||||||
 | 
					'%' % None.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The array module yielded a bogus result for concatenation (a+b would
 | 
				
			||||||
 | 
					yield a+a).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Some serious memory leaks in strop.split() and strop.splitfields().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Several problems with the nis module.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Subtle problem when copying a class method from another class
 | 
				
			||||||
 | 
					through assignment (the method could not be called).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Remaining bugs
 | 
				
			||||||
 | 
					--------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* One problem with 64-bit machines remains -- since .pyc files are
 | 
				
			||||||
 | 
					portable and use only 4 bytes to represent an integer object, 64-bit
 | 
				
			||||||
 | 
					integer literals are silently truncated when written into a .pyc file.
 | 
				
			||||||
 | 
					Work-around: use eval('123456789101112').
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The freeze script doesn't work any more.  A new and more portable
 | 
				
			||||||
 | 
					one can probably be cooked up using tricks from Extensions/mkext.py.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The dos support hasn't been tested yet.  (Really Soon Now we should
 | 
				
			||||||
 | 
					have a PC with a working C compiler!)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
===================================
 | 
					===================================
 | 
				
			||||||
==> Release 0.9.9 (29 Jul 1993) <==
 | 
					==> Release 0.9.9 (29 Jul 1993) <==
 | 
				
			||||||
===================================
 | 
					===================================
 | 
				
			||||||
| 
						 | 
					@ -369,6 +1026,7 @@ SGI specific changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Read src/ChangeLog for full details.
 | 
					* Read src/ChangeLog for full details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
==================================
 | 
					==================================
 | 
				
			||||||
==> Release 0.9.8 (9 Jan 1993) <==
 | 
					==> Release 0.9.8 (9 Jan 1993) <==
 | 
				
			||||||
==================================
 | 
					==================================
 | 
				
			||||||
| 
						 | 
					@ -955,6 +1613,7 @@ variants have been added
 | 
				
			||||||
 | 
					
 | 
				
			||||||
New file xxmodule.c is a template for new extension modules.
 | 
					New file xxmodule.c is a template for new extension modules.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
==================================
 | 
					==================================
 | 
				
			||||||
==> RELEASE 0.9.6 (6 Apr 1992) <==
 | 
					==> RELEASE 0.9.6 (6 Apr 1992) <==
 | 
				
			||||||
==================================
 | 
					==================================
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										655
									
								
								Misc/NEWS
									
										
									
									
									
								
							
							
						
						
									
										655
									
								
								Misc/NEWS
									
										
									
									
									
								
							| 
						 | 
					@ -130,660 +130,5 @@ undocumented):
 | 
				
			||||||
    sigcheck() also sets an exception when it returns nonzero
 | 
					    sigcheck() also sets an exception when it returns nonzero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
====================================
 | 
					 | 
				
			||||||
==> Release 1.0.3 (14 July 1994) <==
 | 
					 | 
				
			||||||
====================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This release consists entirely of bug fixes to the C sources; see the
 | 
					 | 
				
			||||||
head of ../ChangeLog for a complete list.  Most important bugs fixed:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Sometimes the format operator (string%expr) would drop the last
 | 
					 | 
				
			||||||
character of the format string
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Tokenizer looped when last line did not end in \n
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Bug when triple-quoted string ended in quote plus newline
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Typo in socketmodule (listen) (== instead of =)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- typing vars() at the >>> prompt would cause recursive output
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
==================================
 | 
					 | 
				
			||||||
==> Release 1.0.2 (4 May 1994) <==
 | 
					 | 
				
			||||||
==================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Overview of the most visible changes.  Bug fixes are not listed.  See
 | 
					 | 
				
			||||||
also ChangeLog.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Tokens
 | 
					 | 
				
			||||||
------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* String literals follow Standard C rules: they may be continued on
 | 
					 | 
				
			||||||
the next line using a backslash; adjacent literals are concatenated
 | 
					 | 
				
			||||||
at compile time.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* A new kind of string literals, surrounded by triple quotes (""" or
 | 
					 | 
				
			||||||
'''), can be continued on the next line without a backslash.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Syntax
 | 
					 | 
				
			||||||
------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Function arguments may have a default value, e.g. def f(a, b=1);
 | 
					 | 
				
			||||||
defaults are evaluated at function definition time.  This also applies
 | 
					 | 
				
			||||||
to lambda.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The try-except statement has an optional else clause, which is
 | 
					 | 
				
			||||||
executed when no exception occurs in the try clause.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Interpreter
 | 
					 | 
				
			||||||
-----------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The result of a statement-level expression is no longer printed,
 | 
					 | 
				
			||||||
except_ for expressions entered interactively.  Consequently, the -k
 | 
					 | 
				
			||||||
command line option is gone.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The result of the last printed interactive expression is assigned to
 | 
					 | 
				
			||||||
the variable '_'.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Access to implicit global variables has been speeded up by removing
 | 
					 | 
				
			||||||
an always-failing dictionary lookup in the dictionary of local
 | 
					 | 
				
			||||||
variables (mod suggested by Steve Makewski and Tim Peters).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There is a new command line option, -u, to force stdout and stderr
 | 
					 | 
				
			||||||
to be unbuffered.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Incorporated Steve Majewski's mods to import.c for dynamic loading
 | 
					 | 
				
			||||||
under AIX.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Fewer chances of dumping core when trying to reload or re-import
 | 
					 | 
				
			||||||
static built-in, dynamically loaded built-in, or frozen modules.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Loops over sequences now don't ask for the sequence's length when
 | 
					 | 
				
			||||||
they start, but try to access items 0, 1, 2, and so on until they hit
 | 
					 | 
				
			||||||
an IndexError.  This makes it possible to create classes that generate
 | 
					 | 
				
			||||||
infinite or indefinite sequences a la Steve Majewski.  This affects
 | 
					 | 
				
			||||||
for loops, the (not) in operator, and the built-in functions filter(),
 | 
					 | 
				
			||||||
map(), max(), min(), reduce().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Changed Built-in operations
 | 
					 | 
				
			||||||
---------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The '%' operator on strings (printf-style formatting) supports a new
 | 
					 | 
				
			||||||
feature (adapted from a patch by Donald Beaudry) to allow
 | 
					 | 
				
			||||||
'%(<key>)<format>' % {...} to take values from a dictionary by name
 | 
					 | 
				
			||||||
instead of from a tuple by position (see also the new function
 | 
					 | 
				
			||||||
vars()).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The '%s' formatting operator is changed to accept any type and
 | 
					 | 
				
			||||||
convert it to a string using str().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Dictionaries with more than 20,000 entries can now be created
 | 
					 | 
				
			||||||
(thanks to Steve Kirsch).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
New Built-in Functions
 | 
					 | 
				
			||||||
----------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* vars() returns a dictionary containing the local variables; vars(m)
 | 
					 | 
				
			||||||
returns a dictionary containing the variables of module m.  Note:
 | 
					 | 
				
			||||||
dir(x) is now equivalent to vars(x).keys().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Changed Built-in Functions
 | 
					 | 
				
			||||||
--------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* open() has an optional third argument to specify the buffer size: 0
 | 
					 | 
				
			||||||
for unbuffered, 1 for line buffered, >1 for explicit buffer size, <0
 | 
					 | 
				
			||||||
for default.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* open()'s second argument is now optional; it defaults to "r".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* apply() now checks that its second argument is indeed a tuple.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
New Built-in Modules
 | 
					 | 
				
			||||||
--------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Changed Built-in Modules
 | 
					 | 
				
			||||||
------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The thread module no longer supports exit_prog().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
New Python Modules
 | 
					 | 
				
			||||||
------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module addpack contains a standard interface to modify sys.path to
 | 
					 | 
				
			||||||
find optional packages (groups of related modules).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module urllib contains a number of functions to access
 | 
					 | 
				
			||||||
World-Wide-Web files specified by their URL.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module httplib implements the client side of the HTTP protocol used
 | 
					 | 
				
			||||||
by World-Wide-Web servers.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module gopherlib implements the client side of the Gopher protocol.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module mailbox (by Jack Jansen) contains a parser for UNIX and MMDF
 | 
					 | 
				
			||||||
style mailbox files.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module random contains various random distributions, e.g. gauss().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module lockfile locks and unlocks open files using fcntl (inspired
 | 
					 | 
				
			||||||
by a similar module by Andy Bensky).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module ntpath (by Jaap Vermeulen) implements path operations for
 | 
					 | 
				
			||||||
Windows/NT.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module test_thread (in Lib/test) contains a small test set for the
 | 
					 | 
				
			||||||
thread module.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Changed Python Modules
 | 
					 | 
				
			||||||
----------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The string module's expandvars() function is now documented and is
 | 
					 | 
				
			||||||
implemented in Python (using regular expressions) instead of forking
 | 
					 | 
				
			||||||
off a shell process.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module rfc822 now supports accessing the header fields using the
 | 
					 | 
				
			||||||
mapping/dictionary interface, e.g. h['subject'].
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module pdb now makes it possible to set a break on a function
 | 
					 | 
				
			||||||
(syntax: break <expression>, where <expression> yields a function
 | 
					 | 
				
			||||||
object).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Changed Demos
 | 
					 | 
				
			||||||
-------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The Demo/scripts/freeze.py script is working again (thanks to Jaap
 | 
					 | 
				
			||||||
Vermeulen).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
New Demos
 | 
					 | 
				
			||||||
---------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Demo/threads/Generator.py is a proposed interface for restartable
 | 
					 | 
				
			||||||
functions a la Tim Peters.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Demo/scripts/newslist.py, by Quentin Stafford-Fraser, generates a
 | 
					 | 
				
			||||||
directory full of HTML pages which between them contain links to all
 | 
					 | 
				
			||||||
the newsgroups available on your server.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Demo/dns contains a DNS (Domain Name Server) client.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Demo/lutz contains miscellaneous demos by Mark Lutz (e.g. psh.py, a
 | 
					 | 
				
			||||||
nice enhanced Python shell!!!).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Demo/turing contains a Turing machine by Amrit Prem.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Documentation
 | 
					 | 
				
			||||||
-------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Documented new language features mentioned above (but not all new
 | 
					 | 
				
			||||||
modules).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Added a chapter to the Tutorial describing recent additions to
 | 
					 | 
				
			||||||
Python.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Clarified some sentences in the reference manual,
 | 
					 | 
				
			||||||
e.g. break/continue, local/global scope, slice assignment.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Source Structure
 | 
					 | 
				
			||||||
----------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Moved Include/tokenizer.h to Parser/tokenizer.h.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Added Python/getopt.c for systems that don't have it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Emacs mode
 | 
					 | 
				
			||||||
----------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Indentation of continuated lines is done more intelligently;
 | 
					 | 
				
			||||||
consequently the variable py-continuation-offset is gone.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
========================================
 | 
					 | 
				
			||||||
==> Release 1.0.1 (15 February 1994) <==
 | 
					 | 
				
			||||||
========================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Many portability fixes should make it painless to build Python on
 | 
					 | 
				
			||||||
several new platforms, e.g. NeXT, SEQUENT, WATCOM, DOS, and Windows.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Fixed test for <stdarg.h> -- this broke on some platforms.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Fixed test for shared library dynalic loading -- this broke on SunOS
 | 
					 | 
				
			||||||
4.x using the GNU loader.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Changed order and number of SVR4 networking libraries (it is now
 | 
					 | 
				
			||||||
-lsocket -linet -lnsl, if these libraries exist).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Installing the build intermediate stages with "make libainstall" now
 | 
					 | 
				
			||||||
also installs config.c.in, Setup and makesetup, which are used by the
 | 
					 | 
				
			||||||
new Extensions mechanism.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Improved README file contains more hints and new troubleshooting
 | 
					 | 
				
			||||||
section.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The built-in module strop now defines fast versions of three more
 | 
					 | 
				
			||||||
functions of the standard string module: atoi(), atol() and atof().
 | 
					 | 
				
			||||||
The strop versions of atoi() and atol() support an optional second
 | 
					 | 
				
			||||||
argument to specify the base (default 10).  NOTE: you don't have to
 | 
					 | 
				
			||||||
explicitly import strop to use the faster versions -- the string
 | 
					 | 
				
			||||||
module contains code to let versions from stop override the default
 | 
					 | 
				
			||||||
versions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There is now a working Lib/dospath.py for those who use Python under
 | 
					 | 
				
			||||||
DOS (or Windows).  Thanks, Jaap!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There is now a working Modules/dosmodule.c for DOS (or Windows)
 | 
					 | 
				
			||||||
system calls.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Lib.os.py has been reorganized (making it ready for more operating
 | 
					 | 
				
			||||||
systems).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Lib/ospath.py is now obsolete (use os.path instead).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Many fixes to the tutorial to make it match Python 1.0.  Thanks,
 | 
					 | 
				
			||||||
Tim!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Fixed Doc/Makefile, Doc/README and various scripts there.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Added missing description of fdopen to Doc/libposix.tex.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Made cleanup() global, for the benefit of embedded applications.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Added parsing of addresses and dates to Lib/rfc822.py.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Small fixes to Lib/aifc.py, Lib/sunau.py, Lib/tzparse.py to make
 | 
					 | 
				
			||||||
them usable at all.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* New module Lib/wave.py reads RIFF (*.wav) audio files.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module Lib/filewin.py moved to Lib/stdwin/filewin.py where it
 | 
					 | 
				
			||||||
belongs.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* New options and comments for Modules/makesetup (used by new
 | 
					 | 
				
			||||||
Extension mechanism).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Misc/HYPE contains text of announcement of 1.0.0 in comp.lang.misc
 | 
					 | 
				
			||||||
and elsewhere.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Fixed coredump in filter(None, 'abcdefg').
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=======================================
 | 
					 | 
				
			||||||
==> Release 1.0.0 (26 January 1994) <==
 | 
					 | 
				
			||||||
=======================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
As is traditional, so many things have changed that I can't pretend to
 | 
					 | 
				
			||||||
be complete in these release notes, but I'll try anyway :-)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Note that the very last section is labeled "remaining bugs".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Source organization and build process
 | 
					 | 
				
			||||||
-------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The sources have finally been split: instead of a single src
 | 
					 | 
				
			||||||
subdirectory there are now separate directories Include, Parser,
 | 
					 | 
				
			||||||
Grammar, Objects, Python and Modules.  Other directories also start
 | 
					 | 
				
			||||||
with a capital letter: Misc, Doc, Lib, Demo.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* A few extensions (notably Amoeba and X support) have been moved to a
 | 
					 | 
				
			||||||
separate subtree Extensions, which is no longer in the core
 | 
					 | 
				
			||||||
distribution, but separately ftp'able as extensions.tar.Z.  (The
 | 
					 | 
				
			||||||
distribution contains a placeholder Ext-dummy with a description of
 | 
					 | 
				
			||||||
the Extensions subtree as well as the most recent versions of the
 | 
					 | 
				
			||||||
scripts used there.)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* A few large specialized demos (SGI video and www) have been
 | 
					 | 
				
			||||||
moved to a separate subdirectory Demo2, which is no longer in the core
 | 
					 | 
				
			||||||
distribution, but separately ftp'able as demo2.tar.Z.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Parts of the standard library have been moved to subdirectories:
 | 
					 | 
				
			||||||
there are now standard subdirectories stdwin, test, sgi and sun4.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The configuration process has radically changed: I now use GNU
 | 
					 | 
				
			||||||
autoconf.  This makes it much easier to build on new Unix flavors, as
 | 
					 | 
				
			||||||
well as fully supporting VPATH (if your Make has it).  The scripts
 | 
					 | 
				
			||||||
Configure.py and Addmodule.sh are no longer needed.  Many source files
 | 
					 | 
				
			||||||
have been adapted in order to work with the symbols that the configure
 | 
					 | 
				
			||||||
script generated by autoconf defines (or not); the resulting source is
 | 
					 | 
				
			||||||
much more portable to different C compilers and operating systems,
 | 
					 | 
				
			||||||
even non Unix systems (a Mac port was done in an afternoon).  See the
 | 
					 | 
				
			||||||
toplevel README file for a description of the new build process.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* GNU readline (a slightly newer version) is now a subdirectory of the
 | 
					 | 
				
			||||||
Python toplevel.  It is still not automatically configured (being
 | 
					 | 
				
			||||||
totally autoconf-unaware :-).  One problem has been solved: typing
 | 
					 | 
				
			||||||
Control-C to a readline prompt will now work.  The distribution no
 | 
					 | 
				
			||||||
longer contains a "super-level" directory (above the python toplevel
 | 
					 | 
				
			||||||
directory), and dl, dl-dld and GNU dld are no longer part of the
 | 
					 | 
				
			||||||
Python distribution (you can still ftp them from
 | 
					 | 
				
			||||||
ftp.cwi.nl:/pub/dynload).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The DOS functions have been taken out of posixmodule.c and moved
 | 
					 | 
				
			||||||
into a separate file dosmodule.c.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There's now a separate file version.c which contains nothing but
 | 
					 | 
				
			||||||
the version number.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The actual main program is now contained in config.c (unless NO_MAIN
 | 
					 | 
				
			||||||
is defined); pythonmain.c now contains a function realmain() which is
 | 
					 | 
				
			||||||
called from config.c's main().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* All files needed to use the built-in module md5 are now contained in
 | 
					 | 
				
			||||||
the distribution.  The module has been cleaned up considerably.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Documentation
 | 
					 | 
				
			||||||
-------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The library manual has been split into many more small latex files,
 | 
					 | 
				
			||||||
so it is easier to edit Doc/lib.tex file to create a custom library
 | 
					 | 
				
			||||||
manual, describing only those modules supported on your system.  (This
 | 
					 | 
				
			||||||
is not automated though.)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* A fourth manual has been added, titled "Extending and Embedding the
 | 
					 | 
				
			||||||
Python Interpreter" (Doc/ext.tex), which collects information about
 | 
					 | 
				
			||||||
the interpreter which was previously spread over several files in the
 | 
					 | 
				
			||||||
misc subdirectory.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The entire documentation is now also available on-line for those who
 | 
					 | 
				
			||||||
have a WWW browser (e.g. NCSA Mosaic).  Point your browser to the URL
 | 
					 | 
				
			||||||
"http://www.cwi.nl/~guido/Python.html".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Syntax
 | 
					 | 
				
			||||||
------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Strings may now be enclosed in double quotes as well as in single
 | 
					 | 
				
			||||||
quotes.  There is no difference in interpretation.  The repr() of
 | 
					 | 
				
			||||||
string objects will use double quotes if the string contains a single
 | 
					 | 
				
			||||||
quote and no double quotes.  Thanks to Amrit Prem for these changes!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There is a new keyword 'exec'.  This replaces the exec() built-in
 | 
					 | 
				
			||||||
function.  If a function contains an exec statement, local variable
 | 
					 | 
				
			||||||
optimization is not performed for that particular function, thus
 | 
					 | 
				
			||||||
making assignment to local variables in exec statements less
 | 
					 | 
				
			||||||
confusing.  (As a consequence, os.exec and python.exec have been
 | 
					 | 
				
			||||||
renamed to execv.)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There is a new keyword 'lambda'.  An expression of the form
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	lambda <parameters> : <expression>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
yields an anonymous function.  This is really only syntactic sugar;
 | 
					 | 
				
			||||||
you can just as well define a local function using
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	def some_temporary_name(<parameters>): return <expression>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Lambda expressions are particularly useful in combination with map(),
 | 
					 | 
				
			||||||
filter() and reduce(), described below.  Thanks to Amrit Prem for
 | 
					 | 
				
			||||||
submitting this code (as well as map(), filter(), reduce() and
 | 
					 | 
				
			||||||
xrange())!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Built-in functions
 | 
					 | 
				
			||||||
------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The built-in module containing the built-in functions is called
 | 
					 | 
				
			||||||
__builtin__ instead of builtin.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* New built-in functions map(), filter() and reduce() perform standard
 | 
					 | 
				
			||||||
functional programming operations (though not lazily):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- map(f, seq) returns a new sequence whose items are the items from
 | 
					 | 
				
			||||||
seq with f() applied to them.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- filter(f, seq) returns a subsequence of seq consisting of those
 | 
					 | 
				
			||||||
items for which f() is true.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- reduce(f, seq, initial) returns a value computed as follows:
 | 
					 | 
				
			||||||
	acc = initial
 | 
					 | 
				
			||||||
	for item in seq: acc = f(acc, item)
 | 
					 | 
				
			||||||
	return acc
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* New function xrange() creates a "range object".  Its arguments are
 | 
					 | 
				
			||||||
the same as those of range(), and when used in a for loop a range
 | 
					 | 
				
			||||||
objects also behaves identical.  The advantage of xrange() over
 | 
					 | 
				
			||||||
range() is that its representation (if the range contains many
 | 
					 | 
				
			||||||
elements) is much more compact than that of range().  The disadvantage
 | 
					 | 
				
			||||||
is that the result cannot be used to initialize a list object or for
 | 
					 | 
				
			||||||
the "Python idiom" [RED, GREEN, BLUE] = range(3).  On some modern
 | 
					 | 
				
			||||||
architectures, benchmarks have shown that "for i in range(...): ..."
 | 
					 | 
				
			||||||
actually executes *faster* than "for i in xrange(...): ...", but on
 | 
					 | 
				
			||||||
memory starved machines like PCs running DOS range(100000) may be just
 | 
					 | 
				
			||||||
too big to be represented at all...
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Built-in function exec() has been replaced by the exec statement --
 | 
					 | 
				
			||||||
see above.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The interpreter
 | 
					 | 
				
			||||||
---------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Syntax errors are now not printed to stderr by the parser, but
 | 
					 | 
				
			||||||
rather the offending line and other relevant information are packed up
 | 
					 | 
				
			||||||
in the SyntaxError exception argument.  When the main loop catches a
 | 
					 | 
				
			||||||
SyntaxError exception it will print the error in the same format as
 | 
					 | 
				
			||||||
previously, but at the proper position in the stack traceback.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* You can now set a maximum to the number of traceback entries
 | 
					 | 
				
			||||||
printed by assigning to sys.tracebacklimit.  The default is 1000.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The version number in .pyc files has changed yet again.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* It is now possible to have a .pyc file without a corresponding .py
 | 
					 | 
				
			||||||
file.  (Warning: this may break existing installations if you have an
 | 
					 | 
				
			||||||
old .pyc file lingering around somewhere on your module search path
 | 
					 | 
				
			||||||
without a corresponding .py file, when there is a .py file for a
 | 
					 | 
				
			||||||
module of the same name further down the path -- the new interpreter
 | 
					 | 
				
			||||||
will find the first .pyc file and complain about it, while the old
 | 
					 | 
				
			||||||
interpreter would ignore it and use the .py file further down.)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The list sys.builtin_module_names is now sorted and also contains
 | 
					 | 
				
			||||||
the names of a few hardwired built-in modules (sys, __main__ and
 | 
					 | 
				
			||||||
__builtin__).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* A module can now find its own name by accessing the global variable
 | 
					 | 
				
			||||||
__name__.  Assigning to this variable essentially renames the module
 | 
					 | 
				
			||||||
(it should also be stored under a different key in sys.modules).
 | 
					 | 
				
			||||||
A neat hack follows from this: a module that wants to execute a main
 | 
					 | 
				
			||||||
program when called as a script no longer needs to compare
 | 
					 | 
				
			||||||
sys.argv[0]; it can simply do "if __name__ == '__main__': main()".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* When an object is printed by the print statement, its implementation
 | 
					 | 
				
			||||||
of str() is used.  This means that classes can define __str__(self) to
 | 
					 | 
				
			||||||
direct how their instances are printed.  This is different from
 | 
					 | 
				
			||||||
__repr__(self), which should define an unambigous string
 | 
					 | 
				
			||||||
representation of the instance.  (If __str__() is not defined, it
 | 
					 | 
				
			||||||
defaults to __repr__().)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Functions and code objects can now be compared meaningfully.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* On systems supporting SunOS or SVR4 style shared libraries, dynamic
 | 
					 | 
				
			||||||
loading of modules using shared libraries is automatically configured.
 | 
					 | 
				
			||||||
Thanks to Bill Jansen and Denis Severson for contributing this change!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Built-in objects
 | 
					 | 
				
			||||||
----------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* File objects have acquired a new method writelines() which is the
 | 
					 | 
				
			||||||
reverse of readlines().  (It does not actually write lines, just a
 | 
					 | 
				
			||||||
list of strings, but the symmetry makes the choice of name OK.)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Built-in modules
 | 
					 | 
				
			||||||
----------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Socket objects no longer support the avail() method.  Use the select
 | 
					 | 
				
			||||||
module instead, or use this function to replace it:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	def avail(f):
 | 
					 | 
				
			||||||
		import select
 | 
					 | 
				
			||||||
		return f in select.select([f], [], [], 0)[0]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Initialization of stdwin is done differently.  It actually modifies
 | 
					 | 
				
			||||||
sys.argv (taking out the options the X version of stdwin recognizes)
 | 
					 | 
				
			||||||
the first time it is imported.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* A new built-in module parser provides a rudimentary interface to the
 | 
					 | 
				
			||||||
python parser.  Corresponding standard library modules token and symbol
 | 
					 | 
				
			||||||
defines the numeric values of tokens and non-terminal symbols.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The posix module has aquired new functions setuid(), setgid(),
 | 
					 | 
				
			||||||
execve(), and exec() has been renamed to execv().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The array module is extended with 8-byte object swaps, the 'i'
 | 
					 | 
				
			||||||
format character, and a reverse() method.  The read() and write()
 | 
					 | 
				
			||||||
methods are renamed to fromfile() and tofile().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The rotor module has freed of portability bugs.  This introduces a
 | 
					 | 
				
			||||||
backward compatibility problem: strings encoded with the old rotor
 | 
					 | 
				
			||||||
module can't be decoded by the new version.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* For select.select(), a timeout (4th) argument of None means the same
 | 
					 | 
				
			||||||
as leaving the timeout argument out.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module strop (and hence standard library module string) has aquired
 | 
					 | 
				
			||||||
a new function: rindex().  Thanks to Amrit Prem!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module regex defines a new function symcomp() which uses an extended
 | 
					 | 
				
			||||||
regular expression syntax: parenthesized subexpressions may be labeled
 | 
					 | 
				
			||||||
using the form "\(<labelname>...\)", and the group() method can return
 | 
					 | 
				
			||||||
sub-expressions by name.  Thanks to Tracy Tims for these changes!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Multiple threads are now supported on Solaris 2.  Thanks to Sjoerd
 | 
					 | 
				
			||||||
Mullender!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Standard library modules
 | 
					 | 
				
			||||||
------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The library is now split in several subdirectories: all stuff using
 | 
					 | 
				
			||||||
stdwin is in Lib/stdwin, all SGI specific (or SGI Indigo or GL) stuff
 | 
					 | 
				
			||||||
is in Lib/sgi, all Sun Sparc specific stuff is in Lib/sun4, and all
 | 
					 | 
				
			||||||
test modules are in Lib/test.  The default module search path will
 | 
					 | 
				
			||||||
include all relevant subdirectories by default.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module os now knows about trying to import dos.  It defines
 | 
					 | 
				
			||||||
functions execl(), execle(), execlp() and execvp().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* New module dospath (should be attacked by a DOS hacker though).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* All modules defining classes now define __init__() constructors
 | 
					 | 
				
			||||||
instead of init() methods.  THIS IS AN INCOMPATIBLE CHANGE!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Some minor changes and bugfixes module ftplib (mostly Steve
 | 
					 | 
				
			||||||
Majewski's suggestions); the debug() method is renamed to
 | 
					 | 
				
			||||||
set_debuglevel().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Some new test modules (not run automatically by testall though):
 | 
					 | 
				
			||||||
test_audioop, test_md5, test_rgbimg, test_select.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Module string now defines rindex() and rfind() in analogy of index()
 | 
					 | 
				
			||||||
and find().  It also defines atof() and atol() (and corresponding
 | 
					 | 
				
			||||||
exceptions) in analogy to atoi().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Added help() functions to modules profile and pdb.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The wdb debugger (now in Lib/stdwin) now shows class or instance
 | 
					 | 
				
			||||||
variables on a double click.  Thanks to Sjoerd Mullender!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The (undocumented) module lambda has gone -- you couldn't import it
 | 
					 | 
				
			||||||
any more, and it was basically more a demo than a library module...
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Multimedia extensions
 | 
					 | 
				
			||||||
---------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The optional built-in modules audioop and imageop are now standard
 | 
					 | 
				
			||||||
parts of the interpreter.  Thanks to Sjoerd Mullender and Jack Jansen
 | 
					 | 
				
			||||||
for contributing this code!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There's a new operation in audioop: minmax().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There's a new built-in module called rgbimg which supports portable
 | 
					 | 
				
			||||||
efficient reading of SGI RCG image files.  Thanks also to Paul
 | 
					 | 
				
			||||||
Haeberli for the original code!  (Who will contribute a GIF reader?)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The module aifc is gone -- you should now always use aifc, which has
 | 
					 | 
				
			||||||
received a facelift.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There's a new module sunau., for reading Sun (and NeXT) audio files.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There's a new module audiodev which provides a uniform interface to
 | 
					 | 
				
			||||||
(SGI Indigo and Sun Sparc) audio hardware.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There's a new module sndhdr which recognizes various sound files by
 | 
					 | 
				
			||||||
looking in their header and checking for various magic words.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Optimizations
 | 
					 | 
				
			||||||
-------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Most optimizations below can be configured by compile-time flags.
 | 
					 | 
				
			||||||
Thanks to Sjoerd Mullender for submitting these optimizations!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Small integers (default -1..99) are shared -- i.e. if two different
 | 
					 | 
				
			||||||
functions compute the same value it is possible (but not
 | 
					 | 
				
			||||||
guaranteed!!!) that they return the same *object*.  Python programs
 | 
					 | 
				
			||||||
can detect this but should *never* rely on it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Empty tuples (which all compare equal) are shared in the same
 | 
					 | 
				
			||||||
manner.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Tuples of size up to 20 (default) are put in separate free lists
 | 
					 | 
				
			||||||
when deallocated.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* There is a compile-time option to cache a string's hash function,
 | 
					 | 
				
			||||||
but this appeared to have a negligeable effect, and as it costs 4
 | 
					 | 
				
			||||||
bytes per string it is disabled by default.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Embedding Python
 | 
					 | 
				
			||||||
----------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The initialization interface has been simplified somewhat.  You now
 | 
					 | 
				
			||||||
only call "initall()" to initialize the interpreter.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The previously announced renaming of externally visible identifiers
 | 
					 | 
				
			||||||
has not been carried out.  It will happen in a later release.  Sorry.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Miscellaneous bugs that have been fixed
 | 
					 | 
				
			||||||
---------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* All known portability bugs.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Version 0.9.9 dumped core in <listobject>.sort() which has been
 | 
					 | 
				
			||||||
fixed.  Thanks to Jaap Vermeulen for fixing this and posting the fix
 | 
					 | 
				
			||||||
on the mailing list while I was away!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Core dump on a format string ending in '%', e.g. in the expression
 | 
					 | 
				
			||||||
'%' % None.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The array module yielded a bogus result for concatenation (a+b would
 | 
					 | 
				
			||||||
yield a+a).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Some serious memory leaks in strop.split() and strop.splitfields().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Several problems with the nis module.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Subtle problem when copying a class method from another class
 | 
					 | 
				
			||||||
through assignment (the method could not be called).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Remaining bugs
 | 
					 | 
				
			||||||
--------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* One problem with 64-bit machines remains -- since .pyc files are
 | 
					 | 
				
			||||||
portable and use only 4 bytes to represent an integer object, 64-bit
 | 
					 | 
				
			||||||
integer literals are silently truncated when written into a .pyc file.
 | 
					 | 
				
			||||||
Work-around: use eval('123456789101112').
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The freeze script doesn't work any more.  A new and more portable
 | 
					 | 
				
			||||||
one can probably be cooked up using tricks from Extensions/mkext.py.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The dos support hasn't been tested yet.  (Really Soon Now we should
 | 
					 | 
				
			||||||
have a PC with a working C compiler!)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--Guido van Rossum, CWI, Amsterdam <Guido.van.Rossum@cwi.nl>
 | 
					--Guido van Rossum, CWI, Amsterdam <Guido.van.Rossum@cwi.nl>
 | 
				
			||||||
URL:  <http://www.cwi.nl/cwi/people/Guido.van.Rossum.html>
 | 
					URL:  <http://www.cwi.nl/cwi/people/Guido.van.Rossum.html>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue