blob: 287b50c72847eb3477bc05eb793eea394f284aad [file] [log] [blame]
Jeremy Hyltoned9e6442000-10-09 18:26:42 +00001What's New in Python 2.0c1?
Guido van Rossum61000331997-08-15 04:39:58 +00002===========================
3
Guido van Rossum8ed602b2000-09-01 22:34:33 +00004Below is a list of all relevant changes since release 1.6. Older
Guido van Rossumf2ffce02000-09-05 04:38:34 +00005changes are in the file HISTORY. If you are making the jump directly
6from Python 1.5.2 to 2.0, make sure to read the section for 1.6 in the
7HISTORY file! Many important changes listed there.
Guido van Rossum61000331997-08-15 04:39:58 +00008
Guido van Rossumf2ffce02000-09-05 04:38:34 +00009Alternatively, a good overview of the changes between 1.5.2 and 2.0 is
10the document "What's New in Python 2.0" by Kuchling and Moshe Zadka:
11http://starship.python.net/crew/amk/python/writing/new-python/.
Guido van Rossum1f83cce1997-10-06 21:04:35 +000012
Guido van Rossumf2ffce02000-09-05 04:38:34 +000013--Guido van Rossum (home page: http://www.pythonlabs.com/~guido/)
Guido van Rossum437cfe81999-04-08 20:17:57 +000014
15======================================================================
16
Jeremy Hyltoned9e6442000-10-09 18:26:42 +000017What's new in 2.0 release candidate 1 (since beta 2)?
18=====================================================
19
20All the changes since the last beta release are bug fixes or changes
21to build support for specific platforms.
22
23Core language, builtins, and interpreter
24
25- A bug that caused crashes when __coerce__ was used with augmented
26 assignment, e.g. +=, was fixed.
27
28- Raise ZeroDivisionError when raising zero to a negative number,
29 e.g. 0.0 ** -2.0. Note that math.pow is unrelated to the builtin
30 power operator and the result of math.pow(0.0, -2.0) will vary by
31 platform. On Linux, it raises a ValueError.
32
33- A bug in Unicode string interpolation was fixed that occasionally
34 caused errors with formats including "%%". For example, the
35 following expression "%% %s" % u"abc" no longer raises a TypeError.
36
37- Compilation of deeply nested expressions raises MemoryError instead
38 of SyntaxError, e.g. eval("[" * 50 + "]" * 50).
39
40- In 2.0b2 on Windows, the interpreter wrote .pyc files in text mode,
41 rendering them useless. They are now written in binary mode again.
42
43Standard library
44
45- Keyword arguments are now accepted for most pattern and match object
46 methods in SRE, the standard regular expression engine.
47
48- In SRE, fix error with negative lookahead and lookbehind that
49 manifested itself as a runtime error in patterns like "?<!abc)(def)".
50
51- Tkinter now supports Unicode strings and will set a Python exception
52 when an error occurs handling a specific Unicode string.
53
54- Fix memory management errors in Merge() and Tkapp_Call() routines.
55
56- Several changes were made to cStringIO to make it compatible with
57 the file-like object interface and with StringIO. If operations are
58 performed on a closed object, an exception is raised. The truncate
59 method now accepts a position argument and readline accepts a size
60 argument.
61
62- There were many changes made to the linuxaudiodev module and its
63 test suite; as a result, a short, unexpected audio sample should now
64 play when the regression test is run.
65
66 Note that this module is named poorly, because it should work
67 correctly on any platform that supports the Open Sound System
68 (OSS).
69
70 The module now raises exceptions when errors occur instead of
71 crashing. It also defines the AFMT_A_LAW format (logarithmic A-law
72 audio) and defines a getptr() method that calls the
73 SNDCTL_DSP_GETxPTR ioctl defined in the OSS Programmer's Guide.
74
75- The library_version attribute, introduced in an earlier beta, was
76 removed because it can not be supported with early versions of the C
77 readline library, which provides no way to determine the version at
78 compile-time.
79
80- The binascii module is now enabled on Win64.
81
82Internals
83
84- Fix several buffer overflow vulnerabilities in calculate_path(),
85 which is called when the interpreter starts up to determine where
86 the standard library is installed. These vulnerabilities affect all
87 previous versions of Python and can be exploited by setting very
88 long values for PYTHONHOME or argv[0]. The risk is greatest for a
89 setuid Python script, although use of the wrapper in
90 Misc/setuid-prog.c will eliminate the vulnerability.
91
92- Fixed garbage collection bugs in instance creation that were
93 triggered when errors occurred during initialization. The solution,
94 applied in cPickle and in PyInstance_New(), is to call
95 PyObject_GC_Init() after the initialization of the object's
96 container attributes is complete.
97
98- pyexpat adds definitions of PyModule_AddStringConstant and
99 PyModule_AddObject if the Python version is less than 2.0, which
100 provides compatibility with PyXML on Python 1.5.2.
101
102- If the platform has a bogus definition for LONG_BIT (the number of
103 bits in a long), an error will be reported at compile time.
104
105- Fix bugs in _PyTuple_Resize() which caused hard-to-interpret garbage
106 collection crashes and possibly other, unreported crashes.
107
108- Fixed a memory leak in _PyUnicode_Fini().
109
110Build issues
111
112- configure now accepts a --with-suffix option that specifies the
113 executable. This is useful for builds on Cygwin and Mac OS X, for
114 example.
115
116- The mmap.PAGESIZE constant is now initialized using sysconf when
117 possible, which eliminates a dependency on -lucb for Reliant UNIX.
118
119- The md5 file should now compile on all platforms.
120
121- The select module now compiles on platforms that do not define
122 POLLRDNORM and related constants.
123
124- Darwin (Mac OS X): Initial support for static builds on this
125 platform.
126
Jeremy Hylton10921202000-10-09 18:34:12 +0000127- BeOS: A number of changes were made to the build and installation
128 process. ar-fake now operates on a directory of object files.
129 dl_export.h is gone, and its macros now appear on the mwcc command
130 line during build on PPC BeOS.
131
132 Platform directory in lib/python2.0 is "plat-beos5" (or
133 "plat-beos4", if building on BeOS 4.5), rather than "plat-beos".
Jeremy Hyltoned9e6442000-10-09 18:26:42 +0000134
135- Cygwin: Support for shared libraries, Tkinter, and sockets.
136
137- SunOS 4.1.4_JL: Fix test for directory existence in configure.
138
139Tools and other miscellany
140
141- Removed debugging prints from main used with freeze.
142
143- IDLE auto-indent internals no longer crashes when it encounters
144 Unicode characters in the range 128 to 255.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000145
146What's new in 2.0 beta 2 (since beta 1)?
147========================================
148
149Core language, builtins, and interpreter
150
Tim Peters482c0212000-09-26 06:33:09 +0000151- Add support for unbounded ints in %d,i,u,x,X,o formats; for example
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000152 "%d" % 2L**64 == "18446744073709551616".
Jeremy Hylton1b618592000-09-26 05:32:36 +0000153
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000154- Add -h and -V command line options to print the usage message and
155 Python version number and exit immediately.
156
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000157- eval() and exec accept Unicode objects as code parameters.
158
159- getattr() and setattr() now also accept Unicode objects for the
160 attribute name, which are converted to strings using the default
161 encoding before lookup.
162
163- Multiplication on string and Unicode now does proper bounds
164 checking; e.g. 'a' * 65536 * 65536 will raise ValueError, "repeated
165 string is too long."
166
167- Better error message when continue is found in try statement in a
168 loop.
169
Jeremy Hylton1b618592000-09-26 05:32:36 +0000170
171Standard library and extensions
172
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000173- array: reverse() method of array now works. buffer_info() now does
Jeremy Hylton1b618592000-09-26 05:32:36 +0000174 argument checking; it still takes no arguments.
175
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000176- asyncore/asynchat: Included most recent version from Sam Rushing.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000177
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000178- cgi: Accept '&' or ';' as separator characters when parsing form data.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000179
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000180- CGIHTTPServer: Now works on Windows (and perhaps even Mac).
Jeremy Hylton1b618592000-09-26 05:32:36 +0000181
182- ConfigParser: When reading the file, options spelled in upper case
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000183 letters are now correctly converted to lowercase.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000184
185- copy: Copy Unicode objects atomically.
186
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000187- cPickle: Fail gracefully when copy_reg can't be imported.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000188
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000189- cStringIO: Implemented readlines() method.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000190
Fred Drake67233bc2000-09-26 16:40:27 +0000191- dbm: Add get() and setdefault() methods to dbm object. Add constant
192 `library' to module that names the library used. Added doc strings
193 and method names to error messages. Uses configure to determine
194 which ndbm.h file to include; Berkeley DB's nbdm and GDBM's ndbm is
195 now available options.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000196
197- distutils: Update to version 0.9.3.
198
199- dl: Add several dl.RTLD_ constants.
200
201- fpectl: Now supported on FreeBSD.
202
203- gc: Add DEBUG_SAVEALL option. When enabled all garbage objects
204 found by the collector will be saved in gc.garbage. This is useful
205 for debugging a program that creates reference cycles.
206
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000207- httplib: Three changes: Restore support for set_debuglevel feature
Jeremy Hylton1b618592000-09-26 05:32:36 +0000208 of HTTP class. Do not close socket on zero-length response. Do not
209 crash when server sends invalid content-length header.
210
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000211- mailbox: Mailbox class conforms better to qmail specifications.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000212
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000213- marshal: When reading a short, sign-extend on platforms where shorts
214 are bigger than 16 bits. When reading a long, repair the unportable
215 sign extension that was being done for 64-bit machines. (It assumed
216 that signed right shift sign-extends.)
217
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000218- operator: Add contains(), invert(), __invert__() as aliases for
219 __contains__(), inv(), and __inv__() respectively.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000220
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000221- os: Add support for popen2() and popen3() on all platforms where
222 fork() exists. (popen4() is still in the works.)
Jeremy Hylton1b618592000-09-26 05:32:36 +0000223
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000224- os: (Windows only:) Add startfile() function that acts like double-
Tim Peters482c0212000-09-26 06:33:09 +0000225 clicking on a file in Explorer (or passing the file name to the
226 DOS "start" command).
Jeremy Hylton1b618592000-09-26 05:32:36 +0000227
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000228- os.path: (Windows, DOS:) Treat trailing colon correctly in
Tim Peters482c0212000-09-26 06:33:09 +0000229 os.path.join. os.path.join("a:", "b") yields "a:b".
Jeremy Hylton1b618592000-09-26 05:32:36 +0000230
231- pickle: Now raises ValueError when an invalid pickle that contains
232 a non-string repr where a string repr was expected. This behavior
233 matches cPickle.
234
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000235- posixfile: Remove broken __del__() method.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000236
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000237- py_compile: support CR+LF line terminators in source file.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000238
239- readline: Does not immediately exit when ^C is hit when readline and
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000240 threads are configured. Adds definition of rl_library_version. (The
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000241 latter addition requires GNU readline 2.2 or later.)
Jeremy Hylton1b618592000-09-26 05:32:36 +0000242
243- rfc822: Domain literals returned by AddrlistClass method
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000244 getdomainliteral() are now properly wrapped in brackets.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000245
246- site: sys.setdefaultencoding() should only be called in case the
Tim Peters482c0212000-09-26 06:33:09 +0000247 standard default encoding ("ascii") is changed. This saves quite a
Jeremy Hylton1b618592000-09-26 05:32:36 +0000248 few cycles during startup since the first call to
249 setdefaultencoding() will initialize the codec registry and the
250 encodings package.
251
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000252- socket: Support for size hint in readlines() method of object returned
253 by makefile().
Jeremy Hylton1b618592000-09-26 05:32:36 +0000254
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000255- sre: Added experimental expand() method to match objects. Does not
Jeremy Hylton625915e2000-10-02 13:43:33 +0000256 use buffer interface on Unicode strings. Does not hang if group id
Jeremy Hylton1b618592000-09-26 05:32:36 +0000257 is followed by whitespace.
258
Fred Drake64bb3802000-09-26 16:21:35 +0000259- StringIO: Size hint in readlines() is now supported as documented.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000260
261- struct: Check ranges for bytes and shorts.
262
263- urllib: Improved handling of win32 proxy settings. Fixed quote and
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000264 quote_plus functions so that the always encode a comma.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000265
266- Tkinter: Image objects are now guaranteed to have unique ids. Set
267 event.delta to zero if Tk version doesn't support mousewheel.
268 Removed some debugging prints.
269
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000270- UserList: now implements __contains__().
Jeremy Hylton1b618592000-09-26 05:32:36 +0000271
Fred Drake67233bc2000-09-26 16:40:27 +0000272- webbrowser: On Windows, use os.startfile() instead of os.popen(),
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000273 which works around a bug in Norton AntiVirus 2000 that leads directly
274 to a Blue Screen freeze.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000275
276- xml: New version detection code allows PyXML to override standard
277 XML package if PyXML version is greater than 0.6.1.
278
Fred Drake64bb3802000-09-26 16:21:35 +0000279- xml.dom: DOM level 1 support for basic XML. Includes xml.dom.minidom
280 (conventional DOM), and xml.dom.pulldom, which allows building the DOM
281 tree only for nodes which are sufficiently interesting to a specific
282 application. Does not provide the HTML-specific extensions. Still
283 undocumented.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000284
Fred Drake64bb3802000-09-26 16:21:35 +0000285- xml.sax: SAX 2 support for Python, including all the handler
286 interfaces needed to process XML 1.0 compliant XML. Some
287 documentation is already available.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000288
Fred Drake64bb3802000-09-26 16:21:35 +0000289- pyexpat: Renamed to xml.parsers.expat since this is part of the new,
290 packagized XML support.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000291
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000292
Jeremy Hylton1b618592000-09-26 05:32:36 +0000293C API
294
295- Add three new convenience functions for module initialization --
296 PyModule_AddObject(), PyModule_AddIntConstant(), and
297 PyModule_AddStringConstant().
298
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000299- Cleaned up definition of NULL in C source code; all definitions were
Jeremy Hylton1b618592000-09-26 05:32:36 +0000300 removed and add #error to Python.h if NULL isn't defined after
301 #include of stdio.h.
302
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000303- Py_PROTO() macros that were removed in 2.0b1 have been restored for
Jeremy Hylton1b618592000-09-26 05:32:36 +0000304 backwards compatibility (at the source level) with old extensions.
305
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000306- A wrapper API was added for signal() and sigaction(). Instead of
307 either function, always use PyOS_getsig() to get a signal handler
308 and PyOS_setsig() to set one. A new convenience typedef
309 PyOS_sighandler_t is defined for the type of signal handlers.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000310
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000311- Add PyString_AsStringAndSize() function that provides access to the
Jeremy Hylton1b618592000-09-26 05:32:36 +0000312 internal data buffer and size of a string object -- or the default
313 encoded version of a Unicode object.
314
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000315- PyString_Size() and PyString_AsString() accept Unicode objects.
316
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000317- The standard header <limits.h> is now included by Python.h (if it
Fred Drake64bb3802000-09-26 16:21:35 +0000318 exists). INT_MAX and LONG_MAX will always be defined, even if
319 <limits.h> is not available.
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000320
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000321- PyFloat_FromString takes a second argument, pend, that was
322 effectively useless. It is now officially useless but preserved for
323 backwards compatibility. If the pend argument is not NULL, *pend is
324 set to NULL.
325
326- PyObject_GetAttr() and PyObject_SetAttr() now accept Unicode objects
327 for the attribute name. See note on getattr() above.
328
329- A few bug fixes to argument processing for Unicode.
330 PyArg_ParseTupleAndKeywords() now accepts "es#" and "es".
331 PyArg_Parse() special cases "s#" for Unicode objects; it returns a
332 pointer to the default encoded string data instead of to the raw
333 UTF-16.
334
335- Py_BuildValue accepts B format (for bgen-generated code).
336
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000337
Jeremy Hylton1b618592000-09-26 05:32:36 +0000338Internals
339
340- On Unix, fix code for finding Python installation directory so that
341 it works when argv[0] is a relative path.
342
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000343- Added a true tnicode_internal_encode() function and fixed the
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000344 unicode_internal_decode function() to support Unicode objects directly
Jeremy Hylton1b618592000-09-26 05:32:36 +0000345 rather than by generating a copy of the object.
346
Tim Peters482c0212000-09-26 06:33:09 +0000347- Several of the internal Unicode tables are much smaller now, and
348 the source code should be much friendlier to weaker compilers.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000349
Jeremy Hylton97693b02000-09-26 17:42:51 +0000350- In the garbage collector: Fixed bug in collection of tuples. Fixed
351 bug that caused some instances to be removed from the container set
352 while they were still live. Fixed parsing in gc.set_debug() for
353 platforms where sizeof(long) > sizeof(int).
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000354
355- Fixed refcount problem in instance deallocation that only occurred
356 when Py_REF_DEBUG was defined and Py_TRACE_REFS was not.
357
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000358- On Windows, getpythonregpath is now protected against null data in
359 registry key.
360
361- On Unix, create .pyc/.pyo files with O_EXCL flag to avoid a race
362 condition.
363
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000364
Jeremy Hylton1b618592000-09-26 05:32:36 +0000365Build and platform-specific issues
366
367- Better support of GNU Pth via --with-pth configure option.
368
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000369- Python/C API now properly exposed to dynamically-loaded extension
370 modules on Reliant UNIX.
Jeremy Hylton1b618592000-09-26 05:32:36 +0000371
372- Changes for the benefit of SunOS 4.1.4 (really!). mmapmodule.c:
373 Don't define MS_SYNC to be zero when it is undefined. Added missing
374 prototypes in posixmodule.c.
375
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000376- Improved support for HP-UX build. Threads should now be correctly
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000377 configured (on HP-UX 10.20 and 11.00).
Jeremy Hylton1b618592000-09-26 05:32:36 +0000378
Jeremy Hyltonfa2e2c12000-09-26 16:31:30 +0000379- Fix largefile support on older NetBSD systems and OpenBSD by adding
380 define for TELL64.
381
382
383Tools and other miscellany
384
385- ftpmirror: Call to main() is wrapped in if __name__ == "__main__".
386
387- freeze: The modulefinder now works with 2.0 opcodes.
388
389- IDLE:
390 Move hackery of sys.argv until after the Tk instance has been
391 created, which allows the application-specific Tkinter
392 initialization to be executed if present; also pass an explicit
393 className parameter to the Tk() constructor.
Fred Drake64bb3802000-09-26 16:21:35 +0000394
Jeremy Hylton1b618592000-09-26 05:32:36 +0000395
396What's new in 2.0 beta 1?
397=========================
398
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000399Source Incompatibilities
400------------------------
401
402None. Note that 1.6 introduced several incompatibilities with 1.5.2,
403such as single-argument append(), connect() and bind(), and changes to
404str(long) and repr(float).
405
406
407Binary Incompatibilities
408------------------------
409
410- Third party extensions built for Python 1.5.x or 1.6 cannot be used
411with Python 2.0; these extensions will have to be rebuilt for Python
4122.0.
413
414- On Windows, attempting to import a third party extension built for
415Python 1.5.x or 1.6 results in an immediate crash; there's not much we
416can do about this. Check your PYTHONPATH environment variable!
417
418- Python bytecode files (*.pyc and *.pyo) are not compatible between
419releases.
420
421
422Overview of Changes Since 1.6
423-----------------------------
424
425There are many new modules (including brand new XML support through
426the xml package, and i18n support through the gettext module); a list
427of all new modules is included below. Lots of bugs have been fixed.
428
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000429The process for making major new changes to the language has changed
430since Python 1.6. Enhancements must now be documented by a Python
431Enhancement Proposal (PEP) before they can be accepted.
432
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000433There are several important syntax enhancements, described in more
434detail below:
435
436 - Augmented assignment, e.g. x += 1
437
438 - List comprehensions, e.g. [x**2 for x in range(10)]
439
440 - Extended import statement, e.g. import Module as Name
441
442 - Extended print statement, e.g. print >> file, "Hello"
443
444Other important changes:
445
446 - Optional collection of cyclical garbage
447
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000448Python Enhancement Proposal (PEP)
449---------------------------------
450
451PEP stands for Python Enhancement Proposal. A PEP is a design
452document providing information to the Python community, or describing
453a new feature for Python. The PEP should provide a concise technical
454specification of the feature and a rationale for the feature.
455
456We intend PEPs to be the primary mechanisms for proposing new
457features, for collecting community input on an issue, and for
458documenting the design decisions that have gone into Python. The PEP
459author is responsible for building consensus within the community and
460documenting dissenting opinions.
461
462The PEPs are available at http://python.sourceforge.net/peps/.
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000463
464Augmented Assignment
465--------------------
466
467This must have been the most-requested feature of the past years!
468Eleven new assignment operators were added:
469
Guido van Rossume905e952000-09-05 12:42:46 +0000470 += -= *= /= %= **= <<= >>= &= ^= |=
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000471
472For example,
473
474 A += B
475
476is similar to
477
478 A = A + B
479
480except that A is evaluated only once (relevant when A is something
481like dict[index].attr).
482
483However, if A is a mutable object, A may be modified in place. Thus,
484if A is a number or a string, A += B has the same effect as A = A+B
485(except A is only evaluated once); but if a is a list, A += B has the
486same effect as A.extend(B)!
487
488Classes and built-in object types can override the new operators in
489order to implement the in-place behavior; the not-in-place behavior is
490used automatically as a fallback when an object doesn't implement the
491in-place behavior. For classes, the method name is derived from the
492method name for the corresponding not-in-place operator by inserting
493an 'i' in front of the name, e.g. __iadd__ implements in-place
494__add__.
495
496Augmented assignment was implemented by Thomas Wouters.
497
498
499List Comprehensions
500-------------------
501
502This is a flexible new notation for lists whose elements are computed
503from another list (or lists). The simplest form is:
504
505 [<expression> for <variable> in <sequence>]
506
Guido van Rossum56db0952000-09-06 23:34:25 +0000507For example, [i**2 for i in range(4)] yields the list [0, 1, 4, 9].
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000508This is more efficient than a for loop with a list.append() call.
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000509
510You can also add a condition:
511
512 [<expression> for <variable> in <sequence> if <condition>]
513
514For example, [w for w in words if w == w.lower()] would yield the list
515of words that contain no uppercase characters. This is more efficient
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000516than a for loop with an if statement and a list.append() call.
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000517
518You can also have nested for loops and more than one 'if' clause. For
519example, here's a function that flattens a sequence of sequences::
520
521 def flatten(seq):
522 return [x for subseq in seq for x in subseq]
523
524 flatten([[0], [1,2,3], [4,5], [6,7,8,9], []])
525
526This prints
527
528 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
529
530List comprehensions originated as a patch set from Greg Ewing; Skip
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000531Montanaro and Thomas Wouters also contributed. Described by PEP 202.
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000532
533
534Extended Import Statement
535-------------------------
536
537Many people have asked for a way to import a module under a different
538name. This can be accomplished like this:
539
540 import foo
541 bar = foo
542 del foo
543
544but this common idiom gets old quickly. A simple extension of the
545import statement now allows this to be written as follows:
546
547 import foo as bar
548
549There's also a variant for 'from ... import':
550
551 from foo import bar as spam
552
553This also works with packages; e.g. you can write this:
554
555 import test.regrtest as regrtest
556
557Note that 'as' is not a new keyword -- it is recognized only in this
558context (this is only possible because the syntax for the import
559statement doesn't involve expressions).
560
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000561Implemented by Thomas Wouters. Described by PEP 221.
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000562
563
564Extended Print Statement
565------------------------
566
567Easily the most controversial new feature, this extension to the print
568statement adds an option to make the output go to a different file
569than the default sys.stdout.
570
571For example, to write an error message to sys.stderr, you can now
572write:
573
574 print >> sys.stderr, "Error: bad dog!"
575
576As a special feature, if the expression used to indicate the file
Fred Drake45888ff2000-09-29 17:09:11 +0000577evaluates to None, the current value of sys.stdout is used. Thus:
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000578
579 print >> None, "Hello world"
580
581is equivalent to
582
583 print "Hello world"
584
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000585Design and implementation by Barry Warsaw. Described by PEP 214.
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000586
587
588Optional Collection of Cyclical Garbage
589---------------------------------------
590
591Python is now equipped with a garbage collector that can hunt down
592cyclical references between Python objects. It's no replacement for
593reference counting; in fact, it depends on the reference counts being
594correct, and decides that a set of objects belong to a cycle if all
595their reference counts can be accounted for from their references to
596each other. This devious scheme was first proposed by Eric Tiedemann,
597and brought to implementation by Neil Schemenauer.
598
599There's a module "gc" that lets you control some parameters of the
600garbage collection. There's also an option to the configure script
601that lets you enable or disable the garbage collection. In 2.0b1,
602it's on by default, so that we (hopefully) can collect decent user
603experience with this new feature. There are some questions about its
Fred Drake9f11cf82000-09-29 17:54:40 +0000604performance. If it proves to be too much of a problem, we'll turn it
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000605off by default in the final 2.0 release.
606
607
608Smaller Changes
609---------------
610
611A new function zip() was added. zip(seq1, seq2, ...) is equivalent to
612map(None, seq1, seq2, ...) when the sequences have the same length;
613i.e. zip([1,2,3], [10,20,30]) returns [(1,10), (2,20), (3,30)]. When
614the lists are not all the same length, the shortest list wins:
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000615zip([1,2,3], [10,20]) returns [(1,10), (2,20)]. See PEP 201.
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000616
617sys.version_info is a tuple (major, minor, micro, level, serial).
618
619Dictionaries have an odd new method, setdefault(key, default).
620dict.setdefault(key, default) returns dict[key] if it exists; if not,
621it sets dict[key] to default and returns that value. Thus:
622
623 dict.setdefault(key, []).append(item)
624
625does the same work as this common idiom:
626
627 if not dict.has_key(key):
628 dict[key] = []
629 dict[key].append(item)
630
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000631There are two new variants of SyntaxError that are raised for
632indentation-related errors: IndentationError and TabError.
633
634Changed \x to consume exactly two hex digits; see PEP 223. Added \U
635escape that consumes exactly eight hex digits.
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000636
637The limits on the size of expressions and file in Python source code
638have been raised from 2**16 to 2**32. Previous versions of Python
639were limited because the maximum argument size the Python VM accepted
640was 2**16. This limited the size of object constructor expressions,
641e.g. [1,2,3] or {'a':1, 'b':2}, and the size of source files. This
642limit was raised thanks to a patch by Charles Waldman that effectively
643fixes the problem. It is now much more likely that you will be
644limited by available memory than by an arbitrary limit in Python.
645
646The interpreter's maximum recursion depth can be modified by Python
647programs using sys.getrecursionlimit and sys.setrecursionlimit. This
648limit is the maximum number of recursive calls that can be made by
649Python code. The limit exists to prevent infinite recursion from
650overflowing the C stack and causing a core dump. The default value is
6511000. The maximum safe value for a particular platform can be found
652by running Misc/find_recursionlimit.py.
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000653
654New Modules and Packages
655------------------------
656
657atexit - for registering functions to be called when Python exits.
658
659imputil - Greg Stein's alternative API for writing custom import
660hooks.
661
662pyexpat - an interface to the Expat XML parser, contributed by Paul
663Prescod.
664
665xml - a new package with XML support code organized (so far) in three
666subpackages: xml.dom, xml.sax, and xml.parsers. Describing these
667would fill a volume. There's a special feature whereby a
668user-installed package named _xmlplus overrides the standard
669xmlpackage; this is intended to give the XML SIG a hook to distribute
670backwards-compatible updates to the standard xml package.
671
672webbrowser - a platform-independent API to launch a web browser.
673
674
Guido van Rossume905e952000-09-05 12:42:46 +0000675Changed Modules
676---------------
677
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000678array -- new methods for array objects: count, extend, index, pop, and
679remove
680
681binascii -- new functions b2a_hex and a2b_hex that convert between
682binary data and its hex representation
683
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000684calendar -- Many new functions that support features including control
685over which day of the week is the first day, returning strings instead
686of printing them. Also new symbolic constants for days of week,
687e.g. MONDAY, ..., SUNDAY.
688
689cgi -- FieldStorage objects have a getvalue method that works like a
690dictionary's get method and returns the value attribute of the object.
691
692ConfigParser -- The parser object has new methods has_option,
693remove_section, remove_option, set, and write. They allow the module
694to be used for writing config files as well as reading them.
695
696ftplib -- ntransfercmd(), transfercmd(), and retrbinary() all now
Guido van Rossume905e952000-09-05 12:42:46 +0000697optionally support the RFC 959 REST command.
698
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000699gzip -- readline and readlines now accept optional size arguments
Guido van Rossume905e952000-09-05 12:42:46 +0000700
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000701httplib -- New interfaces and support for HTTP/1.1 by Greg Stein. See
702the module doc strings for details.
Guido van Rossum830ca2a2000-09-05 15:34:16 +0000703
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000704locale -- implement getdefaultlocale for Win32 and Macintosh
705
706marshal -- no longer dumps core when marshaling deeply nested or
707recursive data structures
708
709os -- new functions isatty, seteuid, setegid, setreuid, setregid
710
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000711os/popen2 -- popen2/popen3/popen4 support under Windows. popen2/popen3
712support under Unix.
713
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000714os/pty -- support for openpty and forkpty
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000715
716os.path -- fix semantics of os.path.commonprefix
717
718smtplib -- support for sending very long messages
719
720socket -- new function getfqdn()
721
722readline -- new functions to read, write and truncate history files.
723The readline section of the library reference manual contains an
724example.
725
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000726select -- add interface to poll system call
727
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000728shutil -- new copyfileobj function
729
730SimpleHTTPServer, CGIHTTPServer -- Fix problems with buffering in the
731HTTP server.
732
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000733Tkinter -- optimization of function flatten
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000734
735urllib -- scans environment variables for proxy configuration,
Tim Peters8b092332000-09-05 20:15:25 +0000736e.g. http_proxy.
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000737
738whichdb -- recognizes dumbdbm format
Guido van Rossume905e952000-09-05 12:42:46 +0000739
740
741Obsolete Modules
742----------------
743
744None. However note that 1.6 made a whole slew of modules obsolete:
745stdwin, soundex, cml, cmpcache, dircache, dump, find, grep, packmail,
746poly, zmod, strop, util, whatsound.
747
748
749Changed, New, Obsolete Tools
750----------------------------
751
Tim Peters8b092332000-09-05 20:15:25 +0000752None.
Guido van Rossume905e952000-09-05 12:42:46 +0000753
754
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000755C-level Changes
756---------------
757
758Several cleanup jobs were carried out throughout the source code.
759
760All C code was converted to ANSI C; we got rid of all uses of the
761Py_PROTO() macro, which makes the header files a lot more readable.
762
763Most of the portability hacks were moved to a new header file,
764pyport.h; several other new header files were added and some old
765header files were removed, in an attempt to create a more rational set
766of header files. (Few of these ever need to be included explicitly;
767they are all included by Python.h.)
768
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000769Trent Mick ensured portability to 64-bit platforms, under both Linux
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000770and Win64, especially for the new Intel Itanium processor. Mick also
771added large file support for Linux64 and Win64.
Guido van Rossumf2ffce02000-09-05 04:38:34 +0000772
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000773The C APIs to return an object's size have been update to consistently
774use the form PyXXX_Size, e.g. PySequence_Size and PyDict_Size. In
775previous versions, the abstract interfaces used PyXXX_Length and the
776concrete interfaces used PyXXX_Size. The old names,
777e.g. PyObject_Length, are still available for backwards compatibility
778at the API level, but are deprecated.
779
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000780The PyOS_CheckStack function has been implemented on Windows by
781Fredrik Lundh. It prevents Python from failing with a stack overflow
782on Windows.
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000783
784The GC changes resulted in creation of two new slots on object,
785tp_traverse and tp_clear. The augmented assignment changes result in
Guido van Rossum4338a282000-09-06 13:02:08 +0000786the creation of a new slot for each in-place operator.
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000787
788The GC API creates new requirements for container types implemented in
Guido van Rossum4338a282000-09-06 13:02:08 +0000789C extension modules. See Include/objimpl.h for details.
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000790
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000791PyErr_Format has been updated to automatically calculate the size of
792the buffer needed to hold the formatted result string. This change
793prevents crashes caused by programmer error.
Jeremy Hyltonbdebd542000-09-05 18:28:54 +0000794
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000795New C API calls: PyObject_AsFileDescriptor, PyErr_WriteUnraisable.
Guido van Rossume905e952000-09-05 12:42:46 +0000796
Jeremy Hylton24c3d602000-09-05 19:36:26 +0000797PyRun_AnyFileEx, PyRun_SimpleFileEx, PyRun_FileEx -- New functions
798that are the same as their non-Ex counterparts except they take an
799extra flag argument that tells them to close the file when done.
800
801XXX There were other API changes that should be fleshed out here.
Guido van Rossumab9d6f01998-08-10 22:01:13 +0000802
Tim Peters8b092332000-09-05 20:15:25 +0000803
804Windows Changes
805---------------
806
807New popen2/popen3/peopen4 in os module (see Changed Modules above).
808
809os.popen is much more usable on Windows 95 and 98. See Microsoft
810Knowledge Base article Q150956. The Win9x workaround described there
811is implemented by the new w9xpopen.exe helper in the root of your
812Python installation. Note that Python uses this internally; it is not
813a standalone program.
814
815Administrator privileges are no longer required to install Python
816on Windows NT or Windows 2000. If you have administrator privileges,
817Python's registry info will be written under HKEY_LOCAL_MACHINE.
818Otherwise the installer backs off to writing Python's registry info
Guido van Rossum4338a282000-09-06 13:02:08 +0000819under HKEY_CURRENT_USER. The latter is sufficient for all "normal"
Tim Peters8b092332000-09-05 20:15:25 +0000820uses of Python, but will prevent some advanced uses from working
821(for example, running a Python script as an NT service, or possibly
822from CGI).
823
824[This was new in 1.6] The installer no longer runs a separate Tcl/Tk
825installer; instead, it installs the needed Tcl/Tk files directly in the
826Python directory. If you already have a Tcl/Tk installation, this
827wastes some disk space (about 4 Megs) but avoids problems with
828conflicting Tcl/Tk installations, and makes it much easier for Python
829to ensure that Tcl/Tk can find all its files.
830
831[This was new in 1.6] The Windows installer now installs by default in
832\Python20\ on the default volume, instead of \Program Files\Python-2.0\.
833
Guido van Rossumf62ed9c2000-09-26 11:16:10 +0000834
835Updates to the changes between 1.5.2 and 1.6
836--------------------------------------------
837
838The 1.6 NEWS file can't be changed after the release is done, so here
839is some late-breaking news:
840
841New APIs in locale.py: normalize(), getdefaultlocale(), resetlocale(),
842and changes to getlocale() and setlocale().
843
844The new module is now enabled per default.
845
846It is not true that the encodings codecs cannot be used for normal
847strings: the string.encode() (which is also present on 8-bit strings
848!) allows using them for 8-bit strings too, e.g. to convert files from
849cp1252 (Windows) to latin-1 or vice-versa.
850
851Japanese codecs are available from Tamito KAJIYAMA:
852http://pseudo.grad.sccs.chukyo-u.ac.jp/~kajiyama/python/
853
854
Guido van Rossumab9d6f01998-08-10 22:01:13 +0000855======================================================================