blob: c35ce9e9403e3dbc818ed7d225d79841d2ce1c6c [file] [log] [blame]
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001\documentclass{howto}
2
3\title{What's New in Python 1.6}
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +00004\release{0.03}
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. Kuchlinga5bbb002000-06-10 02:41:46 +000012{\large This is a draft document; please report inaccuracies and
13omissions to the authors. \\
14XXX marks locations where fact-checking or rewriting is still needed.
15}
16
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000017A new release of Python, version 1.6, will be released some time this
18summer. Alpha versions are already available from
19\url{http://www.python.org/1.6/}. This article talks about the
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000020exciting new features in 1.6, highlights some other useful changes,
21and points out a few incompatible changes that may require rewriting
22code.
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
27better error messages went into 1.6; to list them all would be
28impossible, 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. Kuchlingfa33a4e2000-06-03 02:52:40 +000034The largest new feature in Python 1.6 is a new fundamental data type:
35Unicode 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
41mostly implemented by Marc-Andr\'e Lemburg. A detailed explanation of
42the interface is in the file
43\file{Misc/unicode.txt} in the Python source distribution; it's also
44available on the Web at
45\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.
59Unicode strings have an \method{encode( \optional{\var{encoding}} )} method
60that 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
68customized 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})}
128returns an object that supports the \method{write()} and
129\method{writelines()} methods. These methods expect Unicode strings, translating them to the given encoding on output.
130\end{itemize}
131
132For example, the following code writes a Unicode string into a file,
133encoding it as UTF-8:
134
135\begin{verbatim}
136import codecs
137
138unistr = u'\u0660\u2000ab ...'
139
140(UTF8_encode, UTF8_decode,
141 UTF8_streamreader, UTF8_streamwriter) = codecs.lookup('UTF-8')
142
143output = UTF8_streamwriter( open( '/tmp/output', 'wb') )
144output.write( unistr )
145output.close()
146\end{verbatim}
147
148The following code would then read UTF-8 input from the file:
149
150\begin{verbatim}
151input = UTF8_streamread( open( '/tmp/output', 'rb') )
152print repr(input.read())
153input.close()
154\end{verbatim}
155
156Unicode-aware regular expressions are available through the
157\module{re} module, which has a new underlying implementation called
158SRE written by Fredrik Lundh of Secret Labs AB.
159
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000160A \code{-U} command line option was added which causes the Python
161compiler to interpret all string literals as Unicode string literals.
162This is intended to be used in testing and future-proofing your Python
163code, since some future version of Python may drop support for 8-bit
164strings and provide only Unicode strings.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000165
166% ======================================================================
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000167\section{Distutils: Making Modules Easy to Install}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000168
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000169Before Python 1.6, installing modules was a tedious affair -- there
170was no way to figure out automatically where Python is installed, or
171what compiler options to use for extension modules. Software authors
172had to go through an ardous ritual of editing Makefiles and
173configuration files, which only really work on Unix and leave Windows
174and MacOS unsupported. Software users faced wildly differing
175installation instructions
176
177The SIG for distribution utilities, shepherded by Greg Ward, has
178created the Distutils, a system to make package installation much
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000179easier. They form the \module{distutils} package, a new part of
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000180Python's standard library. In the best case, installing a Python
181module from source will require the same steps: first you simply mean
182unpack the tarball or zip archive, and the run ``\code{python setup.py
183install}''. The platform will be automatically detected, the compiler
184will be recognized, C extension modules will be compiled, and the
185distribution installed into the proper directory. Optional
186command-line arguments provide more control over the installation
187process, the distutils package offers many places to override defaults
188-- separating the build from the install, building or installing in
189non-default directories, and more.
190
191In order to use the Distutils, you need to write a \file{setup.py}
192script. For the simple case, when the software contains only .py
193files, a minimal \file{setup.py} can be just a few lines long:
194
195\begin{verbatim}
196from distutils.core import setup
197setup (name = "foo", version = "1.0",
198 py_modules = ["module1", "module2"])
199\end{verbatim}
200
201The \file{setup.py} file isn't much more complicated if the software
202consists of a few packages:
203
204\begin{verbatim}
205from distutils.core import setup
206setup (name = "foo", version = "1.0",
207 packages = ["package", "package.subpackage"])
208\end{verbatim}
209
210A C extension can be the most complicated case; here's an example taken from
211the PyXML package:
212
213
214\begin{verbatim}
215from distutils.core import setup, Extension
216
217expat_extension = Extension('xml.parsers.pyexpat',
218 define_macros = [('XML_NS', None)],
219 include_dirs = [ 'extensions/expat/xmltok',
220 'extensions/expat/xmlparse' ],
221 sources = [ 'extensions/pyexpat.c',
222 'extensions/expat/xmltok/xmltok.c',
223 'extensions/expat/xmltok/xmlrole.c',
224 ]
225 )
226setup (name = "PyXML", version = "0.5.4",
227 ext_modules =[ expat_extension ] )
228
229\end{verbatim}
230
231The Distutils can also take care of creating source and binary
232distributions. The ``sdist'' command, run by ``\code{python setup.py
233sdist}', builds a source distribution such as \file{foo-1.0.tar.gz}.
234Adding new commands isn't difficult, and a ``bdist_rpm'' command has
235already been contributed to create an RPM distribution for the
236software. Commands to create Windows installer programs, Debian
237packages, and Solaris .pkg files have been discussed and are in
238various stages of development.
239
240All this is documented in a new manual, \textit{Distributing Python
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000241Modules}, that joins the basic set of Python documentation.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000242
243% ======================================================================
244\section{String Methods}
245
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000246Until now string-manipulation functionality was in the \module{string}
247Python module, which was usually a front-end for the \module{strop}
248module written in C. The addition of Unicode posed a difficulty for
249the \module{strop} module, because the functions would all need to be
250rewritten in order to accept either 8-bit or Unicode strings. For
251functions such as \function{string.replace()}, which takes 3 string
252arguments, that means eight possible permutations, and correspondingly
253complicated code.
254
255Instead, Python 1.6 pushes the problem onto the string type, making
256string manipulation functionality available through methods on both
2578-bit strings and Unicode strings.
258
259\begin{verbatim}
260>>> 'andrew'.capitalize()
261'Andrew'
262>>> 'hostname'.replace('os', 'linux')
263'hlinuxtname'
264>>> 'moshe'.find('sh')
2652
266\end{verbatim}
267
268One thing that hasn't changed, April Fools' jokes notwithstanding, is
269that Python strings are immutable. Thus, the string methods return new
270strings, and do not modify the string on which they operate.
271
272The old \module{string} module is still around for backwards
273compatibility, but it mostly acts as a front-end to the new string
274methods.
275
276Two methods which have no parallel in pre-1.6 versions, although they
277did exist in JPython for quite some time, are \method{startswith()}
278and \method{endswith}. \code{s.startswith(t)} is equivalent to \code{s[:len(t)]
279== t}, while \code{s.endswith(t)} is equivalent to \code{s[-len(t):] == t}.
280
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000281(XXX what'll happen to join? is this even worth mentioning?) One
282other method which deserves special mention is \method{join}. The
283\method{join} method of a string receives one parameter, a sequence of
284strings, and is equivalent to the \function{string.join} function from
285the old \module{string} module, with the arguments reversed. In other
286words, \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% ======================================================================
290\section{Porting to 1.6}
291
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. Kuchling25bfd0e2000-05-27 11:28:26 +0000296can't always be avoided. This section lists the changes in Python 1.6
297that 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(
3041,2 )} appends the tuple \code{(1,2)} to the list. In Python 1.6 this
305causes 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;
3121.6 modernizes them to use \function{PyArg_ParseTuple}, the current
313argument parsing function, which provides more helpful error messages
314and treats multi-argument calls as errors. If you absolutely must use
3151.6 but can't fix your code, you can edit \file{Objects/listobject.c}
316and 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
324similarly easy-going. 1.6alpha1 tightened these functions up, but
325because 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. Kuchling6c3cd8d2000-06-10 02:24:31 +0000338\exception{TypeError}. In 1.6, long integers can be used to multiply
339or 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
350is no longer a problem in 1.6, but code which assumes the 'L' is
351there, 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. Kuchlinga5bbb002000-06-10 02:41:46 +0000364%The \code{-X} command-line option, which turns all standard exceptions
365%into strings instead of classes, has been removed.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000366
367% ======================================================================
368\section{Core Changes}
369
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000370Various minor changes have been made to Python's syntax and built-in
371functions. None of the changes are very far-reaching, but they're
372handy conveniences.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000373
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000374A change to syntax makes it more convenient to call a given function
375with a tuple of arguments and/or a dictionary of keyword arguments.
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000376In Python 1.5 and earlier, you do this with the \function{apply()}
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000377built-in function: \code{apply(f, \var{args}, \var{kw})} calls the
378function \function{f()} with the argument tuple \var{args} and the
379keyword arguments in the dictionary \var{kw}. Thanks to a patch from
380Greg Ewing, 1.6 adds \code{f(*\var{args}, **\var{kw})} as a shorter
381and clearer way to achieve the same effect. This syntax is
382symmetrical with the syntax for defining functions:
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000383
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000384\begin{verbatim}
385def f(*args, **kw):
386 # args is a tuple of positional args,
387 # kw is a dictionary of keyword args
388 ...
389\end{verbatim}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000390
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000391A new format style is available when using the \code{\%} operator.
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000392'\%r' will insert the \function{repr()} of its argument. This was
393also added from symmetry considerations, this time for symmetry with
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000394the existing '\%s' format style, which inserts the \function{str()} of
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000395its argument. For example, \code{'\%r \%s' \% ('abc', 'abc')} returns a
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000396string containing \verb|'abc' abc|.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000397
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000398The \function{int()} and \function{long()} functions now accept an
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000399optional ``base'' parameter when the first argument is a string.
400\code{int('123', 10)} returns 123, while \code{int('123', 16)} returns
401291. \code{int(123, 16)} raises a \exception{TypeError} exception
402with the message ``can't convert non-string with explicit base''.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000403
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000404Previously there was no way to implement a class that overrode
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000405Python's built-in \keyword{in} operator and implemented a custom
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000406version. \code{\var{obj} in \var{seq}} returns true if \var{obj} is
407present in the sequence \var{seq}; Python computes this by simply
408trying every index of the sequence until either \var{obj} is found or
409an \exception{IndexError} is encountered. Moshe Zadka contributed a
410patch which adds a \method{__contains__} magic method for providing a
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000411custom implementation for \keyword{in}. Additionally, new built-in
412objects written in C can define what \keyword{in} means for them via a
413new slot in the sequence protocol.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000414
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000415Earlier versions of Python used a recursive algorithm for deleting
416objects. Deeply nested data structures could cause the interpreter to
417fill up the C stack and crash; Christian Tismer rewrote the deletion
418logic to fix this problem. On a related note, comparing recursive
419objects recursed infinitely and crashed; Jeremy Hylton rewrote the
420code to no longer crash, producing a useful result instead. For
421example, after this code:
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000422
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000423\begin{verbatim}
424a = []
425b = []
426a.append(a)
427b.append(b)
428\end{verbatim}
429
430The comparison \code{a==b} returns true, because the two recursive
431data structures are isomorphic.
432\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.
433%http://www.python.org/pipermail/python-dev/2000-April/004834.html
434}
435
436Work has been done on porting Python to 64-bit Windows on the Itanium
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000437processor, mostly by Trent Mick of ActiveState. (Confusingly, \code{sys.platform} is still \code{'win32'} on
438Win64 because it seems that for ease of porting, MS Visual C++ treats code
439as 32 bit.
440) PythonWin also supports Windows CE; see the Python CE page at
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000441\url{http://starship.python.net/crew/mhammond/ce/} for more information.
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000442
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000443An attempt has been made to alleviate one of Python's warts, the
444often-confusing \exception{NameError} exception when code refers to a
445local variable before the variable has been assigned a value. For
446example, the following code raises an exception on the \keyword{print}
447statement in both 1.5.2 and 1.6; in 1.5.2 a \exception{NameError}
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000448exception is raised, while 1.6 raises a new
449\exception{UnboundLocalError} exception.
450\exception{UnboundLocalError} is a subclass of \exception{NameError},
451so any existing code that expects \exception{NameError} to be raised
452should still work.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000453
454\begin{verbatim}
455def f():
456 print "i=",i
457 i = i + 1
458f()
459\end{verbatim}
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000460
461A new variable holding more detailed version information has been
462added to the \module{sys} module. \code{sys.version_info} is a tuple
463\code{(\var{major}, \var{minor}, \var{micro}, \var{level},
464\var{serial})} For example, in 1.6a2 \code{sys.version_info} is
465\code{(1, 6, 0, 'alpha', 2)}. \var{level} is a string such as
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000466\code{"alpha"}, \code{"beta"}, or \code{""} for a final release.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000467
468% ======================================================================
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000469\section{Extending/Embedding Changes}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000470
471Some of the changes are under the covers, and will only be apparent to
472people writing C extension modules, or embedding a Python interpreter
473in a larger application. If you aren't dealing with Python's C API,
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000474you can safely skip this section.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000475
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000476The version number of the Python C API was incremented, so C
477extensions compiled for 1.5.2 must be recompiled in order to work with
4781.6. On Windows, attempting to import a third party extension built
479for Python 1.5.x usually results in an immediate crash; there's not
480much we can do about this. (XXX can anyone tell me why it crashes?)
481
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000482Users of Jim Fulton's ExtensionClass module will be pleased to find
483out that hooks have been added so that ExtensionClasses are now
484supported by \function{isinstance()} and \function{issubclass()}.
485This means you no longer have to remember to write code such as
486\code{if type(obj) == myExtensionClass}, but can use the more natural
487\code{if isinstance(obj, myExtensionClass)}.
488
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000489The \file{Python/importdl.c} file, which was a mass of \#ifdefs to
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000490support dynamic loading on many different platforms, was cleaned up
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000491and reorganized by Greg Stein. \file{importdl.c} is now quite small,
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000492and platform-specific code has been moved into a bunch of
493\file{Python/dynload_*.c} files.
494
495Vladimir Marangozov's long-awaited malloc restructuring was completed,
496to make it easy to have the Python interpreter use a custom allocator
497instead of C's standard \function{malloc()}. For documentation, read
498the comments in \file{Include/mymalloc.h} and
499\file{Include/objimpl.h}. For the lengthy discussions during which
500the interface was hammered out, see the Web archives of the 'patches'
501and 'python-dev' lists at python.org.
502
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000503Recent versions of the GUSI development environment for MacOS support
504POSIX threads. Therefore, Python's POSIX threading support now works
505on the Macintosh. Threading support using the user-space GNU \texttt{pth}
506library was also contributed.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000507
508Threading support on Windows was enhanced, too. Windows supports
509thread locks that use kernel objects only in case of contention; in
510the common case when there's no contention, they use simpler functions
511which are an order of magnitude faster. A threaded version of Python
5121.5.2 on NT is twice as slow as an unthreaded version; with the 1.6
513changes, the difference is only 10\%. These improvements were
514contributed by Yakov Markovitch.
515
516% ======================================================================
517\section{Module changes}
518
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000519Lots of improvements and bugfixes were made to Python's extensive
520standard library; some of the affected modules include
521\module{readline}, \module{ConfigParser}, \module{cgi},
522\module{calendar}, \module{posix}, \module{readline}, \module{xmllib},
523\module{aifc}, \module{chunk, wave}, \module{random}, \module{shelve},
524and \module{nntplib}. Consult the CVS logs for the exact
525patch-by-patch details.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000526
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000527Brian Gallew contributed OpenSSL support for the \module{socket}
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000528module. OpenSSL is an implementation of the Secure Socket Layer,
529which encrypts the data being sent over a socket. When compiling
530Python, you can edit \file{Modules/Setup} to include SSL support,
531which adds an additional function to the \module{socket} module:
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000532\function{socket.ssl(\var{socket}, \var{keyfile}, \var{certfile})},
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000533which takes a socket object and returns an SSL socket. The
534\module{httplib} and \module{urllib} modules were also changed to
535support ``https://'' URLs, though no one has implemented FTP or SMTP
536over SSL.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000537
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000538The \module{Tkinter} module now supports Tcl/Tk version 8.1, 8.2, or
5398.3, and support for the older 7.x versions has been dropped. The
540Tkinter module also supports displaying Unicode strings in Tk
541widgets.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000542
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000543The \module{curses} module has been greatly extended, starting from
544Oliver Andrich's enhanced version, to provide many additional
545functions from ncurses and SYSV curses, such as colour, alternative
546character set support, pads, and other new features. This means the
547module is no longer compatible with operating systems that only have
548BSD curses, but there don't seem to be any currently maintained OSes
549that fall into this category.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000550
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000551As mentioned in the earlier discussion of 1.6's Unicode support, the
552underlying implementation of the regular expressions provided by the
553\module{re} module has been changed. SRE, a new regular expression
554engine written by Fredrik Lundh and partially funded by Hewlett
555Packard, supports matching against both 8-bit strings and Unicode
556strings.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000557
558% ======================================================================
559\section{New modules}
560
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000561A number of new modules were added. We'll simply list them with brief
562descriptions; consult the 1.6 documentation for the details of a
563particular module.
564
565\begin{itemize}
566
567\item{\module{codecs}, \module{encodings}, \module{unicodedata}:} Added as part of the new Unicode support.
568
569\item{\module{filecmp}:} Supersedes the old \module{cmp} and
570\module{dircmp} modules, which have now become deprecated.
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000571(Contributed by Gordon MacMillan and Moshe Zadka.)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000572
573\item{\module{linuxaudio}:} Support for the \file{/dev/audio} device on Linux,
574a twin to the existing \module{sunaudiodev} module.
575(Contributed by Peter Bosch.)
576
577\item{\module{mmap}:} An interface to memory-mapped files on both
578Windows and Unix. A file's contents can be mapped directly into
579memory, at which point it behaves like a mutable string, so its
580contents can be read and modified. They can even be passed to
581functions that expect ordinary strings, such as the \module{re}
582module. (Contributed by Sam Rushing, with some extensions by
583A.M. Kuchling.)
584
585\item{\module{PyExpat}:} An interface to the Expat XML parser.
586(Contributed by Paul Prescod.)
587
588\item{\module{robotparser}:} Parse a \file{robots.txt} file, which is
589used for writing Web spiders that politely avoid certain areas of a
590Web site. The parser accepts the contents of a \file{robots.txt} file
591builds a set of rules from it, and can then answer questions about
592the fetchability of a given URL. (Contributed by Skip Montanaro.)
593
594\item{\module{tabnanny}:} A module/script to
595checks Python source code for ambiguous indentation.
596(Contributed by Tim Peters.)
597
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000598\item{\module{UserString}:} A base class useful for deriving objects that behave like strings.
599
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000600\item{\module{winreg}:} An interface to the Windows registry.
601\module{winreg} has been part of PythonWin since 1995, but now has
602been added to the core distribution, and enhanced to support Unicode.
603(Contributed by Bill Tutt and Mark Hammond.)
604
605\item{\module{zipfile}:} A module for reading and writing ZIP-format
606archives. These are archives produced by \program{PKZIP} on
607DOS/Windows or \program{zip} on Unix, not to be confused with
608\program{gzip}-format files (which are supported by the \module{gzip}
609module)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000610(Contributed by James C. Ahlstrom.)
611
612\end{itemize}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000613
614% ======================================================================
615\section{IDLE Improvements}
616
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000617IDLE is the official Python cross-platform IDE, written using Tkinter.
618Python 1.6 includes IDLE 0.6, which adds a number of new features and
619improvements. A partial list:
620
621\begin{itemize}
622\item UI improvements and optimizations,
623especially in the area of syntax highlighting and auto-indentation.
624
625\item The class browser now shows more information, such as the top
626level functions in a module (XXX did I interpret that right?).
627
628\item Tab width is now a user settable option. When opening an existing Python
629file, IDLE automatically detects the indentation conventions, and adapts.
630
631\item There is now support for calling browsers on various platforms,
632used to open the Python documentation in a browser.
633
634\item IDLE now has a command line, which is largely similar to
635the vanilla Python interpreter.
636
637\item Call tips were added in many places.
638
639\item IDLE can now be installed as a package.
640
641\item In the editor window, there is now a line/column bar at the bottom.
642
643\item Three new keystroke commands: Check module (Alt-F5), Import
644module (F5) and Run script (Ctrl-F5)
645
646\end{itemize}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000647
648% ======================================================================
649\section{Deleted and Deprecated Modules}
650
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000651A few modules have been dropped because they're obsolete, or because
652there are now better ways to do the same thing. The \module{stdwin}
653module is gone; it was for a platform-independent windowing toolkit
654that's no longer developed.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000655
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000656A number of modules have been moved to the
657\file{lib-old} subdirectory:
658\module{cmp}, \module{cmpcache}, \module{dircmp}, \module{dump},
659\module{find}, \module{grep}, \module{packmail},
660\module{poly}, \module{util}, \module{whatsound}, \module{zmod}.
661If you have code which relies on a module that's been moved to
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000662\file{lib-old}, you can simply add that directory to \code{sys.path}
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000663to get them back, but you're encouraged to update any code that uses
664these modules.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000665
666XXX any others deleted?
667
668XXX Other candidates for deletion in 1.6: sgimodule.c, glmodule.c (and hence
669cgenmodule.c), imgfile.c, svmodule.c, flmodule.c, fmmodule.c, almodule.c, clmodule.c,
670 knee.py.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000671
672\end{document}
673