blob: 4817dcfcf8f50d4eaa3ff5f547f1109c2a646d98 [file] [log] [blame]
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001\documentclass{howto}
2
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +00003% $Id$
4
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00005\title{What's New in Python 2.0}
Andrew M. Kuchlinga8d10782000-10-19 01:42:33 +00006\release{1.01}
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00007\author{A.M. Kuchling and Moshe Zadka}
8\authoraddress{\email{amk1@bigfoot.com}, \email{moshez@math.huji.ac.il} }
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00009\begin{document}
10\maketitle\tableofcontents
11
12\section{Introduction}
13
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000014A new release of Python, version 2.0, will be released some time this
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +000015autumn. Beta versions are already available from
Andrew M. Kuchling6d4addd2000-09-25 14:40:15 +000016\url{http://www.pythonlabs.com/products/python2.0/}. This article
Andrew M. Kuchling70ba3822000-07-01 00:13:30 +000017covers the exciting new features in 2.0, highlights some other useful
18changes, and points out a few incompatible changes that may require
19rewriting code.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000020
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000021Python's development never completely stops between releases, and a
22steady flow of bug fixes and improvements are always being submitted.
23A host of minor fixes, a few optimizations, additional docstrings, and
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000024better error messages went into 2.0; to list them all would be
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000025impossible, but they're certainly significant. Consult the
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +000026publicly-available CVS logs if you want to see the full list. This
27progress is due to the five developers working for
28PythonLabs are now getting paid to spend their days fixing bugs,
29and also due to the improved communication resulting
30from moving to SourceForge.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000031
32% ======================================================================
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +000033\section{What About Python 1.6?}
34
35Python 1.6 can be thought of as the Contractual Obligations Python
36release. After the core development team left CNRI in May 2000, CNRI
37requested that a 1.6 release be created, containing all the work on
38Python that had been performed at CNRI. Python 1.6 therefore
39represents the state of the CVS tree as of May 2000, with the most
40significant new feature being Unicode support. Development continued
41after May, of course, so the 1.6 tree received a few fixes to ensure
42that it's forward-compatible with Python 2.0. 1.6 is therefore part
43of Python's evolution, and not a side branch.
44
45So, should you take much interest in Python 1.6? Probably not. The
461.6final and 2.0beta1 releases were made on the same day (September 5,
472000), the plan being to finalize Python 2.0 within a month or so. If
48you have applications to maintain, there seems little point in
49breaking things by moving to 1.6, fixing them, and then having another
50round of breakage within a month by moving to 2.0; you're better off
51just going straight to 2.0. Most of the really interesting features
52described in this document are only in 2.0, because a lot of work was
53done between May and September.
54
55% ======================================================================
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +000056\section{New Development Process}
57
58The most important change in Python 2.0 may not be to the code at all,
Andrew M. Kuchlingd44dc3c2000-10-04 12:40:44 +000059but to how Python is developed: in May 2000 the Python developers
60began using the tools made available by SourceForge for storing
61source code, tracking bug reports, and managing the queue of patch
62submissions. To report bugs or submit patches for Python 2.0, use the
63bug tracking and patch manager tools available from Python's project
64page, located at \url{http://sourceforge.net/projects/python/}.
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +000065
Andrew M. Kuchlingd44dc3c2000-10-04 12:40:44 +000066The most important of the services now hosted at SourceForge is the
67Python CVS tree, the version-controlled repository containing the
68source code for Python. Previously, there were roughly 7 or so people
69who had write access to the CVS tree, and all patches had to be
70inspected and checked in by one of the people on this short list.
71Obviously, this wasn't very scalable. By moving the CVS tree to
72SourceForge, it became possible to grant write access to more people;
73as of September 2000 there were 27 people able to check in changes, a
74fourfold increase. This makes possible large-scale changes that
75wouldn't be attempted if they'd have to be filtered through the small
76group of core developers. For example, one day Peter Schneider-Kamp
77took it into his head to drop K\&R C compatibility and convert the C
78source for Python to ANSI C. After getting approval on the python-dev
79mailing list, he launched into a flurry of checkins that lasted about
80a week, other developers joined in to help, and the job was done. If
81there were only 5 people with write access, probably that task would
82have been viewed as ``nice, but not worth the time and effort needed''
83and it would never have gotten done.
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +000084
Andrew M. Kuchlingd44dc3c2000-10-04 12:40:44 +000085The shift to using SourceForge's services has resulted in a remarkable
86increase in the speed of development. Patches now get submitted,
87commented on, revised by people other than the original submitter, and
88bounced back and forth between people until the patch is deemed worth
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +000089checking in. Bugs are tracked in one central location and can be
90assigned to a specific person for fixing, and we can count the number
91of open bugs to measure progress. This didn't come without a cost:
92developers now have more e-mail to deal with, more mailing lists to
93follow, and special tools had to be written for the new environment.
94For example, SourceForge sends default patch and bug notification
95e-mail messages that are completely unhelpful, so Ka-Ping Yee wrote an
96HTML screen-scraper that sends more useful messages.
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +000097
98The ease of adding code caused a few initial growing pains, such as
99code was checked in before it was ready or without getting clear
100agreement from the developer group. The approval process that has
101emerged is somewhat similar to that used by the Apache group.
102Developers can vote +1, +0, -0, or -1 on a patch; +1 and -1 denote
103acceptance or rejection, while +0 and -0 mean the developer is mostly
104indifferent to the change, though with a slight positive or negative
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +0000105slant. The most significant change from the Apache model is that the
106voting is essentially advisory, letting Guido van Rossum, who has
107Benevolent Dictator For Life status, know what the general opinion is.
108He can still ignore the result of a vote, and approve or
109reject a change even if the community disagrees with him.
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +0000110
111Producing an actual patch is the last step in adding a new feature,
112and is usually easy compared to the earlier task of coming up with a
113good design. Discussions of new features can often explode into
114lengthy mailing list threads, making the discussion hard to follow,
115and no one can read every posting to python-dev. Therefore, a
116relatively formal process has been set up to write Python Enhancement
117Proposals (PEPs), modelled on the Internet RFC process. PEPs are
118draft documents that describe a proposed new feature, and are
119continually revised until the community reaches a consensus, either
120accepting or rejecting the proposal. Quoting from the introduction to
121PEP 1, ``PEP Purpose and Guidelines'':
122
123\begin{quotation}
124 PEP stands for Python Enhancement Proposal. A PEP is a design
125 document providing information to the Python community, or
126 describing a new feature for Python. The PEP should provide a
127 concise technical specification of the feature and a rationale for
128 the feature.
129
130 We intend PEPs to be the primary mechanisms for proposing new
131 features, for collecting community input on an issue, and for
132 documenting the design decisions that have gone into Python. The
133 PEP author is responsible for building consensus within the
134 community and documenting dissenting opinions.
135\end{quotation}
136
137Read the rest of PEP 1 for the details of the PEP editorial process,
138style, and format. PEPs are kept in the Python CVS tree on
139SourceForge, though they're not part of the Python 2.0 distribution,
140and are also available in HTML form from
141\url{http://python.sourceforge.net/peps/}. As of September 2000,
142there are 25 PEPS, ranging from PEP 201, ``Lockstep Iteration'', to
143PEP 225, ``Elementwise/Objectwise Operators''.
144
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +0000145% ======================================================================
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000146\section{Unicode}
147
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000148The largest new feature in Python 2.0 is a new fundamental data type:
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000149Unicode strings. Unicode uses 16-bit numbers to represent characters
150instead of the 8-bit number used by ASCII, meaning that 65,536
151distinct characters can be supported.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000152
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000153The final interface for Unicode support was arrived at through
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000154countless often-stormy discussions on the python-dev mailing list, and
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000155mostly implemented by Marc-Andr\'e Lemburg, based on a Unicode string
156type implementation by Fredrik Lundh. A detailed explanation of the
157interface is in the file \file{Misc/unicode.txt} in the Python source
158distribution; it's also available on the Web at
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000159\url{http://starship.python.net/crew/lemburg/unicode-proposal.txt}.
Andrew M. Kuchling6032c482000-10-12 02:37:14 +0000160This article will simply cover the most significant points about the Unicode
161interfaces.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000162
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000163In Python source code, Unicode strings are written as
164\code{u"string"}. Arbitrary Unicode characters can be written using a
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000165new escape sequence, \code{\e u\var{HHHH}}, where \var{HHHH} is a
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00001664-digit hexadecimal number from 0000 to FFFF. The existing
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000167\code{\e x\var{HHHH}} escape sequence can also be used, and octal
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000168escapes can be used for characters up to U+01FF, which is represented
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000169by \code{\e 777}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000170
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000171Unicode strings, just like regular strings, are an immutable sequence
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000172type. They can be indexed and sliced, but not modified in place.
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000173Unicode strings have an \method{encode( \optional{encoding} )} method
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000174that returns an 8-bit string in the desired encoding. Encodings are
175named by strings, such as \code{'ascii'}, \code{'utf-8'},
176\code{'iso-8859-1'}, or whatever. A codec API is defined for
177implementing and registering new encodings that are then available
178throughout a Python program. If an encoding isn't specified, the
179default encoding is usually 7-bit ASCII, though it can be changed for
180your Python installation by calling the
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000181\function{sys.setdefaultencoding(\var{encoding})} function in a
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000182customised version of \file{site.py}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000183
184Combining 8-bit and Unicode strings always coerces to Unicode, using
185the default ASCII encoding; the result of \code{'a' + u'bc'} is
Andrew M. Kuchling7f6270d2000-06-09 02:48:18 +0000186\code{u'abc'}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000187
188New built-in functions have been added, and existing built-ins
189modified to support Unicode:
190
191\begin{itemize}
192\item \code{unichr(\var{ch})} returns a Unicode string 1 character
193long, containing the character \var{ch}.
194
195\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.
196
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000197\item \code{unicode(\var{string} \optional{, \var{encoding}}
198\optional{, \var{errors}} ) } creates a Unicode string from an 8-bit
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000199string. \code{encoding} is a string naming the encoding to use.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000200The \code{errors} parameter specifies the treatment of characters that
201are invalid for the current encoding; passing \code{'strict'} as the
202value causes an exception to be raised on any encoding error, while
203\code{'ignore'} causes errors to be silently ignored and
204\code{'replace'} uses U+FFFD, the official replacement character, in
205case of any problems.
206
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +0000207\item The \keyword{exec} statement, and various built-ins such as
208\code{eval()}, \code{getattr()}, and \code{setattr()} will also
209accept Unicode strings as well as regular strings. (It's possible
210that the process of fixing this missed some built-ins; if you find a
211built-in function that accepts strings but doesn't accept Unicode
212strings at all, please report it as a bug.)
213
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000214\end{itemize}
215
216A new module, \module{unicodedata}, provides an interface to Unicode
217character properties. For example, \code{unicodedata.category(u'A')}
218returns the 2-character string 'Lu', the 'L' denoting it's a letter,
219and 'u' meaning that it's uppercase.
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000220\code{u.bidirectional(u'\e x0660')} returns 'AN', meaning that U+0660 is
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000221an Arabic number.
222
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000223The \module{codecs} module contains functions to look up existing encodings
224and register new ones. Unless you want to implement a
225new encoding, you'll most often use the
226\function{codecs.lookup(\var{encoding})} function, which returns a
2274-element tuple: \code{(\var{encode_func},
228\var{decode_func}, \var{stream_reader}, \var{stream_writer})}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000229
230\begin{itemize}
231\item \var{encode_func} is a function that takes a Unicode string, and
232returns a 2-tuple \code{(\var{string}, \var{length})}. \var{string}
233is an 8-bit string containing a portion (perhaps all) of the Unicode
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000234string converted into the given encoding, and \var{length} tells you
235how much of the Unicode string was converted.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000236
Andrew M. Kuchling118ee962000-09-27 01:01:18 +0000237\item \var{decode_func} is the opposite of \var{encode_func}, taking
238an 8-bit string and returning a 2-tuple \code{(\var{ustring},
239\var{length})}, consisting of the resulting Unicode string
240\var{ustring} and the integer \var{length} telling how much of the
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +00002418-bit string was consumed.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000242
243\item \var{stream_reader} is a class that supports decoding input from
244a stream. \var{stream_reader(\var{file_obj})} returns an object that
245supports the \method{read()}, \method{readline()}, and
246\method{readlines()} methods. These methods will all translate from
247the given encoding and return Unicode strings.
248
249\item \var{stream_writer}, similarly, is a class that supports
250encoding output to a stream. \var{stream_writer(\var{file_obj})}
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000251returns an object that supports the \method{write()} and
252\method{writelines()} methods. These methods expect Unicode strings,
253translating them to the given encoding on output.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000254\end{itemize}
255
256For example, the following code writes a Unicode string into a file,
257encoding it as UTF-8:
258
259\begin{verbatim}
260import codecs
261
262unistr = u'\u0660\u2000ab ...'
263
264(UTF8_encode, UTF8_decode,
265 UTF8_streamreader, UTF8_streamwriter) = codecs.lookup('UTF-8')
266
267output = UTF8_streamwriter( open( '/tmp/output', 'wb') )
268output.write( unistr )
269output.close()
270\end{verbatim}
271
272The following code would then read UTF-8 input from the file:
273
274\begin{verbatim}
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000275input = UTF8_streamreader( open( '/tmp/output', 'rb') )
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000276print repr(input.read())
277input.close()
278\end{verbatim}
279
280Unicode-aware regular expressions are available through the
281\module{re} module, which has a new underlying implementation called
282SRE written by Fredrik Lundh of Secret Labs AB.
283
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000284A \code{-U} command line option was added which causes the Python
285compiler to interpret all string literals as Unicode string literals.
286This is intended to be used in testing and future-proofing your Python
287code, since some future version of Python may drop support for 8-bit
288strings and provide only Unicode strings.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000289
290% ======================================================================
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000291\section{List Comprehensions}
292
293Lists are a workhorse data type in Python, and many programs
294manipulate a list at some point. Two common operations on lists are
295to loop over them, and either pick out the elements that meet a
296certain criterion, or apply some function to each element. For
297example, given a list of strings, you might want to pull out all the
298strings containing a given substring, or strip off trailing whitespace
299from each line.
300
301The existing \function{map()} and \function{filter()} functions can be
302used for this purpose, but they require a function as one of their
303arguments. This is fine if there's an existing built-in function that
304can be passed directly, but if there isn't, you have to create a
305little function to do the required work, and Python's scoping rules
306make the result ugly if the little function needs additional
307information. Take the first example in the previous paragraph,
308finding all the strings in the list containing a given substring. You
309could write the following to do it:
310
311\begin{verbatim}
312# Given the list L, make a list of all strings
313# containing the substring S.
314sublist = filter( lambda s, substring=S:
315 string.find(s, substring) != -1,
316 L)
317\end{verbatim}
318
319Because of Python's scoping rules, a default argument is used so that
320the anonymous function created by the \keyword{lambda} statement knows
321what substring is being searched for. List comprehensions make this
322cleaner:
323
324\begin{verbatim}
325sublist = [ s for s in L if string.find(s, S) != -1 ]
326\end{verbatim}
327
328List comprehensions have the form:
329
330\begin{verbatim}
331[ expression for expr in sequence1
332 for expr2 in sequence2 ...
333 for exprN in sequenceN
334 if condition
335\end{verbatim}
336
337The \keyword{for}...\keyword{in} clauses contain the sequences to be
338iterated over. The sequences do not have to be the same length,
339because they are \emph{not} iterated over in parallel, but
340from left to right; this is explained more clearly in the following
341paragraphs. The elements of the generated list will be the successive
342values of \var{expression}. The final \keyword{if} clause is
343optional; if present, \var{expression} is only evaluated and added to
344the result if \var{condition} is true.
345
346To make the semantics very clear, a list comprehension is equivalent
347to the following Python code:
348
349\begin{verbatim}
350for expr1 in sequence1:
351 for expr2 in sequence2:
352 ...
353 for exprN in sequenceN:
354 if (condition):
355 # Append the value of
356 # the expression to the
357 # resulting list.
358\end{verbatim}
359
360This means that when there are \keyword{for}...\keyword{in} clauses,
361the resulting list will be equal to the product of the lengths of all
362the sequences. If you have two lists of length 3, the output list is
3639 elements long:
364
365\begin{verbatim}
366seq1 = 'abc'
367seq2 = (1,2,3)
368>>> [ (x,y) for x in seq1 for y in seq2]
369[('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1),
370('c', 2), ('c', 3)]
371\end{verbatim}
372
373To avoid introducing an ambiguity into Python's grammar, if
374\var{expression} is creating a tuple, it must be surrounded with
375parentheses. The first list comprehension below is a syntax error,
376while the second one is correct:
377
378\begin{verbatim}
379# Syntax error
380[ x,y for x in seq1 for y in seq2]
381# Correct
382[ (x,y) for x in seq1 for y in seq2]
383\end{verbatim}
384
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000385The idea of list comprehensions originally comes from the functional
386programming language Haskell (\url{http://www.haskell.org}). Greg
387Ewing argued most effectively for adding them to Python and wrote the
388initial list comprehension patch, which was then discussed for a
389seemingly endless time on the python-dev mailing list and kept
390up-to-date by Skip Montanaro.
391
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000392% ======================================================================
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000393\section{Augmented Assignment}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000394
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000395Augmented assignment operators, another long-requested feature, have
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000396been added to Python 2.0. Augmented assignment operators include
397\code{+=}, \code{-=}, \code{*=}, and so forth. For example, the
398statement \code{a += 2} increments the value of the variable
399\code{a} by 2, equivalent to the slightly lengthier \code{a = a + 2}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000400
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000401The full list of supported assignment operators is \code{+=},
402\code{-=}, \code{*=}, \code{/=}, \code{\%=}, \code{**=}, \code{\&=},
Andrew M. Kuchling3cdb5762000-08-30 12:55:42 +0000403\code{|=}, \verb|^=|, \code{>>=}, and \code{<<=}. Python classes can
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000404override the augmented assignment operators by defining methods named
405\method{__iadd__}, \method{__isub__}, etc. For example, the following
406\class{Number} class stores a number and supports using += to create a
407new instance with an incremented value.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000408
409\begin{verbatim}
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000410class Number:
411 def __init__(self, value):
412 self.value = value
413 def __iadd__(self, increment):
414 return Number( self.value + increment)
415
416n = Number(5)
417n += 3
418print n.value
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000419\end{verbatim}
420
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000421The \method{__iadd__} special method is called with the value of the
422increment, and should return a new instance with an appropriately
423modified value; this return value is bound as the new value of the
424variable on the left-hand side.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000425
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000426Augmented assignment operators were first introduced in the C
427programming language, and most C-derived languages, such as
428\program{awk}, C++, Java, Perl, and PHP also support them. The augmented
429assignment patch was implemented by Thomas Wouters.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000430
431% ======================================================================
432\section{String Methods}
433
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000434Until now string-manipulation functionality was in the \module{string}
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000435module, which was usually a front-end for the \module{strop}
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000436module written in C. The addition of Unicode posed a difficulty for
437the \module{strop} module, because the functions would all need to be
438rewritten in order to accept either 8-bit or Unicode strings. For
439functions such as \function{string.replace()}, which takes 3 string
440arguments, that means eight possible permutations, and correspondingly
441complicated code.
442
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000443Instead, Python 2.0 pushes the problem onto the string type, making
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000444string manipulation functionality available through methods on both
4458-bit strings and Unicode strings.
446
447\begin{verbatim}
448>>> 'andrew'.capitalize()
449'Andrew'
450>>> 'hostname'.replace('os', 'linux')
451'hlinuxtname'
452>>> 'moshe'.find('sh')
4532
454\end{verbatim}
455
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000456One thing that hasn't changed, a noteworthy April Fools' joke
457notwithstanding, is that Python strings are immutable. Thus, the
458string methods return new strings, and do not modify the string on
459which they operate.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000460
461The old \module{string} module is still around for backwards
462compatibility, but it mostly acts as a front-end to the new string
463methods.
464
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000465Two methods which have no parallel in pre-2.0 versions, although they
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000466did exist in JPython for quite some time, are \method{startswith()}
467and \method{endswith}. \code{s.startswith(t)} is equivalent to \code{s[:len(t)]
468== t}, while \code{s.endswith(t)} is equivalent to \code{s[-len(t):] == t}.
469
Andrew M. Kuchlingfed4f1e2000-07-01 12:33:43 +0000470One other method which deserves special mention is \method{join}. The
471\method{join} method of a string receives one parameter, a sequence of
472strings, and is equivalent to the \function{string.join} function from
473the old \module{string} module, with the arguments reversed. In other
474words, \code{s.join(seq)} is equivalent to the old
475\code{string.join(seq, s)}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000476
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000477% ======================================================================
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +0000478\section{Garbage Collection of Cycles}
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000479
480The C implementation of Python uses reference counting to implement
481garbage collection. Every Python object maintains a count of the
482number of references pointing to itself, and adjusts the count as
483references are created or destroyed. Once the reference count reaches
484zero, the object is no longer accessible, since you need to have a
485reference to an object to access it, and if the count is zero, no
486references exist any longer.
487
488Reference counting has some pleasant properties: it's easy to
489understand and implement, and the resulting implementation is
490portable, fairly fast, and reacts well with other libraries that
491implement their own memory handling schemes. The major problem with
492reference counting is that it sometimes doesn't realise that objects
493are no longer accessible, resulting in a memory leak. This happens
494when there are cycles of references.
495
496Consider the simplest possible cycle,
497a class instance which has a reference to itself:
498
499\begin{verbatim}
500instance = SomeClass()
501instance.myself = instance
502\end{verbatim}
503
504After the above two lines of code have been executed, the reference
505count of \code{instance} is 2; one reference is from the variable
506named \samp{'instance'}, and the other is from the \samp{myself}
507attribute of the instance.
508
509If the next line of code is \code{del instance}, what happens? The
510reference count of \code{instance} is decreased by 1, so it has a
511reference count of 1; the reference in the \samp{myself} attribute
512still exists. Yet the instance is no longer accessible through Python
513code, and it could be deleted. Several objects can participate in a
514cycle if they have references to each other, causing all of the
515objects to be leaked.
516
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +0000517Python 2.0 fixes this problem by periodically executing a cycle
518detection algorithm which looks for inaccessible cycles and deletes
519the objects involved. A new \module{gc} module provides functions to
520perform a garbage collection, obtain debugging statistics, and tuning
521the collector's parameters.
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000522
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +0000523Running the cycle detection algorithm takes some time, and therefore
524will result in some additional overhead. It is hoped that after we've
525gotten experience with the cycle collection from using 2.0, Python 2.1
526will be able to minimize the overhead with careful tuning. It's not
527yet obvious how much performance is lost, because benchmarking this is
528tricky and depends crucially on how often the program creates and
529destroys objects. The detection of cycles can be disabled when Python
530is compiled, if you can't afford even a tiny speed penalty or suspect
531that the cycle collection is buggy, by specifying the
532\samp{--without-cycle-gc} switch when running the \file{configure}
533script.
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000534
535Several people tackled this problem and contributed to a solution. An
536early implementation of the cycle detection approach was written by
537Toby Kelsey. The current algorithm was suggested by Eric Tiedemann
538during a visit to CNRI, and Guido van Rossum and Neil Schemenauer
539wrote two different implementations, which were later integrated by
540Neil. Lots of other people offered suggestions along the way; the
541March 2000 archives of the python-dev mailing list contain most of the
542relevant discussion, especially in the threads titled ``Reference
543cycle collection for Python'' and ``Finalization again''.
544
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000545% ======================================================================
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000546\section{Other Core Changes}
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000547
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000548Various minor changes have been made to Python's syntax and built-in
549functions. None of the changes are very far-reaching, but they're
550handy conveniences.
551
552\subsection{Minor Language Changes}
553
554A new syntax makes it more convenient to call a given function
555with a tuple of arguments and/or a dictionary of keyword arguments.
556In Python 1.5 and earlier, you'd use the \function{apply()}
557built-in function: \code{apply(f, \var{args}, \var{kw})} calls the
558function \function{f()} with the argument tuple \var{args} and the
559keyword arguments in the dictionary \var{kw}. \function{apply()}
560is the same in 2.0, but thanks to a patch from
561Greg Ewing, \code{f(*\var{args}, **\var{kw})} as a shorter
562and clearer way to achieve the same effect. This syntax is
563symmetrical with the syntax for defining functions:
564
565\begin{verbatim}
566def f(*args, **kw):
567 # args is a tuple of positional args,
568 # kw is a dictionary of keyword args
569 ...
570\end{verbatim}
571
572The \keyword{print} statement can now have its output directed to a
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000573file-like object by following the \keyword{print} with
574\verb|>> file|, similar to the redirection operator in Unix shells.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000575Previously you'd either have to use the \method{write()} method of the
576file-like object, which lacks the convenience and simplicity of
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000577\keyword{print}, or you could assign a new value to
578\code{sys.stdout} and then restore the old value. For sending output to standard error,
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000579it's much easier to write this:
580
581\begin{verbatim}
582print >> sys.stderr, "Warning: action field not supplied"
583\end{verbatim}
584
585Modules can now be renamed on importing them, using the syntax
586\code{import \var{module} as \var{name}} or \code{from \var{module}
587import \var{name} as \var{othername}}. The patch was submitted by
588Thomas Wouters.
589
590A new format style is available when using the \code{\%} operator;
591'\%r' will insert the \function{repr()} of its argument. This was
592also added from symmetry considerations, this time for symmetry with
593the existing '\%s' format style, which inserts the \function{str()} of
594its argument. For example, \code{'\%r \%s' \% ('abc', 'abc')} returns a
595string containing \verb|'abc' abc|.
596
597Previously there was no way to implement a class that overrode
598Python's built-in \keyword{in} operator and implemented a custom
599version. \code{\var{obj} in \var{seq}} returns true if \var{obj} is
600present in the sequence \var{seq}; Python computes this by simply
601trying every index of the sequence until either \var{obj} is found or
602an \exception{IndexError} is encountered. Moshe Zadka contributed a
603patch which adds a \method{__contains__} magic method for providing a
604custom implementation for \keyword{in}. Additionally, new built-in
605objects written in C can define what \keyword{in} means for them via a
606new slot in the sequence protocol.
607
608Earlier versions of Python used a recursive algorithm for deleting
609objects. Deeply nested data structures could cause the interpreter to
610fill up the C stack and crash; Christian Tismer rewrote the deletion
611logic to fix this problem. On a related note, comparing recursive
612objects recursed infinitely and crashed; Jeremy Hylton rewrote the
613code to no longer crash, producing a useful result instead. For
614example, after this code:
615
616\begin{verbatim}
617a = []
618b = []
619a.append(a)
620b.append(b)
621\end{verbatim}
622
623The comparison \code{a==b} returns true, because the two recursive
Andrew M. Kuchling6032c482000-10-12 02:37:14 +0000624data structures are isomorphic. See the thread ``trashcan
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000625and PR\#7'' in the April 2000 archives of the python-dev mailing list
626for the discussion leading up to this implementation, and some useful
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +0000627relevant links.
Andrew M. Kuchling6032c482000-10-12 02:37:14 +0000628% Starting URL:
629% http://www.python.org/pipermail/python-dev/2000-April/004834.html
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000630
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +0000631Note that comparisons can now also raise exceptions. In earlier
632versions of Python, a comparison operation such as \code{cmp(a,b)}
633would always produce an answer, even if a user-defined
634\method{__cmp__} method encountered an error, since the resulting
635exception would simply be silently swallowed.
636
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000637Work has been done on porting Python to 64-bit Windows on the Itanium
638processor, mostly by Trent Mick of ActiveState. (Confusingly,
639\code{sys.platform} is still \code{'win32'} on Win64 because it seems
640that for ease of porting, MS Visual C++ treats code as 32 bit on Itanium.)
641PythonWin also supports Windows CE; see the Python CE page at
642\url{http://starship.python.net/crew/mhammond/ce/} for more
643information.
644
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +0000645Another new platform is Darwin/MacOS X; inital support for it is in
646Python 2.0. Dynamic loading works, if you specify ``configure
647--with-dyld --with-suffix=.x''. Consult the README in the Python
648source distribution for more instructions.
649
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000650An attempt has been made to alleviate one of Python's warts, the
651often-confusing \exception{NameError} exception when code refers to a
652local variable before the variable has been assigned a value. For
653example, the following code raises an exception on the \keyword{print}
654statement in both 1.5.2 and 2.0; in 1.5.2 a \exception{NameError}
655exception is raised, while 2.0 raises a new
656\exception{UnboundLocalError} exception.
657\exception{UnboundLocalError} is a subclass of \exception{NameError},
658so any existing code that expects \exception{NameError} to be raised
659should still work.
660
661\begin{verbatim}
662def f():
663 print "i=",i
664 i = i + 1
665f()
666\end{verbatim}
667
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000668Two new exceptions, \exception{TabError} and
669\exception{IndentationError}, have been introduced. They're both
670subclasses of \exception{SyntaxError}, and are raised when Python code
671is found to be improperly indented.
672
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000673\subsection{Changes to Built-in Functions}
674
675A new built-in, \function{zip(\var{seq1}, \var{seq2}, ...)}, has been
676added. \function{zip()} returns a list of tuples where each tuple
677contains the i-th element from each of the argument sequences. The
678difference between \function{zip()} and \code{map(None, \var{seq1},
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000679\var{seq2})} is that \function{map()} pads the sequences with
680\code{None} if the sequences aren't all of the same length, while
681\function{zip()} truncates the returned list to the length of the
682shortest argument sequence.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000683
684The \function{int()} and \function{long()} functions now accept an
685optional ``base'' parameter when the first argument is a string.
686\code{int('123', 10)} returns 123, while \code{int('123', 16)} returns
687291. \code{int(123, 16)} raises a \exception{TypeError} exception
688with the message ``can't convert non-string with explicit base''.
689
690A new variable holding more detailed version information has been
691added to the \module{sys} module. \code{sys.version_info} is a tuple
692\code{(\var{major}, \var{minor}, \var{micro}, \var{level},
693\var{serial})} For example, in a hypothetical 2.0.1beta1,
694\code{sys.version_info} would be \code{(2, 0, 1, 'beta', 1)}.
695\var{level} is a string such as \code{"alpha"}, \code{"beta"}, or
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000696\code{"final"} for a final release.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000697
698Dictionaries have an odd new method, \method{setdefault(\var{key},
699\var{default})}, which behaves similarly to the existing
700\method{get()} method. However, if the key is missing,
701\method{setdefault()} both returns the value of \var{default} as
702\method{get()} would do, and also inserts it into the dictionary as
703the value for \var{key}. Thus, the following lines of code:
704
705\begin{verbatim}
706if dict.has_key( key ): return dict[key]
707else:
708 dict[key] = []
709 return dict[key]
710\end{verbatim}
711
712can be reduced to a single \code{return dict.setdefault(key, [])} statement.
713
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000714The interpreter sets a maximum recursion depth in order to catch
715runaway recursion before filling the C stack and causing a core dump
716or GPF.. Previously this limit was fixed when you compiled Python,
717but in 2.0 the maximum recursion depth can be read and modified using
718\function{sys.getrecursionlimit} and \function{sys.setrecursionlimit}.
719The default value is 1000, and a rough maximum value for a given
720platform can be found by running a new script,
721\file{Misc/find_recursionlimit.py}.
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000722
723% ======================================================================
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000724\section{Porting to 2.0}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000725
726New Python releases try hard to be compatible with previous releases,
727and the record has been pretty good. However, some changes are
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000728considered useful enough, usually because they fix initial design decisions that
729turned out to be actively mistaken, that breaking backward compatibility
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000730can't always be avoided. This section lists the changes in Python 2.0
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000731that may cause old Python code to break.
732
733The change which will probably break the most code is tightening up
734the arguments accepted by some methods. Some methods would take
735multiple arguments and treat them as a tuple, particularly various
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000736list methods such as \method{.append()} and \method{.insert()}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000737In earlier versions of Python, if \code{L} is a list, \code{L.append(
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00007381,2 )} appends the tuple \code{(1,2)} to the list. In Python 2.0 this
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000739causes a \exception{TypeError} exception to be raised, with the
740message: 'append requires exactly 1 argument; 2 given'. The fix is to
741simply add an extra set of parentheses to pass both values as a tuple:
742\code{L.append( (1,2) )}.
743
744The earlier versions of these methods were more forgiving because they
745used an old function in Python's C interface to parse their arguments;
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00007462.0 modernizes them to use \function{PyArg_ParseTuple}, the current
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000747argument parsing function, which provides more helpful error messages
748and treats multi-argument calls as errors. If you absolutely must use
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00007492.0 but can't fix your code, you can edit \file{Objects/listobject.c}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000750and define the preprocessor symbol \code{NO_STRICT_LIST_APPEND} to
751preserve the old behaviour; this isn't recommended.
752
753Some of the functions in the \module{socket} module are still
754forgiving in this way. For example, \function{socket.connect(
755('hostname', 25) )} is the correct form, passing a tuple representing
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000756an IP address, but \function{socket.connect( 'hostname', 25 )} also
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000757works. \function{socket.connect_ex()} and \function{socket.bind()} are
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000758similarly easy-going. 2.0alpha1 tightened these functions up, but
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000759because the documentation actually used the erroneous multiple
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000760argument form, many people wrote code which would break with the
761stricter checking. GvR backed out the changes in the face of public
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000762reaction, so for the \module{socket} module, the documentation was
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000763fixed and the multiple argument form is simply marked as deprecated;
764it \emph{will} be tightened up again in a future Python version.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000765
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000766The \code{\e x} escape in string literals now takes exactly 2 hex
767digits. Previously it would consume all the hex digits following the
768'x' and take the lowest 8 bits of the result, so \code{\e x123456} was
769equivalent to \code{\e x56}.
770
771The \exception{AttributeError} exception has a more friendly error message,
772whose text will be something like \code{'Spam' instance has no attribute 'eggs'}.
773Previously the error message was just the missing attribute name \code{eggs}, and
774code written to take advantage of this fact will break in 2.0.
775
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000776Some work has been done to make integers and long integers a bit more
777interchangeable. In 1.5.2, large-file support was added for Solaris,
778to allow reading files larger than 2Gb; this made the \method{tell()}
779method of file objects return a long integer instead of a regular
780integer. Some code would subtract two file offsets and attempt to use
781the result to multiply a sequence or slice a string, but this raised a
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000782\exception{TypeError}. In 2.0, long integers can be used to multiply
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000783or slice a sequence, and it'll behave as you'd intuitively expect it
784to; \code{3L * 'abc'} produces 'abcabcabc', and \code{
785(0,1,2,3)[2L:4L]} produces (2,3). Long integers can also be used in
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +0000786various contexts where previously only integers were accepted, such
787as in the \method{seek()} method of file objects, and in the formats
788supported by the \verb|%| operator (\verb|%d|, \verb|%i|, \verb|%x|,
789etc.). For example, \code{"\%d" \% 2L**64} will produce the string
790\samp{18446744073709551616}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000791
792The subtlest long integer change of all is that the \function{str()}
793of a long integer no longer has a trailing 'L' character, though
794\function{repr()} still includes it. The 'L' annoyed many people who
795wanted to print long integers that looked just like regular integers,
796since they had to go out of their way to chop off the character. This
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000797is no longer a problem in 2.0, but code which does \code{str(longval)[:-1]} and assumes the 'L' is there, will now lose
798the final digit.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000799
800Taking the \function{repr()} of a float now uses a different
801formatting precision than \function{str()}. \function{repr()} uses
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000802\code{\%.17g} format string for C's \function{sprintf()}, while
803\function{str()} uses \code{\%.12g} as before. The effect is that
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000804\function{repr()} may occasionally show more decimal places than
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000805\function{str()}, for certain numbers.
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000806For example, the number 8.1 can't be represented exactly in binary, so
807\code{repr(8.1)} is \code{'8.0999999999999996'}, while str(8.1) is
808\code{'8.1'}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000809
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000810The \code{-X} command-line option, which turned all standard
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000811exceptions into strings instead of classes, has been removed; the
812standard exceptions will now always be classes. The
813\module{exceptions} module containing the standard exceptions was
814translated from Python to a built-in C module, written by Barry Warsaw
815and Fredrik Lundh.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000816
Andrew M. Kuchling791b3662000-07-01 15:04:18 +0000817% Commented out for now -- I don't think anyone will care.
818%The pattern and match objects provided by SRE are C types, not Python
819%class instances as in 1.5. This means you can no longer inherit from
820%\class{RegexObject} or \class{MatchObject}, but that shouldn't be much
821%of a problem since no one should have been doing that in the first
822%place.
823
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000824% ======================================================================
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000825\section{Extending/Embedding Changes}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000826
827Some of the changes are under the covers, and will only be apparent to
Andrew M. Kuchling8357c4c2000-07-01 00:14:43 +0000828people writing C extension modules or embedding a Python interpreter
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000829in a larger application. If you aren't dealing with Python's C API,
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000830you can safely skip this section.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000831
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000832The version number of the Python C API was incremented, so C
833extensions compiled for 1.5.2 must be recompiled in order to work with
Andrew M. Kuchlinga8d10782000-10-19 01:42:33 +00008342.0. On Windows, it's not possible for Python 2.0 to import a third
835party extension built for Python 1.5.x due to how Windows DLLs work,
836so Python will raise an exception and the import will fail.
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000837
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000838Users of Jim Fulton's ExtensionClass module will be pleased to find
839out that hooks have been added so that ExtensionClasses are now
840supported by \function{isinstance()} and \function{issubclass()}.
841This means you no longer have to remember to write code such as
842\code{if type(obj) == myExtensionClass}, but can use the more natural
843\code{if isinstance(obj, myExtensionClass)}.
844
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000845The \file{Python/importdl.c} file, which was a mass of \#ifdefs to
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000846support dynamic loading on many different platforms, was cleaned up
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000847and reorganised by Greg Stein. \file{importdl.c} is now quite small,
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000848and platform-specific code has been moved into a bunch of
Andrew M. Kuchlingb9fb1f22000-08-04 12:40:35 +0000849\file{Python/dynload_*.c} files. Another cleanup: there were also a
850number of \file{my*.h} files in the Include/ directory that held
851various portability hacks; they've been merged into a single file,
852\file{Include/pyport.h}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000853
854Vladimir Marangozov's long-awaited malloc restructuring was completed,
855to make it easy to have the Python interpreter use a custom allocator
856instead of C's standard \function{malloc()}. For documentation, read
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000857the comments in \file{Include/pymem.h} and
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000858\file{Include/objimpl.h}. For the lengthy discussions during which
859the interface was hammered out, see the Web archives of the 'patches'
860and 'python-dev' lists at python.org.
861
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000862Recent versions of the GUSI development environment for MacOS support
863POSIX threads. Therefore, Python's POSIX threading support now works
864on the Macintosh. Threading support using the user-space GNU \texttt{pth}
865library was also contributed.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000866
867Threading support on Windows was enhanced, too. Windows supports
868thread locks that use kernel objects only in case of contention; in
869the common case when there's no contention, they use simpler functions
870which are an order of magnitude faster. A threaded version of Python
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00008711.5.2 on NT is twice as slow as an unthreaded version; with the 2.0
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000872changes, the difference is only 10\%. These improvements were
873contributed by Yakov Markovitch.
874
Andrew M. Kuchling08d87c62000-07-09 15:05:15 +0000875Python 2.0's source now uses only ANSI C prototypes, so compiling Python now
876requires an ANSI C compiler, and can no longer be done using a compiler that
877only supports K\&R C.
878
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000879Previously the Python virtual machine used 16-bit numbers in its
880bytecode, limiting the size of source files. In particular, this
881affected the maximum size of literal lists and dictionaries in Python
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +0000882source; occasionally people who are generating Python code would run
883into this limit. A patch by Charles G. Waldman raises the limit from
884\verb|2^16| to \verb|2^{32}|.
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000885
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +0000886Three new convenience functions intended for adding constants to a
887module's dictionary at module initialization time were added:
888\function{PyModule_AddObject()}, \function{PyModule_AddIntConstant()},
889and \function{PyModule_AddStringConstant()}. Each of these functions
890takes a module object, a null-terminated C string containing the name
891to be added, and a third argument for the value to be assigned to the
892name. This third argument is, respectively, a Python object, a C
893long, or a C string.
894
895A wrapper API was added for Unix-style signal handlers.
896\function{PyOS_getsig()} gets a signal handler and
897\function{PyOS_setsig()} will set a new handler.
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000898
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000899% ======================================================================
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000900\section{Distutils: Making Modules Easy to Install}
901
902Before Python 2.0, installing modules was a tedious affair -- there
903was no way to figure out automatically where Python is installed, or
904what compiler options to use for extension modules. Software authors
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000905had to go through an arduous ritual of editing Makefiles and
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000906configuration files, which only really work on Unix and leave Windows
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +0000907and MacOS unsupported. Python users faced wildly differing
908installation instructions which varied between different extension
909packages, which made adminstering a Python installation something of a
910chore.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000911
912The SIG for distribution utilities, shepherded by Greg Ward, has
913created the Distutils, a system to make package installation much
914easier. They form the \module{distutils} package, a new part of
915Python's standard library. In the best case, installing a Python
916module from source will require the same steps: first you simply mean
917unpack the tarball or zip archive, and the run ``\code{python setup.py
918install}''. The platform will be automatically detected, the compiler
919will be recognized, C extension modules will be compiled, and the
920distribution installed into the proper directory. Optional
921command-line arguments provide more control over the installation
922process, the distutils package offers many places to override defaults
923-- separating the build from the install, building or installing in
924non-default directories, and more.
925
926In order to use the Distutils, you need to write a \file{setup.py}
927script. For the simple case, when the software contains only .py
928files, a minimal \file{setup.py} can be just a few lines long:
929
930\begin{verbatim}
931from distutils.core import setup
932setup (name = "foo", version = "1.0",
933 py_modules = ["module1", "module2"])
934\end{verbatim}
935
936The \file{setup.py} file isn't much more complicated if the software
937consists of a few packages:
938
939\begin{verbatim}
940from distutils.core import setup
941setup (name = "foo", version = "1.0",
942 packages = ["package", "package.subpackage"])
943\end{verbatim}
944
945A C extension can be the most complicated case; here's an example taken from
946the PyXML package:
947
948
949\begin{verbatim}
950from distutils.core import setup, Extension
951
952expat_extension = Extension('xml.parsers.pyexpat',
953 define_macros = [('XML_NS', None)],
954 include_dirs = [ 'extensions/expat/xmltok',
955 'extensions/expat/xmlparse' ],
956 sources = [ 'extensions/pyexpat.c',
957 'extensions/expat/xmltok/xmltok.c',
958 'extensions/expat/xmltok/xmlrole.c',
959 ]
960 )
961setup (name = "PyXML", version = "0.5.4",
962 ext_modules =[ expat_extension ] )
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000963\end{verbatim}
964
965The Distutils can also take care of creating source and binary
966distributions. The ``sdist'' command, run by ``\code{python setup.py
967sdist}', builds a source distribution such as \file{foo-1.0.tar.gz}.
968Adding new commands isn't difficult, ``bdist_rpm'' and
969``bdist_wininst'' commands have already been contributed to create an
970RPM distribution and a Windows installer for the software,
971respectively. Commands to create other distribution formats such as
972Debian packages and Solaris \file{.pkg} files are in various stages of
973development.
974
975All this is documented in a new manual, \textit{Distributing Python
976Modules}, that joins the basic set of Python documentation.
977
Fred Drake7486c6b2000-10-12 02:49:12 +0000978% ======================================================================
Andrew M. Kuchling6032c482000-10-12 02:37:14 +0000979\section{XML Modules}
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000980
Andrew M. Kuchling6032c482000-10-12 02:37:14 +0000981Python 1.5.2 included a simple XML parser in the form of the
982\module{xmllib} module, contributed by Sjoerd Mullender. Since
9831.5.2's release, two different interfaces for processing XML have
984become common: SAX2 (version 2 of the Simple API for XML) provides an
985event-driven interface with some similarities to \module{xmllib}, and
986the DOM (Document Object Model) provides a tree-based interface,
987transforming an XML document into a tree of nodes that can be
988traversed and modified. Python 2.0 includes a SAX2 interface and a
989stripped-down DOM interface as part of the \module{xml} package.
990Here we will give a brief overview of these new interfaces; consult
991the Python documentation or the source code for complete details.
992The Python XML SIG is also working on improved documentation.
993
994\subsection{SAX2 Support}
995
996SAX defines an event-driven interface for parsing XML. To use SAX,
997you must write a SAX handler class. Handler classes inherit from
998various classes provided by SAX, and override various methods that
999will then be called by the XML parser. For example, the
1000\method{startElement} and \method{endElement} methods are called for
1001every starting and end tag encountered by the parser, the
1002\method{characters()} method is called for every chunk of character
1003data, and so forth.
1004
1005The advantage of the event-driven approach is that that the whole
1006document doesn't have to be resident in memory at any one time, which
1007matters if you are processing really huge documents. However, writing
1008the SAX handler class can get very complicated if you're trying to
1009modify the document structure in some elaborate way.
1010
1011For example, this little example program defines a handler that prints
1012a message for every starting and ending tag, and then parses the file
1013\file{hamlet.xml} using it:
1014
1015\begin{verbatim}
1016from xml import sax
1017
1018class SimpleHandler(sax.ContentHandler):
1019 def startElement(self, name, attrs):
1020 print 'Start of element:', name, attrs.keys()
1021
1022 def endElement(self, name):
1023 print 'End of element:', name
1024
1025# Create a parser object
1026parser = sax.make_parser()
1027
1028# Tell it what handler to use
1029handler = SimpleHandler()
1030parser.setContentHandler( handler )
1031
1032# Parse a file!
1033parser.parse( 'hamlet.xml' )
1034\end{verbatim}
1035
1036For more information, consult the Python documentation, or the XML
1037HOWTO at \url{http://www.python.org/doc/howto/xml/}.
1038
1039\subsection{DOM Support}
1040
1041The Document Object Model is a tree-based representation for an XML
1042document. A top-level \class{Document} instance is the root of the
1043tree, and has a single child which is the top-level \class{Element}
1044instance. This \class{Element} has children nodes representing
1045character data and any sub-elements, which may have further children
1046of their own, and so forth. Using the DOM you can traverse the
1047resulting tree any way you like, access element and attribute values,
1048insert and delete nodes, and convert the tree back into XML.
1049
1050The DOM is useful for modifying XML documents, because you can create
1051a DOM tree, modify it by adding new nodes or rearranging subtrees, and
1052then produce a new XML document as output. You can also construct a
1053DOM tree manually and convert it to XML, which can be a more flexible
1054way of producing XML output than simply writing
1055\code{<tag1>}...\code{</tag1>} to a file.
1056
1057The DOM implementation included with Python lives in the
1058\module{xml.dom.minidom} module. It's a lightweight implementation of
1059the Level 1 DOM with support for XML namespaces. The
1060\function{parse()} and \function{parseString()} convenience
1061functions are provided for generating a DOM tree:
1062
1063\begin{verbatim}
1064from xml.dom import minidom
1065doc = minidom.parse('hamlet.xml')
1066\end{verbatim}
1067
1068\code{doc} is a \class{Document} instance. \class{Document}, like all
1069the other DOM classes such as \class{Element} and \class{Text}, is a
1070subclass of the \class{Node} base class. All the nodes in a DOM tree
1071therefore support certain common methods, such as \method{toxml()}
1072which returns a string containing the XML representation of the node
1073and its children. Each class also has special methods of its own; for
1074example, \class{Element} and \class{Document} instances have a method
1075to find all child elements with a given tag name. Continuing from the
1076previous 2-line example:
1077
1078\begin{verbatim}
1079perslist = doc.getElementsByTagName( 'PERSONA' )
1080print perslist[0].toxml()
1081print perslist[1].toxml()
1082\end{verbatim}
1083
1084For the \textit{Hamlet} XML file, the above few lines output:
1085
1086\begin{verbatim}
1087<PERSONA>CLAUDIUS, king of Denmark. </PERSONA>
1088<PERSONA>HAMLET, son to the late, and nephew to the present king.</PERSONA>
1089\end{verbatim}
1090
1091The root element of the document is available as
1092\code{doc.documentElement}, and its children can be easily modified
1093by deleting, adding, or removing nodes:
1094
1095\begin{verbatim}
1096root = doc.documentElement
1097
1098# Remove the first child
1099root.removeChild( root.childNodes[0] )
1100
1101# Move the new first child to the end
1102root.appendChild( root.childNodes[0] )
1103
1104# Insert the new first child (originally,
1105# the third child) before the 20th child.
1106root.insertBefore( root.childNodes[0], root.childNodes[20] )
1107\end{verbatim}
1108
1109Again, I will refer you to the Python documentation for a complete
1110listing of the different \class{Node} classes and their various methods.
1111
1112\subsection{Relationship to PyXML}
1113
1114The XML Special Interest Group has been working on XML-related Python
1115code for a while. Its code distribution, called PyXML, is available
1116from the SIG's Web pages at \url{http://www.python.org/sigs/xml-sig/}.
1117The PyXML distribution also used the package name \samp{xml}. If
1118you've written programs that used PyXML, you're probably wondering
1119about its compatibility with the 2.0 \module{xml} package.
1120
1121The answer is that Python 2.0's \module{xml} package isn't compatible
1122with PyXML, but can be made compatible by installing a recent version
1123PyXML. Many applications can get by with the XML support that is
1124included with Python 2.0, but more complicated applications will
1125require that the full PyXML package will be installed. When
1126installed, PyXML versions 0.6.0 or greater will replace the
1127\module{xml} package shipped with Python, and will be a strict
1128superset of the standard package, adding a bunch of additional
1129features. Some of the additional features in PyXML include:
1130
1131\begin{itemize}
1132\item 4DOM, a full DOM implementation
Andrew M. Kuchlingf1551702000-10-16 14:19:21 +00001133from FourThought, Inc.
Andrew M. Kuchling6032c482000-10-12 02:37:14 +00001134\item The xmlproc validating parser, written by Lars Marius Garshol.
1135\item The \module{sgmlop} parser accelerator module, written by Fredrik Lundh.
1136\end{itemize}
Andrew M. Kuchling43737642000-08-30 00:51:02 +00001137
1138% ======================================================================
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001139\section{Module changes}
1140
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00001141Lots of improvements and bugfixes were made to Python's extensive
1142standard library; some of the affected modules include
1143\module{readline}, \module{ConfigParser}, \module{cgi},
1144\module{calendar}, \module{posix}, \module{readline}, \module{xmllib},
1145\module{aifc}, \module{chunk, wave}, \module{random}, \module{shelve},
1146and \module{nntplib}. Consult the CVS logs for the exact
1147patch-by-patch details.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001148
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00001149Brian Gallew contributed OpenSSL support for the \module{socket}
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001150module. OpenSSL is an implementation of the Secure Socket Layer,
1151which encrypts the data being sent over a socket. When compiling
1152Python, you can edit \file{Modules/Setup} to include SSL support,
1153which adds an additional function to the \module{socket} module:
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00001154\function{socket.ssl(\var{socket}, \var{keyfile}, \var{certfile})},
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001155which takes a socket object and returns an SSL socket. The
1156\module{httplib} and \module{urllib} modules were also changed to
1157support ``https://'' URLs, though no one has implemented FTP or SMTP
1158over SSL.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001159
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +00001160The \module{httplib} module has been rewritten by Greg Stein to
1161support HTTP/1.1. Backward compatibility with the 1.5 version of
1162\module{httplib} is provided, though using HTTP/1.1 features such as
1163pipelining will require rewriting code to use a different set of
1164interfaces.
1165
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00001166The \module{Tkinter} module now supports Tcl/Tk version 8.1, 8.2, or
11678.3, and support for the older 7.x versions has been dropped. The
Andrew M. Kuchling791b3662000-07-01 15:04:18 +00001168Tkinter module now supports displaying Unicode strings in Tk widgets.
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +00001169Also, Fredrik Lundh contributed an optimization which makes operations
1170like \code{create_line} and \code{create_polygon} much faster,
Andrew M. Kuchling791b3662000-07-01 15:04:18 +00001171especially when using lots of coordinates.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001172
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00001173The \module{curses} module has been greatly extended, starting from
1174Oliver Andrich's enhanced version, to provide many additional
1175functions from ncurses and SYSV curses, such as colour, alternative
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +00001176character set support, pads, and mouse support. This means the module
1177is no longer compatible with operating systems that only have BSD
1178curses, but there don't seem to be any currently maintained OSes that
1179fall into this category.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001180
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001181As mentioned in the earlier discussion of 2.0's Unicode support, the
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001182underlying implementation of the regular expressions provided by the
1183\module{re} module has been changed. SRE, a new regular expression
1184engine written by Fredrik Lundh and partially funded by Hewlett
1185Packard, supports matching against both 8-bit strings and Unicode
1186strings.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001187
1188% ======================================================================
1189\section{New modules}
1190
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001191A number of new modules were added. We'll simply list them with brief
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001192descriptions; consult the 2.0 documentation for the details of a
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001193particular module.
1194
1195\begin{itemize}
1196
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +00001197\item{\module{atexit}}:
1198For registering functions to be called before the Python interpreter exits.
1199Code that currently sets
1200\code{sys.exitfunc} directly should be changed to
1201use the \module{atexit} module instead, importing \module{atexit}
1202and calling \function{atexit.register()} with
1203the function to be called on exit.
1204(Contributed by Skip Montanaro.)
1205
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001206\item{\module{codecs}, \module{encodings}, \module{unicodedata}:} Added as part of the new Unicode support.
1207
Andrew M. Kuchlingfed4f1e2000-07-01 12:33:43 +00001208\item{\module{filecmp}:} Supersedes the old \module{cmp}, \module{cmpcache} and
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001209\module{dircmp} modules, which have now become deprecated.
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +00001210(Contributed by Gordon MacMillan and Moshe Zadka.)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001211
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +00001212\item{\module{gettext}:} This module provides internationalization
1213(I18N) and localization (L10N) support for Python programs by
1214providing an interface to the GNU gettext message catalog library.
1215(Integrated by Barry Warsaw, from separate contributions by Martin von
1216Loewis, Peter Funk, and James Henstridge.)
1217
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +00001218\item{\module{linuxaudiodev}:} Support for the \file{/dev/audio}
1219device on Linux, a twin to the existing \module{sunaudiodev} module.
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +00001220(Contributed by Peter Bosch, with fixes by Jeremy Hylton.)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001221
1222\item{\module{mmap}:} An interface to memory-mapped files on both
1223Windows and Unix. A file's contents can be mapped directly into
1224memory, at which point it behaves like a mutable string, so its
1225contents can be read and modified. They can even be passed to
1226functions that expect ordinary strings, such as the \module{re}
1227module. (Contributed by Sam Rushing, with some extensions by
1228A.M. Kuchling.)
1229
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +00001230\item{\module{pyexpat}:} An interface to the Expat XML parser.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001231(Contributed by Paul Prescod.)
1232
1233\item{\module{robotparser}:} Parse a \file{robots.txt} file, which is
1234used for writing Web spiders that politely avoid certain areas of a
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +00001235Web site. The parser accepts the contents of a \file{robots.txt} file,
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001236builds a set of rules from it, and can then answer questions about
1237the fetchability of a given URL. (Contributed by Skip Montanaro.)
1238
1239\item{\module{tabnanny}:} A module/script to
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +00001240check Python source code for ambiguous indentation.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001241(Contributed by Tim Peters.)
1242
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +00001243\item{\module{UserString}:} A base class useful for deriving objects that behave like strings.
1244
Andrew M. Kuchling08d87c62000-07-09 15:05:15 +00001245\item{\module{webbrowser}:} A module that provides a platform independent
1246way to launch a web browser on a specific URL. For each platform, various
1247browsers are tried in a specific order. The user can alter which browser
1248is launched by setting the \var{BROWSER} environment variable.
1249(Originally inspired by Eric S. Raymond's patch to \module{urllib}
1250which added similar functionality, but
1251the final module comes from code originally
1252implemented by Fred Drake as \file{Tools/idle/BrowserControl.py},
1253and adapted for the standard library by Fred.)
1254
Andrew M. Kuchlingd500e442000-09-06 12:30:25 +00001255\item{\module{_winreg}:} An interface to the
Andrew M. Kuchlingfed4f1e2000-07-01 12:33:43 +00001256Windows registry. \module{_winreg} is an adaptation of functions that
1257have been part of PythonWin since 1995, but has now been added to the core
Andrew M. Kuchlingd500e442000-09-06 12:30:25 +00001258distribution, and enhanced to support Unicode.
1259\module{_winreg} was written by Bill Tutt and Mark Hammond.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001260
1261\item{\module{zipfile}:} A module for reading and writing ZIP-format
1262archives. These are archives produced by \program{PKZIP} on
1263DOS/Windows or \program{zip} on Unix, not to be confused with
1264\program{gzip}-format files (which are supported by the \module{gzip}
1265module)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001266(Contributed by James C. Ahlstrom.)
1267
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +00001268\item{\module{imputil}:} A module that provides a simpler way for
1269writing customised import hooks, in comparison to the existing
1270\module{ihooks} module. (Implemented by Greg Stein, with much
1271discussion on python-dev along the way.)
1272
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001273\end{itemize}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001274
1275% ======================================================================
1276\section{IDLE Improvements}
1277
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +00001278IDLE is the official Python cross-platform IDE, written using Tkinter.
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001279Python 2.0 includes IDLE 0.6, which adds a number of new features and
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +00001280improvements. A partial list:
1281
1282\begin{itemize}
1283\item UI improvements and optimizations,
1284especially in the area of syntax highlighting and auto-indentation.
1285
1286\item The class browser now shows more information, such as the top
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001287level functions in a module.
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +00001288
1289\item Tab width is now a user settable option. When opening an existing Python
1290file, IDLE automatically detects the indentation conventions, and adapts.
1291
1292\item There is now support for calling browsers on various platforms,
1293used to open the Python documentation in a browser.
1294
1295\item IDLE now has a command line, which is largely similar to
1296the vanilla Python interpreter.
1297
1298\item Call tips were added in many places.
1299
1300\item IDLE can now be installed as a package.
1301
1302\item In the editor window, there is now a line/column bar at the bottom.
1303
1304\item Three new keystroke commands: Check module (Alt-F5), Import
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001305module (F5) and Run script (Ctrl-F5).
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +00001306
1307\end{itemize}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001308
1309% ======================================================================
1310\section{Deleted and Deprecated Modules}
1311
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001312A few modules have been dropped because they're obsolete, or because
1313there are now better ways to do the same thing. The \module{stdwin}
1314module is gone; it was for a platform-independent windowing toolkit
1315that's no longer developed.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001316
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +00001317A number of modules have been moved to the
1318\file{lib-old} subdirectory:
1319\module{cmp}, \module{cmpcache}, \module{dircmp}, \module{dump},
1320\module{find}, \module{grep}, \module{packmail},
1321\module{poly}, \module{util}, \module{whatsound}, \module{zmod}.
1322If you have code which relies on a module that's been moved to
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001323\file{lib-old}, you can simply add that directory to \code{sys.path}
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +00001324to get them back, but you're encouraged to update any code that uses
1325these modules.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001326
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001327\section{Acknowledgements}
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001328
Andrew M. Kuchlinga6161ed2000-07-01 00:23:02 +00001329The authors would like to thank the following people for offering
Andrew M. Kuchlinga8d10782000-10-19 01:42:33 +00001330suggestions on various drafts of this article: David Bolen, Mark Hammond, Gregg Hauser,
Andrew M. Kuchlingec1722e2000-10-12 03:04:22 +00001331Jeremy Hylton, Fredrik Lundh, Detlef Lannert, Aahz Maruch, Skip
1332Montanaro, Vladimir Marangozov, Guido van Rossum, Neil Schemenauer,
1333and Russ Schmidt.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001334
1335\end{document}