blob: 7440b92dd1090eecd69d9cf54d0887603d601a04 [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. Kuchling5e08a012000-09-04 17:59:27 +00006\release{0.05}
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. Kuchling69db0e42000-06-28 02:16:00 +000014{\large This is a draft document; please report inaccuracies and
15omissions to the authors. This document should not be treated as
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000016definitive; features described here might be removed or changed during
17the beta cycle before the final release of Python 2.0.
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +000018}
19
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000020A new release of Python, version 2.0, will be released some time this
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +000021autumn. Beta versions are already available from
Andrew M. Kuchling6d4addd2000-09-25 14:40:15 +000022\url{http://www.pythonlabs.com/products/python2.0/}. This article
Andrew M. Kuchling70ba3822000-07-01 00:13:30 +000023covers the exciting new features in 2.0, highlights some other useful
24changes, and points out a few incompatible changes that may require
25rewriting code.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000026
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000027Python's development never completely stops between releases, and a
28steady flow of bug fixes and improvements are always being submitted.
29A host of minor fixes, a few optimizations, additional docstrings, and
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000030better error messages went into 2.0; to list them all would be
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000031impossible, but they're certainly significant. Consult the
32publicly-available CVS logs if you want to see the full list.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000033
34% ======================================================================
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +000035\section{What About Python 1.6?}
36
37Python 1.6 can be thought of as the Contractual Obligations Python
38release. After the core development team left CNRI in May 2000, CNRI
39requested that a 1.6 release be created, containing all the work on
40Python that had been performed at CNRI. Python 1.6 therefore
41represents the state of the CVS tree as of May 2000, with the most
42significant new feature being Unicode support. Development continued
43after May, of course, so the 1.6 tree received a few fixes to ensure
44that it's forward-compatible with Python 2.0. 1.6 is therefore part
45of Python's evolution, and not a side branch.
46
47So, should you take much interest in Python 1.6? Probably not. The
481.6final and 2.0beta1 releases were made on the same day (September 5,
492000), the plan being to finalize Python 2.0 within a month or so. If
50you have applications to maintain, there seems little point in
51breaking things by moving to 1.6, fixing them, and then having another
52round of breakage within a month by moving to 2.0; you're better off
53just going straight to 2.0. Most of the really interesting features
54described in this document are only in 2.0, because a lot of work was
55done between May and September.
56
57% ======================================================================
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +000058\section{New Development Process}
59
60The most important change in Python 2.0 may not be to the code at all,
Andrew M. Kuchlingd44dc3c2000-10-04 12:40:44 +000061but to how Python is developed: in May 2000 the Python developers
62began using the tools made available by SourceForge for storing
63source code, tracking bug reports, and managing the queue of patch
64submissions. To report bugs or submit patches for Python 2.0, use the
65bug tracking and patch manager tools available from Python's project
66page, located at \url{http://sourceforge.net/projects/python/}.
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +000067
Andrew M. Kuchlingd44dc3c2000-10-04 12:40:44 +000068The most important of the services now hosted at SourceForge is the
69Python CVS tree, the version-controlled repository containing the
70source code for Python. Previously, there were roughly 7 or so people
71who had write access to the CVS tree, and all patches had to be
72inspected and checked in by one of the people on this short list.
73Obviously, this wasn't very scalable. By moving the CVS tree to
74SourceForge, it became possible to grant write access to more people;
75as of September 2000 there were 27 people able to check in changes, a
76fourfold increase. This makes possible large-scale changes that
77wouldn't be attempted if they'd have to be filtered through the small
78group of core developers. For example, one day Peter Schneider-Kamp
79took it into his head to drop K\&R C compatibility and convert the C
80source for Python to ANSI C. After getting approval on the python-dev
81mailing list, he launched into a flurry of checkins that lasted about
82a week, other developers joined in to help, and the job was done. If
83there were only 5 people with write access, probably that task would
84have been viewed as ``nice, but not worth the time and effort needed''
85and it would never have gotten done.
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +000086
Andrew M. Kuchlingd44dc3c2000-10-04 12:40:44 +000087The shift to using SourceForge's services has resulted in a remarkable
88increase in the speed of development. Patches now get submitted,
89commented on, revised by people other than the original submitter, and
90bounced back and forth between people until the patch is deemed worth
91checking in. This didn't come without a cost: developers now have
92more e-mail to deal with, more mailing lists to follow, and special
93tools had to be written for the new environment. For example,
94SourceForge sends default patch and bug notification e-mail messages
95that are completely unhelpful, so Ka-Ping Yee wrote an HTML
96screen-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
105slant. The most significant change from the Apache model is that
106Guido van Rossum, who has Benevolent Dictator For Life status, can
107ignore the votes of the other developers and approve or reject a
108change, effectively giving him a +Infinity / -Infinity vote.
109
110Producing an actual patch is the last step in adding a new feature,
111and is usually easy compared to the earlier task of coming up with a
112good design. Discussions of new features can often explode into
113lengthy mailing list threads, making the discussion hard to follow,
114and no one can read every posting to python-dev. Therefore, a
115relatively formal process has been set up to write Python Enhancement
116Proposals (PEPs), modelled on the Internet RFC process. PEPs are
117draft documents that describe a proposed new feature, and are
118continually revised until the community reaches a consensus, either
119accepting or rejecting the proposal. Quoting from the introduction to
120PEP 1, ``PEP Purpose and Guidelines'':
121
122\begin{quotation}
123 PEP stands for Python Enhancement Proposal. A PEP is a design
124 document providing information to the Python community, or
125 describing a new feature for Python. The PEP should provide a
126 concise technical specification of the feature and a rationale for
127 the feature.
128
129 We intend PEPs to be the primary mechanisms for proposing new
130 features, for collecting community input on an issue, and for
131 documenting the design decisions that have gone into Python. The
132 PEP author is responsible for building consensus within the
133 community and documenting dissenting opinions.
134\end{quotation}
135
136Read the rest of PEP 1 for the details of the PEP editorial process,
137style, and format. PEPs are kept in the Python CVS tree on
138SourceForge, though they're not part of the Python 2.0 distribution,
139and are also available in HTML form from
140\url{http://python.sourceforge.net/peps/}. As of September 2000,
141there are 25 PEPS, ranging from PEP 201, ``Lockstep Iteration'', to
142PEP 225, ``Elementwise/Objectwise Operators''.
143
Andrew M. Kuchlingbe870dd2000-09-27 02:36:10 +0000144% ======================================================================
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000145\section{Unicode}
146
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000147The largest new feature in Python 2.0 is a new fundamental data type:
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000148Unicode strings. Unicode uses 16-bit numbers to represent characters
149instead of the 8-bit number used by ASCII, meaning that 65,536
150distinct characters can be supported.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000151
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000152The final interface for Unicode support was arrived at through
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000153countless often-stormy discussions on the python-dev mailing list, and
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000154mostly implemented by Marc-Andr\'e Lemburg, based on a Unicode string
155type implementation by Fredrik Lundh. A detailed explanation of the
156interface is in the file \file{Misc/unicode.txt} in the Python source
157distribution; it's also available on the Web at
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000158\url{http://starship.python.net/crew/lemburg/unicode-proposal.txt}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000159This article will simply cover the most significant points from the
160full interface.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000161
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000162In Python source code, Unicode strings are written as
163\code{u"string"}. Arbitrary Unicode characters can be written using a
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000164new escape sequence, \code{\e u\var{HHHH}}, where \var{HHHH} is a
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00001654-digit hexadecimal number from 0000 to FFFF. The existing
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000166\code{\e x\var{HHHH}} escape sequence can also be used, and octal
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000167escapes can be used for characters up to U+01FF, which is represented
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000168by \code{\e 777}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000169
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000170Unicode strings, just like regular strings, are an immutable sequence
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000171type. They can be indexed and sliced, but not modified in place.
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000172Unicode strings have an \method{encode( \optional{encoding} )} method
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000173that returns an 8-bit string in the desired encoding. Encodings are
174named by strings, such as \code{'ascii'}, \code{'utf-8'},
175\code{'iso-8859-1'}, or whatever. A codec API is defined for
176implementing and registering new encodings that are then available
177throughout a Python program. If an encoding isn't specified, the
178default encoding is usually 7-bit ASCII, though it can be changed for
179your Python installation by calling the
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000180\function{sys.setdefaultencoding(\var{encoding})} function in a
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000181customised version of \file{site.py}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000182
183Combining 8-bit and Unicode strings always coerces to Unicode, using
184the default ASCII encoding; the result of \code{'a' + u'bc'} is
Andrew M. Kuchling7f6270d2000-06-09 02:48:18 +0000185\code{u'abc'}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000186
187New built-in functions have been added, and existing built-ins
188modified to support Unicode:
189
190\begin{itemize}
191\item \code{unichr(\var{ch})} returns a Unicode string 1 character
192long, containing the character \var{ch}.
193
194\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.
195
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000196\item \code{unicode(\var{string} \optional{, \var{encoding}}
197\optional{, \var{errors}} ) } creates a Unicode string from an 8-bit
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000198string. \code{encoding} is a string naming the encoding to use.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000199The \code{errors} parameter specifies the treatment of characters that
200are invalid for the current encoding; passing \code{'strict'} as the
201value causes an exception to be raised on any encoding error, while
202\code{'ignore'} causes errors to be silently ignored and
203\code{'replace'} uses U+FFFD, the official replacement character, in
204case of any problems.
205
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +0000206\item The \keyword{exec} statement, and various built-ins such as
207\code{eval()}, \code{getattr()}, and \code{setattr()} will also
208accept Unicode strings as well as regular strings. (It's possible
209that the process of fixing this missed some built-ins; if you find a
210built-in function that accepts strings but doesn't accept Unicode
211strings at all, please report it as a bug.)
212
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000213\end{itemize}
214
215A new module, \module{unicodedata}, provides an interface to Unicode
216character properties. For example, \code{unicodedata.category(u'A')}
217returns the 2-character string 'Lu', the 'L' denoting it's a letter,
218and 'u' meaning that it's uppercase.
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000219\code{u.bidirectional(u'\e x0660')} returns 'AN', meaning that U+0660 is
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000220an Arabic number.
221
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000222The \module{codecs} module contains functions to look up existing encodings
223and register new ones. Unless you want to implement a
224new encoding, you'll most often use the
225\function{codecs.lookup(\var{encoding})} function, which returns a
2264-element tuple: \code{(\var{encode_func},
227\var{decode_func}, \var{stream_reader}, \var{stream_writer})}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000228
229\begin{itemize}
230\item \var{encode_func} is a function that takes a Unicode string, and
231returns a 2-tuple \code{(\var{string}, \var{length})}. \var{string}
232is an 8-bit string containing a portion (perhaps all) of the Unicode
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000233string converted into the given encoding, and \var{length} tells you
234how much of the Unicode string was converted.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000235
Andrew M. Kuchling118ee962000-09-27 01:01:18 +0000236\item \var{decode_func} is the opposite of \var{encode_func}, taking
237an 8-bit string and returning a 2-tuple \code{(\var{ustring},
238\var{length})}, consisting of the resulting Unicode string
239\var{ustring} and the integer \var{length} telling how much of the
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +00002408-bit string was consumed.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000241
242\item \var{stream_reader} is a class that supports decoding input from
243a stream. \var{stream_reader(\var{file_obj})} returns an object that
244supports the \method{read()}, \method{readline()}, and
245\method{readlines()} methods. These methods will all translate from
246the given encoding and return Unicode strings.
247
248\item \var{stream_writer}, similarly, is a class that supports
249encoding output to a stream. \var{stream_writer(\var{file_obj})}
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000250returns an object that supports the \method{write()} and
251\method{writelines()} methods. These methods expect Unicode strings,
252translating them to the given encoding on output.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000253\end{itemize}
254
255For example, the following code writes a Unicode string into a file,
256encoding it as UTF-8:
257
258\begin{verbatim}
259import codecs
260
261unistr = u'\u0660\u2000ab ...'
262
263(UTF8_encode, UTF8_decode,
264 UTF8_streamreader, UTF8_streamwriter) = codecs.lookup('UTF-8')
265
266output = UTF8_streamwriter( open( '/tmp/output', 'wb') )
267output.write( unistr )
268output.close()
269\end{verbatim}
270
271The following code would then read UTF-8 input from the file:
272
273\begin{verbatim}
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000274input = UTF8_streamreader( open( '/tmp/output', 'rb') )
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000275print repr(input.read())
276input.close()
277\end{verbatim}
278
279Unicode-aware regular expressions are available through the
280\module{re} module, which has a new underlying implementation called
281SRE written by Fredrik Lundh of Secret Labs AB.
282
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000283A \code{-U} command line option was added which causes the Python
284compiler to interpret all string literals as Unicode string literals.
285This is intended to be used in testing and future-proofing your Python
286code, since some future version of Python may drop support for 8-bit
287strings and provide only Unicode strings.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000288
289% ======================================================================
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000290\section{List Comprehensions}
291
292Lists are a workhorse data type in Python, and many programs
293manipulate a list at some point. Two common operations on lists are
294to loop over them, and either pick out the elements that meet a
295certain criterion, or apply some function to each element. For
296example, given a list of strings, you might want to pull out all the
297strings containing a given substring, or strip off trailing whitespace
298from each line.
299
300The existing \function{map()} and \function{filter()} functions can be
301used for this purpose, but they require a function as one of their
302arguments. This is fine if there's an existing built-in function that
303can be passed directly, but if there isn't, you have to create a
304little function to do the required work, and Python's scoping rules
305make the result ugly if the little function needs additional
306information. Take the first example in the previous paragraph,
307finding all the strings in the list containing a given substring. You
308could write the following to do it:
309
310\begin{verbatim}
311# Given the list L, make a list of all strings
312# containing the substring S.
313sublist = filter( lambda s, substring=S:
314 string.find(s, substring) != -1,
315 L)
316\end{verbatim}
317
318Because of Python's scoping rules, a default argument is used so that
319the anonymous function created by the \keyword{lambda} statement knows
320what substring is being searched for. List comprehensions make this
321cleaner:
322
323\begin{verbatim}
324sublist = [ s for s in L if string.find(s, S) != -1 ]
325\end{verbatim}
326
327List comprehensions have the form:
328
329\begin{verbatim}
330[ expression for expr in sequence1
331 for expr2 in sequence2 ...
332 for exprN in sequenceN
333 if condition
334\end{verbatim}
335
336The \keyword{for}...\keyword{in} clauses contain the sequences to be
337iterated over. The sequences do not have to be the same length,
338because they are \emph{not} iterated over in parallel, but
339from left to right; this is explained more clearly in the following
340paragraphs. The elements of the generated list will be the successive
341values of \var{expression}. The final \keyword{if} clause is
342optional; if present, \var{expression} is only evaluated and added to
343the result if \var{condition} is true.
344
345To make the semantics very clear, a list comprehension is equivalent
346to the following Python code:
347
348\begin{verbatim}
349for expr1 in sequence1:
350 for expr2 in sequence2:
351 ...
352 for exprN in sequenceN:
353 if (condition):
354 # Append the value of
355 # the expression to the
356 # resulting list.
357\end{verbatim}
358
359This means that when there are \keyword{for}...\keyword{in} clauses,
360the resulting list will be equal to the product of the lengths of all
361the sequences. If you have two lists of length 3, the output list is
3629 elements long:
363
364\begin{verbatim}
365seq1 = 'abc'
366seq2 = (1,2,3)
367>>> [ (x,y) for x in seq1 for y in seq2]
368[('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1),
369('c', 2), ('c', 3)]
370\end{verbatim}
371
372To avoid introducing an ambiguity into Python's grammar, if
373\var{expression} is creating a tuple, it must be surrounded with
374parentheses. The first list comprehension below is a syntax error,
375while the second one is correct:
376
377\begin{verbatim}
378# Syntax error
379[ x,y for x in seq1 for y in seq2]
380# Correct
381[ (x,y) for x in seq1 for y in seq2]
382\end{verbatim}
383
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000384The idea of list comprehensions originally comes from the functional
385programming language Haskell (\url{http://www.haskell.org}). Greg
386Ewing argued most effectively for adding them to Python and wrote the
387initial list comprehension patch, which was then discussed for a
388seemingly endless time on the python-dev mailing list and kept
389up-to-date by Skip Montanaro.
390
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000391% ======================================================================
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000392\section{Augmented Assignment}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000393
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000394Augmented assignment operators, another long-requested feature, have
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000395been added to Python 2.0. Augmented assignment operators include
396\code{+=}, \code{-=}, \code{*=}, and so forth. For example, the
397statement \code{a += 2} increments the value of the variable
398\code{a} by 2, equivalent to the slightly lengthier \code{a = a + 2}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000399
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000400The full list of supported assignment operators is \code{+=},
401\code{-=}, \code{*=}, \code{/=}, \code{\%=}, \code{**=}, \code{\&=},
Andrew M. Kuchling3cdb5762000-08-30 12:55:42 +0000402\code{|=}, \verb|^=|, \code{>>=}, and \code{<<=}. Python classes can
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000403override the augmented assignment operators by defining methods named
404\method{__iadd__}, \method{__isub__}, etc. For example, the following
405\class{Number} class stores a number and supports using += to create a
406new instance with an incremented value.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000407
408\begin{verbatim}
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000409class Number:
410 def __init__(self, value):
411 self.value = value
412 def __iadd__(self, increment):
413 return Number( self.value + increment)
414
415n = Number(5)
416n += 3
417print n.value
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000418\end{verbatim}
419
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000420The \method{__iadd__} special method is called with the value of the
421increment, and should return a new instance with an appropriately
422modified value; this return value is bound as the new value of the
423variable on the left-hand side.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000424
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000425Augmented assignment operators were first introduced in the C
426programming language, and most C-derived languages, such as
427\program{awk}, C++, Java, Perl, and PHP also support them. The augmented
428assignment patch was implemented by Thomas Wouters.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000429
430% ======================================================================
431\section{String Methods}
432
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000433Until now string-manipulation functionality was in the \module{string}
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000434module, which was usually a front-end for the \module{strop}
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000435module written in C. The addition of Unicode posed a difficulty for
436the \module{strop} module, because the functions would all need to be
437rewritten in order to accept either 8-bit or Unicode strings. For
438functions such as \function{string.replace()}, which takes 3 string
439arguments, that means eight possible permutations, and correspondingly
440complicated code.
441
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000442Instead, Python 2.0 pushes the problem onto the string type, making
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000443string manipulation functionality available through methods on both
4448-bit strings and Unicode strings.
445
446\begin{verbatim}
447>>> 'andrew'.capitalize()
448'Andrew'
449>>> 'hostname'.replace('os', 'linux')
450'hlinuxtname'
451>>> 'moshe'.find('sh')
4522
453\end{verbatim}
454
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000455One thing that hasn't changed, a noteworthy April Fools' joke
456notwithstanding, is that Python strings are immutable. Thus, the
457string methods return new strings, and do not modify the string on
458which they operate.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000459
460The old \module{string} module is still around for backwards
461compatibility, but it mostly acts as a front-end to the new string
462methods.
463
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000464Two methods which have no parallel in pre-2.0 versions, although they
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000465did exist in JPython for quite some time, are \method{startswith()}
466and \method{endswith}. \code{s.startswith(t)} is equivalent to \code{s[:len(t)]
467== t}, while \code{s.endswith(t)} is equivalent to \code{s[-len(t):] == t}.
468
Andrew M. Kuchlingfed4f1e2000-07-01 12:33:43 +0000469One other method which deserves special mention is \method{join}. The
470\method{join} method of a string receives one parameter, a sequence of
471strings, and is equivalent to the \function{string.join} function from
472the old \module{string} module, with the arguments reversed. In other
473words, \code{s.join(seq)} is equivalent to the old
474\code{string.join(seq, s)}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000475
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000476% ======================================================================
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000477\section{Optional Collection of Cycles}
478
479The C implementation of Python uses reference counting to implement
480garbage collection. Every Python object maintains a count of the
481number of references pointing to itself, and adjusts the count as
482references are created or destroyed. Once the reference count reaches
483zero, the object is no longer accessible, since you need to have a
484reference to an object to access it, and if the count is zero, no
485references exist any longer.
486
487Reference counting has some pleasant properties: it's easy to
488understand and implement, and the resulting implementation is
489portable, fairly fast, and reacts well with other libraries that
490implement their own memory handling schemes. The major problem with
491reference counting is that it sometimes doesn't realise that objects
492are no longer accessible, resulting in a memory leak. This happens
493when there are cycles of references.
494
495Consider the simplest possible cycle,
496a class instance which has a reference to itself:
497
498\begin{verbatim}
499instance = SomeClass()
500instance.myself = instance
501\end{verbatim}
502
503After the above two lines of code have been executed, the reference
504count of \code{instance} is 2; one reference is from the variable
505named \samp{'instance'}, and the other is from the \samp{myself}
506attribute of the instance.
507
508If the next line of code is \code{del instance}, what happens? The
509reference count of \code{instance} is decreased by 1, so it has a
510reference count of 1; the reference in the \samp{myself} attribute
511still exists. Yet the instance is no longer accessible through Python
512code, and it could be deleted. Several objects can participate in a
513cycle if they have references to each other, causing all of the
514objects to be leaked.
515
516An experimental step has been made toward fixing this problem. When
517compiling Python, the \verb|--with-cycle-gc| option can be specified.
518This causes a cycle detection algorithm to be periodically executed,
519which looks for inaccessible cycles and deletes the objects involved.
520A new \module{gc} module provides functions to perform a garbage
521collection, obtain debugging statistics, and tuning the collector's parameters.
522
523Why isn't cycle detection enabled by default? Running the cycle detection
524algorithm takes some time, and some tuning will be required to
525minimize the overhead cost. It's not yet obvious how much performance
526is lost, because benchmarking this is tricky and depends crucially
527on how often the program creates and destroys objects.
528
529Several people tackled this problem and contributed to a solution. An
530early implementation of the cycle detection approach was written by
531Toby Kelsey. The current algorithm was suggested by Eric Tiedemann
532during a visit to CNRI, and Guido van Rossum and Neil Schemenauer
533wrote two different implementations, which were later integrated by
534Neil. Lots of other people offered suggestions along the way; the
535March 2000 archives of the python-dev mailing list contain most of the
536relevant discussion, especially in the threads titled ``Reference
537cycle collection for Python'' and ``Finalization again''.
538
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000539% ======================================================================
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000540\section{Other Core Changes}
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000541
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000542Various minor changes have been made to Python's syntax and built-in
543functions. None of the changes are very far-reaching, but they're
544handy conveniences.
545
546\subsection{Minor Language Changes}
547
548A new syntax makes it more convenient to call a given function
549with a tuple of arguments and/or a dictionary of keyword arguments.
550In Python 1.5 and earlier, you'd use the \function{apply()}
551built-in function: \code{apply(f, \var{args}, \var{kw})} calls the
552function \function{f()} with the argument tuple \var{args} and the
553keyword arguments in the dictionary \var{kw}. \function{apply()}
554is the same in 2.0, but thanks to a patch from
555Greg Ewing, \code{f(*\var{args}, **\var{kw})} as a shorter
556and clearer way to achieve the same effect. This syntax is
557symmetrical with the syntax for defining functions:
558
559\begin{verbatim}
560def f(*args, **kw):
561 # args is a tuple of positional args,
562 # kw is a dictionary of keyword args
563 ...
564\end{verbatim}
565
566The \keyword{print} statement can now have its output directed to a
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000567file-like object by following the \keyword{print} with
568\verb|>> file|, similar to the redirection operator in Unix shells.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000569Previously you'd either have to use the \method{write()} method of the
570file-like object, which lacks the convenience and simplicity of
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000571\keyword{print}, or you could assign a new value to
572\code{sys.stdout} and then restore the old value. For sending output to standard error,
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000573it's much easier to write this:
574
575\begin{verbatim}
576print >> sys.stderr, "Warning: action field not supplied"
577\end{verbatim}
578
579Modules can now be renamed on importing them, using the syntax
580\code{import \var{module} as \var{name}} or \code{from \var{module}
581import \var{name} as \var{othername}}. The patch was submitted by
582Thomas Wouters.
583
584A new format style is available when using the \code{\%} operator;
585'\%r' will insert the \function{repr()} of its argument. This was
586also added from symmetry considerations, this time for symmetry with
587the existing '\%s' format style, which inserts the \function{str()} of
588its argument. For example, \code{'\%r \%s' \% ('abc', 'abc')} returns a
589string containing \verb|'abc' abc|.
590
591Previously there was no way to implement a class that overrode
592Python's built-in \keyword{in} operator and implemented a custom
593version. \code{\var{obj} in \var{seq}} returns true if \var{obj} is
594present in the sequence \var{seq}; Python computes this by simply
595trying every index of the sequence until either \var{obj} is found or
596an \exception{IndexError} is encountered. Moshe Zadka contributed a
597patch which adds a \method{__contains__} magic method for providing a
598custom implementation for \keyword{in}. Additionally, new built-in
599objects written in C can define what \keyword{in} means for them via a
600new slot in the sequence protocol.
601
602Earlier versions of Python used a recursive algorithm for deleting
603objects. Deeply nested data structures could cause the interpreter to
604fill up the C stack and crash; Christian Tismer rewrote the deletion
605logic to fix this problem. On a related note, comparing recursive
606objects recursed infinitely and crashed; Jeremy Hylton rewrote the
607code to no longer crash, producing a useful result instead. For
608example, after this code:
609
610\begin{verbatim}
611a = []
612b = []
613a.append(a)
614b.append(b)
615\end{verbatim}
616
617The comparison \code{a==b} returns true, because the two recursive
618data structures are isomorphic. \footnote{See the thread ``trashcan
619and PR\#7'' in the April 2000 archives of the python-dev mailing list
620for the discussion leading up to this implementation, and some useful
621relevant links.
622%http://www.python.org/pipermail/python-dev/2000-April/004834.html
623}
624
625Work has been done on porting Python to 64-bit Windows on the Itanium
626processor, mostly by Trent Mick of ActiveState. (Confusingly,
627\code{sys.platform} is still \code{'win32'} on Win64 because it seems
628that for ease of porting, MS Visual C++ treats code as 32 bit on Itanium.)
629PythonWin also supports Windows CE; see the Python CE page at
630\url{http://starship.python.net/crew/mhammond/ce/} for more
631information.
632
633An attempt has been made to alleviate one of Python's warts, the
634often-confusing \exception{NameError} exception when code refers to a
635local variable before the variable has been assigned a value. For
636example, the following code raises an exception on the \keyword{print}
637statement in both 1.5.2 and 2.0; in 1.5.2 a \exception{NameError}
638exception is raised, while 2.0 raises a new
639\exception{UnboundLocalError} exception.
640\exception{UnboundLocalError} is a subclass of \exception{NameError},
641so any existing code that expects \exception{NameError} to be raised
642should still work.
643
644\begin{verbatim}
645def f():
646 print "i=",i
647 i = i + 1
648f()
649\end{verbatim}
650
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000651Two new exceptions, \exception{TabError} and
652\exception{IndentationError}, have been introduced. They're both
653subclasses of \exception{SyntaxError}, and are raised when Python code
654is found to be improperly indented.
655
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000656\subsection{Changes to Built-in Functions}
657
658A new built-in, \function{zip(\var{seq1}, \var{seq2}, ...)}, has been
659added. \function{zip()} returns a list of tuples where each tuple
660contains the i-th element from each of the argument sequences. The
661difference between \function{zip()} and \code{map(None, \var{seq1},
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000662\var{seq2})} is that \function{map()} pads the sequences with
663\code{None} if the sequences aren't all of the same length, while
664\function{zip()} truncates the returned list to the length of the
665shortest argument sequence.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000666
667The \function{int()} and \function{long()} functions now accept an
668optional ``base'' parameter when the first argument is a string.
669\code{int('123', 10)} returns 123, while \code{int('123', 16)} returns
670291. \code{int(123, 16)} raises a \exception{TypeError} exception
671with the message ``can't convert non-string with explicit base''.
672
673A new variable holding more detailed version information has been
674added to the \module{sys} module. \code{sys.version_info} is a tuple
675\code{(\var{major}, \var{minor}, \var{micro}, \var{level},
676\var{serial})} For example, in a hypothetical 2.0.1beta1,
677\code{sys.version_info} would be \code{(2, 0, 1, 'beta', 1)}.
678\var{level} is a string such as \code{"alpha"}, \code{"beta"}, or
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000679\code{"final"} for a final release.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000680
681Dictionaries have an odd new method, \method{setdefault(\var{key},
682\var{default})}, which behaves similarly to the existing
683\method{get()} method. However, if the key is missing,
684\method{setdefault()} both returns the value of \var{default} as
685\method{get()} would do, and also inserts it into the dictionary as
686the value for \var{key}. Thus, the following lines of code:
687
688\begin{verbatim}
689if dict.has_key( key ): return dict[key]
690else:
691 dict[key] = []
692 return dict[key]
693\end{verbatim}
694
695can be reduced to a single \code{return dict.setdefault(key, [])} statement.
696
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000697The interpreter sets a maximum recursion depth in order to catch
698runaway recursion before filling the C stack and causing a core dump
699or GPF.. Previously this limit was fixed when you compiled Python,
700but in 2.0 the maximum recursion depth can be read and modified using
701\function{sys.getrecursionlimit} and \function{sys.setrecursionlimit}.
702The default value is 1000, and a rough maximum value for a given
703platform can be found by running a new script,
704\file{Misc/find_recursionlimit.py}.
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000705
706% ======================================================================
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000707\section{Porting to 2.0}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000708
709New Python releases try hard to be compatible with previous releases,
710and the record has been pretty good. However, some changes are
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000711considered useful enough, usually because they fix initial design decisions that
712turned out to be actively mistaken, that breaking backward compatibility
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000713can't always be avoided. This section lists the changes in Python 2.0
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000714that may cause old Python code to break.
715
716The change which will probably break the most code is tightening up
717the arguments accepted by some methods. Some methods would take
718multiple arguments and treat them as a tuple, particularly various
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000719list methods such as \method{.append()} and \method{.insert()}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000720In earlier versions of Python, if \code{L} is a list, \code{L.append(
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00007211,2 )} appends the tuple \code{(1,2)} to the list. In Python 2.0 this
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000722causes a \exception{TypeError} exception to be raised, with the
723message: 'append requires exactly 1 argument; 2 given'. The fix is to
724simply add an extra set of parentheses to pass both values as a tuple:
725\code{L.append( (1,2) )}.
726
727The earlier versions of these methods were more forgiving because they
728used an old function in Python's C interface to parse their arguments;
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00007292.0 modernizes them to use \function{PyArg_ParseTuple}, the current
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000730argument parsing function, which provides more helpful error messages
731and treats multi-argument calls as errors. If you absolutely must use
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00007322.0 but can't fix your code, you can edit \file{Objects/listobject.c}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000733and define the preprocessor symbol \code{NO_STRICT_LIST_APPEND} to
734preserve the old behaviour; this isn't recommended.
735
736Some of the functions in the \module{socket} module are still
737forgiving in this way. For example, \function{socket.connect(
738('hostname', 25) )} is the correct form, passing a tuple representing
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000739an IP address, but \function{socket.connect( 'hostname', 25 )} also
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000740works. \function{socket.connect_ex()} and \function{socket.bind()} are
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000741similarly easy-going. 2.0alpha1 tightened these functions up, but
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000742because the documentation actually used the erroneous multiple
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000743argument form, many people wrote code which would break with the
744stricter checking. GvR backed out the changes in the face of public
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000745reaction, so for the \module{socket} module, the documentation was
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000746fixed and the multiple argument form is simply marked as deprecated;
747it \emph{will} be tightened up again in a future Python version.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000748
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000749The \code{\e x} escape in string literals now takes exactly 2 hex
750digits. Previously it would consume all the hex digits following the
751'x' and take the lowest 8 bits of the result, so \code{\e x123456} was
752equivalent to \code{\e x56}.
753
754The \exception{AttributeError} exception has a more friendly error message,
755whose text will be something like \code{'Spam' instance has no attribute 'eggs'}.
756Previously the error message was just the missing attribute name \code{eggs}, and
757code written to take advantage of this fact will break in 2.0.
758
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000759Some work has been done to make integers and long integers a bit more
760interchangeable. In 1.5.2, large-file support was added for Solaris,
761to allow reading files larger than 2Gb; this made the \method{tell()}
762method of file objects return a long integer instead of a regular
763integer. Some code would subtract two file offsets and attempt to use
764the result to multiply a sequence or slice a string, but this raised a
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000765\exception{TypeError}. In 2.0, long integers can be used to multiply
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000766or slice a sequence, and it'll behave as you'd intuitively expect it
767to; \code{3L * 'abc'} produces 'abcabcabc', and \code{
768(0,1,2,3)[2L:4L]} produces (2,3). Long integers can also be used in
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +0000769various contexts where previously only integers were accepted, such
770as in the \method{seek()} method of file objects, and in the formats
771supported by the \verb|%| operator (\verb|%d|, \verb|%i|, \verb|%x|,
772etc.). For example, \code{"\%d" \% 2L**64} will produce the string
773\samp{18446744073709551616}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000774
775The subtlest long integer change of all is that the \function{str()}
776of a long integer no longer has a trailing 'L' character, though
777\function{repr()} still includes it. The 'L' annoyed many people who
778wanted to print long integers that looked just like regular integers,
779since they had to go out of their way to chop off the character. This
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000780is no longer a problem in 2.0, but code which does \code{str(longval)[:-1]} and assumes the 'L' is there, will now lose
781the final digit.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000782
783Taking the \function{repr()} of a float now uses a different
784formatting precision than \function{str()}. \function{repr()} uses
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000785\code{\%.17g} format string for C's \function{sprintf()}, while
786\function{str()} uses \code{\%.12g} as before. The effect is that
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000787\function{repr()} may occasionally show more decimal places than
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000788\function{str()}, for certain numbers.
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000789For example, the number 8.1 can't be represented exactly in binary, so
790\code{repr(8.1)} is \code{'8.0999999999999996'}, while str(8.1) is
791\code{'8.1'}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000792
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000793The \code{-X} command-line option, which turned all standard
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000794exceptions into strings instead of classes, has been removed; the
795standard exceptions will now always be classes. The
796\module{exceptions} module containing the standard exceptions was
797translated from Python to a built-in C module, written by Barry Warsaw
798and Fredrik Lundh.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000799
Andrew M. Kuchling791b3662000-07-01 15:04:18 +0000800% Commented out for now -- I don't think anyone will care.
801%The pattern and match objects provided by SRE are C types, not Python
802%class instances as in 1.5. This means you can no longer inherit from
803%\class{RegexObject} or \class{MatchObject}, but that shouldn't be much
804%of a problem since no one should have been doing that in the first
805%place.
806
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000807% ======================================================================
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000808\section{Extending/Embedding Changes}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000809
810Some of the changes are under the covers, and will only be apparent to
Andrew M. Kuchling8357c4c2000-07-01 00:14:43 +0000811people writing C extension modules or embedding a Python interpreter
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000812in a larger application. If you aren't dealing with Python's C API,
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000813you can safely skip this section.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000814
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000815The version number of the Python C API was incremented, so C
816extensions compiled for 1.5.2 must be recompiled in order to work with
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00008172.0. On Windows, attempting to import a third party extension built
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000818for Python 1.5.x usually results in an immediate crash; there's not
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000819much we can do about this. (Here's Mark Hammond's explanation of the
820reasons for the crash. The 1.5 module is linked against
821\file{Python15.dll}. When \file{Python.exe} , linked against
822\file{Python16.dll}, starts up, it initializes the Python data
823structures in \file{Python16.dll}. When Python then imports the
824module \file{foo.pyd} linked against \file{Python15.dll}, it
825immediately tries to call the functions in that DLL. As Python has
826not been initialized in that DLL, the program immediately crashes.)
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000827
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000828Users of Jim Fulton's ExtensionClass module will be pleased to find
829out that hooks have been added so that ExtensionClasses are now
830supported by \function{isinstance()} and \function{issubclass()}.
831This means you no longer have to remember to write code such as
832\code{if type(obj) == myExtensionClass}, but can use the more natural
833\code{if isinstance(obj, myExtensionClass)}.
834
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000835The \file{Python/importdl.c} file, which was a mass of \#ifdefs to
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000836support dynamic loading on many different platforms, was cleaned up
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000837and reorganised by Greg Stein. \file{importdl.c} is now quite small,
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000838and platform-specific code has been moved into a bunch of
Andrew M. Kuchlingb9fb1f22000-08-04 12:40:35 +0000839\file{Python/dynload_*.c} files. Another cleanup: there were also a
840number of \file{my*.h} files in the Include/ directory that held
841various portability hacks; they've been merged into a single file,
842\file{Include/pyport.h}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000843
844Vladimir Marangozov's long-awaited malloc restructuring was completed,
845to make it easy to have the Python interpreter use a custom allocator
846instead of C's standard \function{malloc()}. For documentation, read
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000847the comments in \file{Include/pymem.h} and
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000848\file{Include/objimpl.h}. For the lengthy discussions during which
849the interface was hammered out, see the Web archives of the 'patches'
850and 'python-dev' lists at python.org.
851
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000852Recent versions of the GUSI development environment for MacOS support
853POSIX threads. Therefore, Python's POSIX threading support now works
854on the Macintosh. Threading support using the user-space GNU \texttt{pth}
855library was also contributed.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000856
857Threading support on Windows was enhanced, too. Windows supports
858thread locks that use kernel objects only in case of contention; in
859the common case when there's no contention, they use simpler functions
860which are an order of magnitude faster. A threaded version of Python
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00008611.5.2 on NT is twice as slow as an unthreaded version; with the 2.0
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000862changes, the difference is only 10\%. These improvements were
863contributed by Yakov Markovitch.
864
Andrew M. Kuchling08d87c62000-07-09 15:05:15 +0000865Python 2.0's source now uses only ANSI C prototypes, so compiling Python now
866requires an ANSI C compiler, and can no longer be done using a compiler that
867only supports K\&R C.
868
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000869Previously the Python virtual machine used 16-bit numbers in its
870bytecode, limiting the size of source files. In particular, this
871affected the maximum size of literal lists and dictionaries in Python
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +0000872source; occasionally people who are generating Python code would run
873into this limit. A patch by Charles G. Waldman raises the limit from
874\verb|2^16| to \verb|2^{32}|.
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000875
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +0000876Three new convenience functions intended for adding constants to a
877module's dictionary at module initialization time were added:
878\function{PyModule_AddObject()}, \function{PyModule_AddIntConstant()},
879and \function{PyModule_AddStringConstant()}. Each of these functions
880takes a module object, a null-terminated C string containing the name
881to be added, and a third argument for the value to be assigned to the
882name. This third argument is, respectively, a Python object, a C
883long, or a C string.
884
885A wrapper API was added for Unix-style signal handlers.
886\function{PyOS_getsig()} gets a signal handler and
887\function{PyOS_setsig()} will set a new handler.
Andrew M. Kuchling4d46d382000-09-06 17:58:49 +0000888
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000889% ======================================================================
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000890\section{Distutils: Making Modules Easy to Install}
891
892Before Python 2.0, installing modules was a tedious affair -- there
893was no way to figure out automatically where Python is installed, or
894what compiler options to use for extension modules. Software authors
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000895had to go through an arduous ritual of editing Makefiles and
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000896configuration files, which only really work on Unix and leave Windows
Andrew M. Kuchling3ad4e742000-09-27 01:33:41 +0000897and MacOS unsupported. Python users faced wildly differing
898installation instructions which varied between different extension
899packages, which made adminstering a Python installation something of a
900chore.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000901
902The SIG for distribution utilities, shepherded by Greg Ward, has
903created the Distutils, a system to make package installation much
904easier. They form the \module{distutils} package, a new part of
905Python's standard library. In the best case, installing a Python
906module from source will require the same steps: first you simply mean
907unpack the tarball or zip archive, and the run ``\code{python setup.py
908install}''. The platform will be automatically detected, the compiler
909will be recognized, C extension modules will be compiled, and the
910distribution installed into the proper directory. Optional
911command-line arguments provide more control over the installation
912process, the distutils package offers many places to override defaults
913-- separating the build from the install, building or installing in
914non-default directories, and more.
915
916In order to use the Distutils, you need to write a \file{setup.py}
917script. For the simple case, when the software contains only .py
918files, a minimal \file{setup.py} can be just a few lines long:
919
920\begin{verbatim}
921from distutils.core import setup
922setup (name = "foo", version = "1.0",
923 py_modules = ["module1", "module2"])
924\end{verbatim}
925
926The \file{setup.py} file isn't much more complicated if the software
927consists of a few packages:
928
929\begin{verbatim}
930from distutils.core import setup
931setup (name = "foo", version = "1.0",
932 packages = ["package", "package.subpackage"])
933\end{verbatim}
934
935A C extension can be the most complicated case; here's an example taken from
936the PyXML package:
937
938
939\begin{verbatim}
940from distutils.core import setup, Extension
941
942expat_extension = Extension('xml.parsers.pyexpat',
943 define_macros = [('XML_NS', None)],
944 include_dirs = [ 'extensions/expat/xmltok',
945 'extensions/expat/xmlparse' ],
946 sources = [ 'extensions/pyexpat.c',
947 'extensions/expat/xmltok/xmltok.c',
948 'extensions/expat/xmltok/xmlrole.c',
949 ]
950 )
951setup (name = "PyXML", version = "0.5.4",
952 ext_modules =[ expat_extension ] )
953
954\end{verbatim}
955
956The Distutils can also take care of creating source and binary
957distributions. The ``sdist'' command, run by ``\code{python setup.py
958sdist}', builds a source distribution such as \file{foo-1.0.tar.gz}.
959Adding new commands isn't difficult, ``bdist_rpm'' and
960``bdist_wininst'' commands have already been contributed to create an
961RPM distribution and a Windows installer for the software,
962respectively. Commands to create other distribution formats such as
963Debian packages and Solaris \file{.pkg} files are in various stages of
964development.
965
966All this is documented in a new manual, \textit{Distributing Python
967Modules}, that joins the basic set of Python documentation.
968
969% ======================================================================
970%\section{New XML Code}
971
972%XXX write this section...
973
974% ======================================================================
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000975\section{Module changes}
976
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000977Lots of improvements and bugfixes were made to Python's extensive
978standard library; some of the affected modules include
979\module{readline}, \module{ConfigParser}, \module{cgi},
980\module{calendar}, \module{posix}, \module{readline}, \module{xmllib},
981\module{aifc}, \module{chunk, wave}, \module{random}, \module{shelve},
982and \module{nntplib}. Consult the CVS logs for the exact
983patch-by-patch details.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000984
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000985Brian Gallew contributed OpenSSL support for the \module{socket}
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000986module. OpenSSL is an implementation of the Secure Socket Layer,
987which encrypts the data being sent over a socket. When compiling
988Python, you can edit \file{Modules/Setup} to include SSL support,
989which adds an additional function to the \module{socket} module:
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000990\function{socket.ssl(\var{socket}, \var{keyfile}, \var{certfile})},
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000991which takes a socket object and returns an SSL socket. The
992\module{httplib} and \module{urllib} modules were also changed to
993support ``https://'' URLs, though no one has implemented FTP or SMTP
994over SSL.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000995
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000996The \module{httplib} module has been rewritten by Greg Stein to
997support HTTP/1.1. Backward compatibility with the 1.5 version of
998\module{httplib} is provided, though using HTTP/1.1 features such as
999pipelining will require rewriting code to use a different set of
1000interfaces.
1001
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00001002The \module{Tkinter} module now supports Tcl/Tk version 8.1, 8.2, or
10038.3, and support for the older 7.x versions has been dropped. The
Andrew M. Kuchling791b3662000-07-01 15:04:18 +00001004Tkinter module now supports displaying Unicode strings in Tk widgets.
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +00001005Also, Fredrik Lundh contributed an optimization which makes operations
1006like \code{create_line} and \code{create_polygon} much faster,
Andrew M. Kuchling791b3662000-07-01 15:04:18 +00001007especially when using lots of coordinates.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001008
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00001009The \module{curses} module has been greatly extended, starting from
1010Oliver Andrich's enhanced version, to provide many additional
1011functions from ncurses and SYSV curses, such as colour, alternative
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +00001012character set support, pads, and mouse support. This means the module
1013is no longer compatible with operating systems that only have BSD
1014curses, but there don't seem to be any currently maintained OSes that
1015fall into this category.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001016
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001017As mentioned in the earlier discussion of 2.0's Unicode support, the
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001018underlying implementation of the regular expressions provided by the
1019\module{re} module has been changed. SRE, a new regular expression
1020engine written by Fredrik Lundh and partially funded by Hewlett
1021Packard, supports matching against both 8-bit strings and Unicode
1022strings.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001023
1024% ======================================================================
1025\section{New modules}
1026
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001027A number of new modules were added. We'll simply list them with brief
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001028descriptions; consult the 2.0 documentation for the details of a
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001029particular module.
1030
1031\begin{itemize}
1032
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +00001033\item{\module{atexit}}:
1034For registering functions to be called before the Python interpreter exits.
1035Code that currently sets
1036\code{sys.exitfunc} directly should be changed to
1037use the \module{atexit} module instead, importing \module{atexit}
1038and calling \function{atexit.register()} with
1039the function to be called on exit.
1040(Contributed by Skip Montanaro.)
1041
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001042\item{\module{codecs}, \module{encodings}, \module{unicodedata}:} Added as part of the new Unicode support.
1043
Andrew M. Kuchlingfed4f1e2000-07-01 12:33:43 +00001044\item{\module{filecmp}:} Supersedes the old \module{cmp}, \module{cmpcache} and
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001045\module{dircmp} modules, which have now become deprecated.
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +00001046(Contributed by Gordon MacMillan and Moshe Zadka.)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001047
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +00001048\item{\module{linuxaudiodev}:} Support for the \file{/dev/audio}
1049device on Linux, a twin to the existing \module{sunaudiodev} module.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001050(Contributed by Peter Bosch.)
1051
1052\item{\module{mmap}:} An interface to memory-mapped files on both
1053Windows and Unix. A file's contents can be mapped directly into
1054memory, at which point it behaves like a mutable string, so its
1055contents can be read and modified. They can even be passed to
1056functions that expect ordinary strings, such as the \module{re}
1057module. (Contributed by Sam Rushing, with some extensions by
1058A.M. Kuchling.)
1059
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +00001060\item{\module{pyexpat}:} An interface to the Expat XML parser.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001061(Contributed by Paul Prescod.)
1062
1063\item{\module{robotparser}:} Parse a \file{robots.txt} file, which is
1064used for writing Web spiders that politely avoid certain areas of a
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +00001065Web site. The parser accepts the contents of a \file{robots.txt} file,
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001066builds a set of rules from it, and can then answer questions about
1067the fetchability of a given URL. (Contributed by Skip Montanaro.)
1068
1069\item{\module{tabnanny}:} A module/script to
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +00001070check Python source code for ambiguous indentation.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001071(Contributed by Tim Peters.)
1072
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +00001073\item{\module{UserString}:} A base class useful for deriving objects that behave like strings.
1074
Andrew M. Kuchling08d87c62000-07-09 15:05:15 +00001075\item{\module{webbrowser}:} A module that provides a platform independent
1076way to launch a web browser on a specific URL. For each platform, various
1077browsers are tried in a specific order. The user can alter which browser
1078is launched by setting the \var{BROWSER} environment variable.
1079(Originally inspired by Eric S. Raymond's patch to \module{urllib}
1080which added similar functionality, but
1081the final module comes from code originally
1082implemented by Fred Drake as \file{Tools/idle/BrowserControl.py},
1083and adapted for the standard library by Fred.)
1084
Andrew M. Kuchlingd500e442000-09-06 12:30:25 +00001085\item{\module{_winreg}:} An interface to the
Andrew M. Kuchlingfed4f1e2000-07-01 12:33:43 +00001086Windows registry. \module{_winreg} is an adaptation of functions that
1087have been part of PythonWin since 1995, but has now been added to the core
Andrew M. Kuchlingd500e442000-09-06 12:30:25 +00001088distribution, and enhanced to support Unicode.
1089\module{_winreg} was written by Bill Tutt and Mark Hammond.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001090
1091\item{\module{zipfile}:} A module for reading and writing ZIP-format
1092archives. These are archives produced by \program{PKZIP} on
1093DOS/Windows or \program{zip} on Unix, not to be confused with
1094\program{gzip}-format files (which are supported by the \module{gzip}
1095module)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001096(Contributed by James C. Ahlstrom.)
1097
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +00001098\item{\module{imputil}:} A module that provides a simpler way for
1099writing customised import hooks, in comparison to the existing
1100\module{ihooks} module. (Implemented by Greg Stein, with much
1101discussion on python-dev along the way.)
1102
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001103\end{itemize}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001104
1105% ======================================================================
1106\section{IDLE Improvements}
1107
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +00001108IDLE is the official Python cross-platform IDE, written using Tkinter.
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001109Python 2.0 includes IDLE 0.6, which adds a number of new features and
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +00001110improvements. A partial list:
1111
1112\begin{itemize}
1113\item UI improvements and optimizations,
1114especially in the area of syntax highlighting and auto-indentation.
1115
1116\item The class browser now shows more information, such as the top
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001117level functions in a module.
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +00001118
1119\item Tab width is now a user settable option. When opening an existing Python
1120file, IDLE automatically detects the indentation conventions, and adapts.
1121
1122\item There is now support for calling browsers on various platforms,
1123used to open the Python documentation in a browser.
1124
1125\item IDLE now has a command line, which is largely similar to
1126the vanilla Python interpreter.
1127
1128\item Call tips were added in many places.
1129
1130\item IDLE can now be installed as a package.
1131
1132\item In the editor window, there is now a line/column bar at the bottom.
1133
1134\item Three new keystroke commands: Check module (Alt-F5), Import
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001135module (F5) and Run script (Ctrl-F5).
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +00001136
1137\end{itemize}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001138
1139% ======================================================================
1140\section{Deleted and Deprecated Modules}
1141
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001142A few modules have been dropped because they're obsolete, or because
1143there are now better ways to do the same thing. The \module{stdwin}
1144module is gone; it was for a platform-independent windowing toolkit
1145that's no longer developed.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001146
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +00001147A number of modules have been moved to the
1148\file{lib-old} subdirectory:
1149\module{cmp}, \module{cmpcache}, \module{dircmp}, \module{dump},
1150\module{find}, \module{grep}, \module{packmail},
1151\module{poly}, \module{util}, \module{whatsound}, \module{zmod}.
1152If you have code which relies on a module that's been moved to
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001153\file{lib-old}, you can simply add that directory to \code{sys.path}
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +00001154to get them back, but you're encouraged to update any code that uses
1155these modules.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001156
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00001157\section{Acknowledgements}
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +00001158
Andrew M. Kuchlinga6161ed2000-07-01 00:23:02 +00001159The authors would like to thank the following people for offering
Andrew M. Kuchling118ee962000-09-27 01:01:18 +00001160suggestions on drafts of this article: Mark Hammond, Gregg Hauser,
Andrew M. Kuchlingd44dc3c2000-10-04 12:40:44 +00001161Fredrik Lundh, Detlef Lannert, Aahz Maruch, Skip Montanaro, Vladimir
1162Marangozov, Guido van Rossum, Neil Schemenauer, and Russ Schmidt.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001163
1164\end{document}