================================ ==> Release 1.1 (6 Oct 1994) <== ================================ This release adds several new features, improved configuration and portability, and more fixed bugs than I can list here (including some memory leaks). The source compiles and runs out of the box on more platforms than ever -- including Windows NT. Makefiles or projects for a variety of non-UNIX platforms are provided. Apology: many new features are badly documented or not at all. I had the choice -- postpone the new release indefinitely, or release it now, with working code but some undocumented areas... New language features: - More flexible operator overloading for user-defined classes (INCOMPATIBLE WITH PREVIOUS VERSIONS!) See end of tutorial. - Classes can define methods named __getattr__, __setattr__ and __delattr__ to trap attribute accesses. See end of tutorial. - Classes can define method __call__ so instances can be called directly. See end of tutorial. New support facilities: - The Makefiles (for the base interpreter as well as for extensions) now support creating dynamically loadable modules if the platform supports shared libraries. - Passing the interpreter a .pyc file as script argument will execute the code in that file. (On the Mac such files can be double-clicked!) - New Freeze script, to create independently distributable "binaries" of Python programs -- look in Demo/freeze - Improved h2py script (in Demo/scripts) follows #includes and supports macros with one argument - New module compileall generates .pyc files for all modules in a directory (tree) without also executing them - Threads should work on more platforms New built-in modules: - tkinter (support for Tcl's Tk widget set) is now part of the base distribution - signal allows catching or ignoring UNIX signals (unfortunately still undocumented -- any taker?) - termios provides portable access to POSIX tty settings - curses provides an interface to the System V curses library - syslog provides an interface to the (BSD?) syslog daemon - 'new' provides interfaces to create new built-in object types (e.g. modules and functions) - sybase provides an interface to SYBASE database New/obsolete built-in methods: - callable(x) tests whether x can be called - sockets now have a setblocking() method - sockets no longer have an allowbroadcast() method - socket methods send() and sendto() return byte count New standard library modules: - types.py defines standard names for built-in types, e.g. StringType - urlparse.py parses URLs according to the latest Internet draft - uu.py does uuencode/uudecode (not the fastest in the world, but quicker than installing uuencode on a non-UNIX machine :-) - New, faster and more powerful profile module.py - mhlib.py provides interface to MH folders and messages New facilities for extension writers (unfortunately still undocumented): - newgetargs() supports optional arguments and improved error messages - O!, O& O? formats for getargs allow more versatile type checking of non-standard types - can register pending asynchronous callback, to be called the next time the Python VM begins a new instruction (Py_AddPendingCall) - can register cleanup routines to be called when Python exits (Py_AtExit) - makesetup script understands C++ files in Setup file (use file.C or file.cc) - Make variable OPT is passed on to sub-Makefiles - An init() routine may signal an error by not entering the module in the module table and raising an exception instead - For long module names, instead of foobarbletchmodule.c you can use foobarbletch.c - getintvalue() and getfloatvalue() try to convert any object instead of requiring an "intobject" or "floatobject" - All the [new]getargs() formats that retrieve an integer value will now also work if a float is passed - C function listtuple() converts list to tuple, fast - You should now call sigcheck() instead of intrcheck(); sigcheck() also sets an exception when it returns nonzero ==================================== ==> Release 1.0.3 (14 July 1994) <== ==================================== This release consists entirely of bug fixes to the C sources; see the head of ../ChangeLog for a complete list. Most important bugs fixed: - Sometimes the format operator (string%expr) would drop the last character of the format string - Tokenizer looped when last line did not end in \n - Bug when triple-quoted string ended in quote plus newline - Typo in socketmodule (listen) (== instead of =) - typing vars() at the >>> prompt would cause recursive output ================================== ==> Release 1.0.2 (4 May 1994) <== ================================== Overview of the most visible changes. Bug fixes are not listed. See also ChangeLog. Tokens ------ * String literals follow Standard C rules: they may be continued on the next line using a backslash; adjacent literals are concatenated at compile time. * A new kind of string literals, surrounded by triple quotes (""" or '''), can be continued on the next line without a backslash. Syntax ------ * Function arguments may have a default value, e.g. def f(a, b=1); defaults are evaluated at function definition time. This also applies to lambda. * The try-except statement has an optional else clause, which is executed when no exception occurs in the try clause. Interpreter ----------- * The result of a statement-level expression is no longer printed, except_ for expressions entered interactively. Consequently, the -k command line option is gone. * The result of the last printed interactive expression is assigned to the variable '_'. * Access to implicit global variables has been speeded up by removing an always-failing dictionary lookup in the dictionary of local variables (mod suggested by Steve Makewski and Tim Peters). * There is a new command line option, -u, to force stdout and stderr to be unbuffered. * Incorporated Steve Majewski's mods to import.c for dynamic loading under AIX. * Fewer chances of dumping core when trying to reload or re-import static built-in, dynamically loaded built-in, or frozen modules. * Loops over sequences now don't ask for the sequence's length when they start, but try to access items 0, 1, 2, and so on until they hit an IndexError. This makes it possible to create classes that generate infinite or indefinite sequences a la Steve Majewski. This affects for loops, the (not) in operator, and the built-in functions filter(), map(), max(), min(), reduce(). Changed Built-in operations --------------------------- * The '%' operator on strings (printf-style formatting) supports a new feature (adapted from a patch by Donald Beaudry) to allow '%()' % {...} 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 , where 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 -- 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 : yields an anonymous function. This is really only syntactic sugar; you can just as well define a local function using def some_temporary_name(): return 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 "\(...\)", 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 .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 URL: