blob: 078f931f7a140317bf321e87e098917af7af5981 [file] [log] [blame]
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001\documentclass{howto}
2
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00003\title{What's New in Python 2.0}
4\release{0.04}
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00005\author{A.M. Kuchling and Moshe Zadka}
6\authoraddress{\email{amk1@bigfoot.com}, \email{moshez@math.huji.ac.il} }
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00007\begin{document}
8\maketitle\tableofcontents
9
10\section{Introduction}
11
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +000012{\large This is a draft document; please report inaccuracies and
13omissions to the authors. This document should not be treated as
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000014definitive; features described here might be removed or changed during
15the beta cycle before the final release of Python 2.0.
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +000016}
17
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000018A new release of Python, version 2.0, will be released some time this
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000019summer. Alpha versions are already available from
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000020\url{http://www.python.org/2.0/}. This article covers the exciting
21new features in 2.0, highlights some other useful changes, and points
22out a few incompatible changes that may require rewriting code.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000023
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000024Python's development never completely stops between releases, and a
25steady flow of bug fixes and improvements are always being submitted.
26A host of minor fixes, a few optimizations, additional docstrings, and
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000027better error messages went into 2.0; to list them all would be
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000028impossible, but they're certainly significant. Consult the
29publicly-available CVS logs if you want to see the full list.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000030
31% ======================================================================
32\section{Unicode}
33
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000034The largest new feature in Python 2.0 is a new fundamental data type:
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000035Unicode strings. Unicode uses 16-bit numbers to represent characters
36instead of the 8-bit number used by ASCII, meaning that 65,536
37distinct characters can be supported.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000038
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000039The final interface for Unicode support was arrived at through
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000040countless often-stormy discussions on the python-dev mailing list, and
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +000041mostly implemented by Marc-Andr\'e Lemburg, based on a Unicode string
42type implementation by Fredrik Lundh. A detailed explanation of the
43interface is in the file \file{Misc/unicode.txt} in the Python source
44distribution; it's also available on the Web at
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000045\url{http://starship.python.net/crew/lemburg/unicode-proposal.txt}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000046This article will simply cover the most significant points from the
47full interface.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000048
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000049In Python source code, Unicode strings are written as
50\code{u"string"}. Arbitrary Unicode characters can be written using a
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000051new escape sequence, \code{\e u\var{HHHH}}, where \var{HHHH} is a
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000524-digit hexadecimal number from 0000 to FFFF. The existing
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000053\code{\e x\var{HHHH}} escape sequence can also be used, and octal
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000054escapes can be used for characters up to U+01FF, which is represented
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000055by \code{\e 777}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000056
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000057Unicode strings, just like regular strings, are an immutable sequence
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +000058type. They can be indexed and sliced, but not modified in place.
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +000059Unicode strings have an \method{encode( \optional{encoding} )} method
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +000060that returns an 8-bit string in the desired encoding. Encodings are
61named by strings, such as \code{'ascii'}, \code{'utf-8'},
62\code{'iso-8859-1'}, or whatever. A codec API is defined for
63implementing and registering new encodings that are then available
64throughout a Python program. If an encoding isn't specified, the
65default encoding is usually 7-bit ASCII, though it can be changed for
66your Python installation by calling the
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +000067\function{sys.setdefaultencoding(\var{encoding})} function in a
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +000068customised version of \file{site.py}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000069
70Combining 8-bit and Unicode strings always coerces to Unicode, using
71the default ASCII encoding; the result of \code{'a' + u'bc'} is
Andrew M. Kuchling7f6270d2000-06-09 02:48:18 +000072\code{u'abc'}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000073
74New built-in functions have been added, and existing built-ins
75modified to support Unicode:
76
77\begin{itemize}
78\item \code{unichr(\var{ch})} returns a Unicode string 1 character
79long, containing the character \var{ch}.
80
81\item \code{ord(\var{u})}, where \var{u} is a 1-character regular or Unicode string, returns the number of the character as an integer.
82
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000083\item \code{unicode(\var{string}, \optional{\var{encoding},}
84\optional{\var{errors}} ) } creates a Unicode string from an 8-bit
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000085string. \code{encoding} is a string naming the encoding to use.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000086The \code{errors} parameter specifies the treatment of characters that
87are invalid for the current encoding; passing \code{'strict'} as the
88value causes an exception to be raised on any encoding error, while
89\code{'ignore'} causes errors to be silently ignored and
90\code{'replace'} uses U+FFFD, the official replacement character, in
91case of any problems.
92
93\end{itemize}
94
95A new module, \module{unicodedata}, provides an interface to Unicode
96character properties. For example, \code{unicodedata.category(u'A')}
97returns the 2-character string 'Lu', the 'L' denoting it's a letter,
98and 'u' meaning that it's uppercase.
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000099\code{u.bidirectional(u'\e x0660')} returns 'AN', meaning that U+0660 is
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000100an Arabic number.
101
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000102The \module{codecs} module contains functions to look up existing encodings
103and register new ones. Unless you want to implement a
104new encoding, you'll most often use the
105\function{codecs.lookup(\var{encoding})} function, which returns a
1064-element tuple: \code{(\var{encode_func},
107\var{decode_func}, \var{stream_reader}, \var{stream_writer})}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000108
109\begin{itemize}
110\item \var{encode_func} is a function that takes a Unicode string, and
111returns a 2-tuple \code{(\var{string}, \var{length})}. \var{string}
112is an 8-bit string containing a portion (perhaps all) of the Unicode
113string converted into the given encoding, and \var{length} tells you how much of the Unicode string was converted.
114
115\item \var{decode_func} is the mirror of \var{encode_func},
116taking a Unicode string and
117returns a 2-tuple \code{(\var{ustring}, \var{length})} containing a Unicode string
118and \var{length} telling you how much of the string was consumed.
119
120\item \var{stream_reader} is a class that supports decoding input from
121a stream. \var{stream_reader(\var{file_obj})} returns an object that
122supports the \method{read()}, \method{readline()}, and
123\method{readlines()} methods. These methods will all translate from
124the given encoding and return Unicode strings.
125
126\item \var{stream_writer}, similarly, is a class that supports
127encoding output to a stream. \var{stream_writer(\var{file_obj})}
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000128returns an object that supports the \method{write()} and
129\method{writelines()} methods. These methods expect Unicode strings,
130translating them to the given encoding on output.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000131\end{itemize}
132
133For example, the following code writes a Unicode string into a file,
134encoding it as UTF-8:
135
136\begin{verbatim}
137import codecs
138
139unistr = u'\u0660\u2000ab ...'
140
141(UTF8_encode, UTF8_decode,
142 UTF8_streamreader, UTF8_streamwriter) = codecs.lookup('UTF-8')
143
144output = UTF8_streamwriter( open( '/tmp/output', 'wb') )
145output.write( unistr )
146output.close()
147\end{verbatim}
148
149The following code would then read UTF-8 input from the file:
150
151\begin{verbatim}
152input = UTF8_streamread( open( '/tmp/output', 'rb') )
153print repr(input.read())
154input.close()
155\end{verbatim}
156
157Unicode-aware regular expressions are available through the
158\module{re} module, which has a new underlying implementation called
159SRE written by Fredrik Lundh of Secret Labs AB.
160
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000161A \code{-U} command line option was added which causes the Python
162compiler to interpret all string literals as Unicode string literals.
163This is intended to be used in testing and future-proofing your Python
164code, since some future version of Python may drop support for 8-bit
165strings and provide only Unicode strings.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000166
167% ======================================================================
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000168\section{Distutils: Making Modules Easy to Install}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000169
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000170Before Python 2.0, installing modules was a tedious affair -- there
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000171was no way to figure out automatically where Python is installed, or
172what compiler options to use for extension modules. Software authors
173had to go through an ardous ritual of editing Makefiles and
174configuration files, which only really work on Unix and leave Windows
175and MacOS unsupported. Software users faced wildly differing
176installation instructions
177
178The SIG for distribution utilities, shepherded by Greg Ward, has
179created the Distutils, a system to make package installation much
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000180easier. They form the \module{distutils} package, a new part of
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000181Python's standard library. In the best case, installing a Python
182module from source will require the same steps: first you simply mean
183unpack the tarball or zip archive, and the run ``\code{python setup.py
184install}''. The platform will be automatically detected, the compiler
185will be recognized, C extension modules will be compiled, and the
186distribution installed into the proper directory. Optional
187command-line arguments provide more control over the installation
188process, the distutils package offers many places to override defaults
189-- separating the build from the install, building or installing in
190non-default directories, and more.
191
192In order to use the Distutils, you need to write a \file{setup.py}
193script. For the simple case, when the software contains only .py
194files, a minimal \file{setup.py} can be just a few lines long:
195
196\begin{verbatim}
197from distutils.core import setup
198setup (name = "foo", version = "1.0",
199 py_modules = ["module1", "module2"])
200\end{verbatim}
201
202The \file{setup.py} file isn't much more complicated if the software
203consists of a few packages:
204
205\begin{verbatim}
206from distutils.core import setup
207setup (name = "foo", version = "1.0",
208 packages = ["package", "package.subpackage"])
209\end{verbatim}
210
211A C extension can be the most complicated case; here's an example taken from
212the PyXML package:
213
214
215\begin{verbatim}
216from distutils.core import setup, Extension
217
218expat_extension = Extension('xml.parsers.pyexpat',
219 define_macros = [('XML_NS', None)],
220 include_dirs = [ 'extensions/expat/xmltok',
221 'extensions/expat/xmlparse' ],
222 sources = [ 'extensions/pyexpat.c',
223 'extensions/expat/xmltok/xmltok.c',
224 'extensions/expat/xmltok/xmlrole.c',
225 ]
226 )
227setup (name = "PyXML", version = "0.5.4",
228 ext_modules =[ expat_extension ] )
229
230\end{verbatim}
231
232The Distutils can also take care of creating source and binary
233distributions. The ``sdist'' command, run by ``\code{python setup.py
234sdist}', builds a source distribution such as \file{foo-1.0.tar.gz}.
235Adding new commands isn't difficult, and a ``bdist_rpm'' command has
236already been contributed to create an RPM distribution for the
237software. Commands to create Windows installer programs, Debian
238packages, and Solaris .pkg files have been discussed and are in
239various stages of development.
240
241All this is documented in a new manual, \textit{Distributing Python
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000242Modules}, that joins the basic set of Python documentation.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000243
244% ======================================================================
245\section{String Methods}
246
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000247Until now string-manipulation functionality was in the \module{string}
248Python module, which was usually a front-end for the \module{strop}
249module written in C. The addition of Unicode posed a difficulty for
250the \module{strop} module, because the functions would all need to be
251rewritten in order to accept either 8-bit or Unicode strings. For
252functions such as \function{string.replace()}, which takes 3 string
253arguments, that means eight possible permutations, and correspondingly
254complicated code.
255
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000256Instead, Python 2.0 pushes the problem onto the string type, making
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000257string manipulation functionality available through methods on both
2588-bit strings and Unicode strings.
259
260\begin{verbatim}
261>>> 'andrew'.capitalize()
262'Andrew'
263>>> 'hostname'.replace('os', 'linux')
264'hlinuxtname'
265>>> 'moshe'.find('sh')
2662
267\end{verbatim}
268
269One thing that hasn't changed, April Fools' jokes notwithstanding, is
270that Python strings are immutable. Thus, the string methods return new
271strings, and do not modify the string on which they operate.
272
273The old \module{string} module is still around for backwards
274compatibility, but it mostly acts as a front-end to the new string
275methods.
276
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000277Two methods which have no parallel in pre-2.0 versions, although they
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000278did exist in JPython for quite some time, are \method{startswith()}
279and \method{endswith}. \code{s.startswith(t)} is equivalent to \code{s[:len(t)]
280== t}, while \code{s.endswith(t)} is equivalent to \code{s[-len(t):] == t}.
281
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000282%One other method which deserves special mention is \method{join}. The
283%\method{join} method of a string receives one parameter, a sequence of
284%strings, and is equivalent to the \function{string.join} function from
285%the old \module{string} module, with the arguments reversed. In other
286%words, \code{s.join(seq)} is equivalent to the old
287%\code{string.join(seq, s)}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000288
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000289% ======================================================================
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000290\section{Porting to 2.0}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000291
292New Python releases try hard to be compatible with previous releases,
293and the record has been pretty good. However, some changes are
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000294considered useful enough, often fixing initial design decisions that
295turned to be actively mistaken, that breaking backward compatibility
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000296can't always be avoided. This section lists the changes in Python 2.0
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000297that may cause old Python code to break.
298
299The change which will probably break the most code is tightening up
300the arguments accepted by some methods. Some methods would take
301multiple arguments and treat them as a tuple, particularly various
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000302list methods such as \method{.append()} and \method{.insert()}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000303In earlier versions of Python, if \code{L} is a list, \code{L.append(
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00003041,2 )} appends the tuple \code{(1,2)} to the list. In Python 2.0 this
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000305causes a \exception{TypeError} exception to be raised, with the
306message: 'append requires exactly 1 argument; 2 given'. The fix is to
307simply add an extra set of parentheses to pass both values as a tuple:
308\code{L.append( (1,2) )}.
309
310The earlier versions of these methods were more forgiving because they
311used an old function in Python's C interface to parse their arguments;
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00003122.0 modernizes them to use \function{PyArg_ParseTuple}, the current
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000313argument parsing function, which provides more helpful error messages
314and treats multi-argument calls as errors. If you absolutely must use
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00003152.0 but can't fix your code, you can edit \file{Objects/listobject.c}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000316and define the preprocessor symbol \code{NO_STRICT_LIST_APPEND} to
317preserve the old behaviour; this isn't recommended.
318
319Some of the functions in the \module{socket} module are still
320forgiving in this way. For example, \function{socket.connect(
321('hostname', 25) )} is the correct form, passing a tuple representing
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000322an IP address, but \function{socket.connect( 'hostname', 25 )} also
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000323works. \function{socket.connect_ex()} and \function{socket.bind()} are
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000324similarly easy-going. 2.0alpha1 tightened these functions up, but
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000325because the documentation actually used the erroneous multiple
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000326argument form, many people wrote code which would break with the
327stricter checking. GvR backed out the changes in the face of public
328reaction, so for the\module{socket} module, the documentation was
329fixed and the multiple argument form is simply marked as deprecated;
330it \emph{will} be tightened up again in a future Python version.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000331
332Some work has been done to make integers and long integers a bit more
333interchangeable. In 1.5.2, large-file support was added for Solaris,
334to allow reading files larger than 2Gb; this made the \method{tell()}
335method of file objects return a long integer instead of a regular
336integer. Some code would subtract two file offsets and attempt to use
337the result to multiply a sequence or slice a string, but this raised a
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000338\exception{TypeError}. In 2.0, long integers can be used to multiply
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000339or slice a sequence, and it'll behave as you'd intuitively expect it
340to; \code{3L * 'abc'} produces 'abcabcabc', and \code{
341(0,1,2,3)[2L:4L]} produces (2,3). Long integers can also be used in
342various new places where previously only integers were accepted, such
343as in the \method{seek()} method of file objects.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000344
345The subtlest long integer change of all is that the \function{str()}
346of a long integer no longer has a trailing 'L' character, though
347\function{repr()} still includes it. The 'L' annoyed many people who
348wanted to print long integers that looked just like regular integers,
349since they had to go out of their way to chop off the character. This
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000350is no longer a problem in 2.0, but code which assumes the 'L' is
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000351there, and does \code{str(longval)[:-1]} will now lose the final
352digit.
353
354Taking the \function{repr()} of a float now uses a different
355formatting precision than \function{str()}. \function{repr()} uses
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000356\code{\%.17g} format string for C's \function{sprintf()}, while
357\function{str()} uses \code{\%.12g} as before. The effect is that
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000358\function{repr()} may occasionally show more decimal places than
359\function{str()}, for numbers
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000360For example, the number 8.1 can't be represented exactly in binary, so
361\code{repr(8.1)} is \code{'8.0999999999999996'}, while str(8.1) is
362\code{'8.1'}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000363
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000364The \code{-X} command-line option, which turned all standard
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000365exceptions into strings instead of classes, has been removed; the
366standard exceptions will now always be classes. The
367\module{exceptions} module containing the standard exceptions was
368translated from Python to a built-in C module, written by Barry Warsaw
369and Fredrik Lundh.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000370
371% ======================================================================
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000372\section{Optional Collection of Cycles}
373
374The C implementation of Python uses reference counting to implement
375garbage collection. Every Python object maintains a count of the
376number of references pointing to itself, and adjusts the count as
377references are created or destroyed. Once the reference count reaches
378zero, the object is no longer accessible, since you need to have a
379reference to an object to access it, and if the count is zero, no
380references exist any longer.
381
382Reference counting has some pleasant properties: it's easy to
383understand and implement, and the resulting implementation is
384portable, fairly fast, and reacts well with other libraries that
385implement their own memory handling schemes. The major problem with
386reference counting is that it sometimes doesn't realise that objects
387are no longer accessible, resulting in a memory leak. This happens
388when there are cycles of references.
389
390Consider the simplest possible cycle,
391a class instance which has a reference to itself:
392
393\begin{verbatim}
394instance = SomeClass()
395instance.myself = instance
396\end{verbatim}
397
398After the above two lines of code have been executed, the reference
399count of \code{instance} is 2; one reference is from the variable
400named \samp{'instance'}, and the other is from the \samp{myself}
401attribute of the instance.
402
403If the next line of code is \code{del instance}, what happens? The
404reference count of \code{instance} is decreased by 1, so it has a
405reference count of 1; the reference in the \samp{myself} attribute
406still exists. Yet the instance is no longer accessible through Python
407code, and it could be deleted. Several objects can participate in a
408cycle if they have references to each other, causing all of the
409objects to be leaked.
410
411An experimental step has been made toward fixing this problem. When
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000412compiling Python, the \verb|--with-cycle-gc| option can be specified.
413This causes a cycle detection algorithm to be periodically executed,
414which looks for inaccessible cycles and deletes the objects involved.
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000415A new \module{gc} module provides functions to perform a garbage
416collection, obtain debugging statistics, and tuning the collector's parameters.
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000417
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000418Why isn't cycle detection enabled by default? Running the cycle detection
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000419algorithm takes some time, and some tuning will be required to
420minimize the overhead cost. It's not yet obvious how much performance
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000421is lost, because benchmarking this is tricky and depends crucially
422on how often the program creates and destroys objects.
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000423
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000424Several people tackled this problem and contributed to a solution. An
425early implementation of the cycle detection approach was written by
426Toby Kelsey. The current algorithm was suggested by Eric Tiedemann
427during a visit to CNRI, and Guido van Rossum and Neil Schemenauer
428wrote two different implementations, which were later integrated by
429Neil. Lots of other people offered suggestions along the way; the
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000430March 2000 archives of the python-dev mailing list contain most of the
431relevant discussion, especially in the threads titled ``Reference
432cycle collection for Python'' and ``Finalization again''.
433
434
435% ======================================================================
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000436\section{Core Changes}
437
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000438Various minor changes have been made to Python's syntax and built-in
439functions. None of the changes are very far-reaching, but they're
440handy conveniences.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000441
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000442A change to syntax makes it more convenient to call a given function
443with a tuple of arguments and/or a dictionary of keyword arguments.
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000444In Python 1.5 and earlier, you do this with the \function{apply()}
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000445built-in function: \code{apply(f, \var{args}, \var{kw})} calls the
446function \function{f()} with the argument tuple \var{args} and the
447keyword arguments in the dictionary \var{kw}. Thanks to a patch from
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000448Greg Ewing, 2.0 adds \code{f(*\var{args}, **\var{kw})} as a shorter
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000449and clearer way to achieve the same effect. This syntax is
450symmetrical with the syntax for defining functions:
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000451
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000452\begin{verbatim}
453def f(*args, **kw):
454 # args is a tuple of positional args,
455 # kw is a dictionary of keyword args
456 ...
457\end{verbatim}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000458
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000459A new format style is available when using the \code{\%} operator.
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000460'\%r' will insert the \function{repr()} of its argument. This was
461also added from symmetry considerations, this time for symmetry with
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000462the existing '\%s' format style, which inserts the \function{str()} of
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000463its argument. For example, \code{'\%r \%s' \% ('abc', 'abc')} returns a
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000464string containing \verb|'abc' abc|.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000465
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000466The \function{int()} and \function{long()} functions now accept an
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000467optional ``base'' parameter when the first argument is a string.
468\code{int('123', 10)} returns 123, while \code{int('123', 16)} returns
469291. \code{int(123, 16)} raises a \exception{TypeError} exception
470with the message ``can't convert non-string with explicit base''.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000471
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000472Previously there was no way to implement a class that overrode
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000473Python's built-in \keyword{in} operator and implemented a custom
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000474version. \code{\var{obj} in \var{seq}} returns true if \var{obj} is
475present in the sequence \var{seq}; Python computes this by simply
476trying every index of the sequence until either \var{obj} is found or
477an \exception{IndexError} is encountered. Moshe Zadka contributed a
478patch which adds a \method{__contains__} magic method for providing a
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000479custom implementation for \keyword{in}. Additionally, new built-in
480objects written in C can define what \keyword{in} means for them via a
481new slot in the sequence protocol.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000482
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000483Earlier versions of Python used a recursive algorithm for deleting
484objects. Deeply nested data structures could cause the interpreter to
485fill up the C stack and crash; Christian Tismer rewrote the deletion
486logic to fix this problem. On a related note, comparing recursive
487objects recursed infinitely and crashed; Jeremy Hylton rewrote the
488code to no longer crash, producing a useful result instead. For
489example, after this code:
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000490
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000491\begin{verbatim}
492a = []
493b = []
494a.append(a)
495b.append(b)
496\end{verbatim}
497
498The comparison \code{a==b} returns true, because the two recursive
499data structures are isomorphic.
500\footnote{See the thread ``trashcan and PR\#7'' in the April 2000 archives of the python-dev mailing list for the discussion leading up to this implementation, and some useful relevant links.
501%http://www.python.org/pipermail/python-dev/2000-April/004834.html
502}
503
504Work has been done on porting Python to 64-bit Windows on the Itanium
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000505processor, mostly by Trent Mick of ActiveState. (Confusingly, \code{sys.platform} is still \code{'win32'} on
506Win64 because it seems that for ease of porting, MS Visual C++ treats code
507as 32 bit.
508) PythonWin also supports Windows CE; see the Python CE page at
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000509\url{http://starship.python.net/crew/mhammond/ce/} for more information.
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000510
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000511An attempt has been made to alleviate one of Python's warts, the
512often-confusing \exception{NameError} exception when code refers to a
513local variable before the variable has been assigned a value. For
514example, the following code raises an exception on the \keyword{print}
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000515statement in both 1.5.2 and 2.0; in 1.5.2 a \exception{NameError}
516exception is raised, while 2.0 raises a new
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000517\exception{UnboundLocalError} exception.
518\exception{UnboundLocalError} is a subclass of \exception{NameError},
519so any existing code that expects \exception{NameError} to be raised
520should still work.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000521
522\begin{verbatim}
523def f():
524 print "i=",i
525 i = i + 1
526f()
527\end{verbatim}
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000528
529A new variable holding more detailed version information has been
530added to the \module{sys} module. \code{sys.version_info} is a tuple
531\code{(\var{major}, \var{minor}, \var{micro}, \var{level},
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000532\var{serial})} For example, in 2.0a2 \code{sys.version_info} is
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000533\code{(1, 6, 0, 'alpha', 2)}. \var{level} is a string such as
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000534\code{"alpha"}, \code{"beta"}, or \code{""} for a final release.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000535
536% ======================================================================
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000537\section{Extending/Embedding Changes}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000538
539Some of the changes are under the covers, and will only be apparent to
540people writing C extension modules, or embedding a Python interpreter
541in a larger application. If you aren't dealing with Python's C API,
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000542you can safely skip this section.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000543
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000544The version number of the Python C API was incremented, so C
545extensions compiled for 1.5.2 must be recompiled in order to work with
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00005462.0. On Windows, attempting to import a third party extension built
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000547for Python 1.5.x usually results in an immediate crash; there's not
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000548much we can do about this. (Here's Mark Hammond's explanation of the
549reasons for the crash. The 1.5 module is linked against
550\file{Python15.dll}. When \file{Python.exe} , linked against
551\file{Python16.dll}, starts up, it initializes the Python data
552structures in \file{Python16.dll}. When Python then imports the
553module \file{foo.pyd} linked against \file{Python15.dll}, it
554immediately tries to call the functions in that DLL. As Python has
555not been initialized in that DLL, the program immediately crashes.)
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000556
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000557Users of Jim Fulton's ExtensionClass module will be pleased to find
558out that hooks have been added so that ExtensionClasses are now
559supported by \function{isinstance()} and \function{issubclass()}.
560This means you no longer have to remember to write code such as
561\code{if type(obj) == myExtensionClass}, but can use the more natural
562\code{if isinstance(obj, myExtensionClass)}.
563
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000564The \file{Python/importdl.c} file, which was a mass of \#ifdefs to
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000565support dynamic loading on many different platforms, was cleaned up
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000566and reorganised by Greg Stein. \file{importdl.c} is now quite small,
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000567and platform-specific code has been moved into a bunch of
568\file{Python/dynload_*.c} files.
569
570Vladimir Marangozov's long-awaited malloc restructuring was completed,
571to make it easy to have the Python interpreter use a custom allocator
572instead of C's standard \function{malloc()}. For documentation, read
573the comments in \file{Include/mymalloc.h} and
574\file{Include/objimpl.h}. For the lengthy discussions during which
575the interface was hammered out, see the Web archives of the 'patches'
576and 'python-dev' lists at python.org.
577
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000578Recent versions of the GUSI development environment for MacOS support
579POSIX threads. Therefore, Python's POSIX threading support now works
580on the Macintosh. Threading support using the user-space GNU \texttt{pth}
581library was also contributed.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000582
583Threading support on Windows was enhanced, too. Windows supports
584thread locks that use kernel objects only in case of contention; in
585the common case when there's no contention, they use simpler functions
586which are an order of magnitude faster. A threaded version of Python
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00005871.5.2 on NT is twice as slow as an unthreaded version; with the 2.0
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000588changes, the difference is only 10\%. These improvements were
589contributed by Yakov Markovitch.
590
591% ======================================================================
592\section{Module changes}
593
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000594Lots of improvements and bugfixes were made to Python's extensive
595standard library; some of the affected modules include
596\module{readline}, \module{ConfigParser}, \module{cgi},
597\module{calendar}, \module{posix}, \module{readline}, \module{xmllib},
598\module{aifc}, \module{chunk, wave}, \module{random}, \module{shelve},
599and \module{nntplib}. Consult the CVS logs for the exact
600patch-by-patch details.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000601
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000602Brian Gallew contributed OpenSSL support for the \module{socket}
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000603module. OpenSSL is an implementation of the Secure Socket Layer,
604which encrypts the data being sent over a socket. When compiling
605Python, you can edit \file{Modules/Setup} to include SSL support,
606which adds an additional function to the \module{socket} module:
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000607\function{socket.ssl(\var{socket}, \var{keyfile}, \var{certfile})},
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000608which takes a socket object and returns an SSL socket. The
609\module{httplib} and \module{urllib} modules were also changed to
610support ``https://'' URLs, though no one has implemented FTP or SMTP
611over SSL.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000612
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000613The \module{httplib} module has been rewritten by Greg Stein to
614support HTTP/1.1. Backward compatibility with the 1.5 version of
615\module{httplib} is provided, though using HTTP/1.1 features such as
616pipelining will require rewriting code to use a different set of
617interfaces.
618
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000619The \module{Tkinter} module now supports Tcl/Tk version 8.1, 8.2, or
6208.3, and support for the older 7.x versions has been dropped. The
621Tkinter module also supports displaying Unicode strings in Tk
622widgets.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000623
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000624The \module{curses} module has been greatly extended, starting from
625Oliver Andrich's enhanced version, to provide many additional
626functions from ncurses and SYSV curses, such as colour, alternative
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000627character set support, pads, and mouse support. This means the module
628is no longer compatible with operating systems that only have BSD
629curses, but there don't seem to be any currently maintained OSes that
630fall into this category.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000631
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000632As mentioned in the earlier discussion of 2.0's Unicode support, the
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000633underlying implementation of the regular expressions provided by the
634\module{re} module has been changed. SRE, a new regular expression
635engine written by Fredrik Lundh and partially funded by Hewlett
636Packard, supports matching against both 8-bit strings and Unicode
637strings.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000638
639% ======================================================================
640\section{New modules}
641
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000642A number of new modules were added. We'll simply list them with brief
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000643descriptions; consult the 2.0 documentation for the details of a
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000644particular module.
645
646\begin{itemize}
647
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000648\item{\module{atexit}}:
649For registering functions to be called before the Python interpreter exits.
650Code that currently sets
651\code{sys.exitfunc} directly should be changed to
652use the \module{atexit} module instead, importing \module{atexit}
653and calling \function{atexit.register()} with
654the function to be called on exit.
655(Contributed by Skip Montanaro.)
656
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000657\item{\module{codecs}, \module{encodings}, \module{unicodedata}:} Added as part of the new Unicode support.
658
659\item{\module{filecmp}:} Supersedes the old \module{cmp} and
660\module{dircmp} modules, which have now become deprecated.
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000661(Contributed by Gordon MacMillan and Moshe Zadka.)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000662
663\item{\module{linuxaudio}:} Support for the \file{/dev/audio} device on Linux,
664a twin to the existing \module{sunaudiodev} module.
665(Contributed by Peter Bosch.)
666
667\item{\module{mmap}:} An interface to memory-mapped files on both
668Windows and Unix. A file's contents can be mapped directly into
669memory, at which point it behaves like a mutable string, so its
670contents can be read and modified. They can even be passed to
671functions that expect ordinary strings, such as the \module{re}
672module. (Contributed by Sam Rushing, with some extensions by
673A.M. Kuchling.)
674
675\item{\module{PyExpat}:} An interface to the Expat XML parser.
676(Contributed by Paul Prescod.)
677
678\item{\module{robotparser}:} Parse a \file{robots.txt} file, which is
679used for writing Web spiders that politely avoid certain areas of a
680Web site. The parser accepts the contents of a \file{robots.txt} file
681builds a set of rules from it, and can then answer questions about
682the fetchability of a given URL. (Contributed by Skip Montanaro.)
683
684\item{\module{tabnanny}:} A module/script to
685checks Python source code for ambiguous indentation.
686(Contributed by Tim Peters.)
687
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000688\item{\module{UserString}:} A base class useful for deriving objects that behave like strings.
689
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000690\item{\module{winreg} and \module{_winreg}:} An interface to the
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000691Windows registry. \module{winreg} has been part of PythonWin since
6921995, but now has been added to the core distribution, and enhanced to
693support Unicode. \module{_winreg} is a low-level wrapper of the
694Windows registry functions, contributed by Bill Tutt and Mark Hammond,
695while \module{winreg} is a higher-level, more object-oriented API on top of
696\module{_winreg}, designed by Thomas Heller and implemented by Paul Prescod.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000697
698\item{\module{zipfile}:} A module for reading and writing ZIP-format
699archives. These are archives produced by \program{PKZIP} on
700DOS/Windows or \program{zip} on Unix, not to be confused with
701\program{gzip}-format files (which are supported by the \module{gzip}
702module)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000703(Contributed by James C. Ahlstrom.)
704
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000705\item{\module{imputil}:} A module that provides a simpler way for
706writing customised import hooks, in comparison to the existing
707\module{ihooks} module. (Implemented by Greg Stein, with much
708discussion on python-dev along the way.)
709
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000710\end{itemize}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000711
712% ======================================================================
713\section{IDLE Improvements}
714
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000715IDLE is the official Python cross-platform IDE, written using Tkinter.
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000716Python 2.0 includes IDLE 0.6, which adds a number of new features and
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000717improvements. A partial list:
718
719\begin{itemize}
720\item UI improvements and optimizations,
721especially in the area of syntax highlighting and auto-indentation.
722
723\item The class browser now shows more information, such as the top
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000724level functions in a module.
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000725
726\item Tab width is now a user settable option. When opening an existing Python
727file, IDLE automatically detects the indentation conventions, and adapts.
728
729\item There is now support for calling browsers on various platforms,
730used to open the Python documentation in a browser.
731
732\item IDLE now has a command line, which is largely similar to
733the vanilla Python interpreter.
734
735\item Call tips were added in many places.
736
737\item IDLE can now be installed as a package.
738
739\item In the editor window, there is now a line/column bar at the bottom.
740
741\item Three new keystroke commands: Check module (Alt-F5), Import
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000742module (F5) and Run script (Ctrl-F5).
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000743
744\end{itemize}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000745
746% ======================================================================
747\section{Deleted and Deprecated Modules}
748
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000749A few modules have been dropped because they're obsolete, or because
750there are now better ways to do the same thing. The \module{stdwin}
751module is gone; it was for a platform-independent windowing toolkit
752that's no longer developed.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000753
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000754A number of modules have been moved to the
755\file{lib-old} subdirectory:
756\module{cmp}, \module{cmpcache}, \module{dircmp}, \module{dump},
757\module{find}, \module{grep}, \module{packmail},
758\module{poly}, \module{util}, \module{whatsound}, \module{zmod}.
759If you have code which relies on a module that's been moved to
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000760\file{lib-old}, you can simply add that directory to \code{sys.path}
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000761to get them back, but you're encouraged to update any code that uses
762these modules.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000763
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000764\section{Acknowledgements}
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000765
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000766The author would like to thank the following people for offering
767suggestions on drafts of this article: Fredrik Lundh, Skip
768Montanaro, Vladimir Marangozov, Guido van Rossum, Neil Schemenauer.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000769
770\end{document}
771