blob: 1d88f4fdd6000b865d03ef217e80e42b4d9ebb50 [file] [log] [blame]
Fred Drake2db76802004-12-01 05:05:47 +00001\documentclass{howto}
2\usepackage{distutils}
3% $Id$
4
Fred Drake2db76802004-12-01 05:05:47 +00005
6\title{What's New in Python 2.5}
7\release{0.0}
Andrew M. Kuchling92e24952004-12-03 13:54:09 +00008\author{A.M. Kuchling}
9\authoraddress{\email{amk@amk.ca}}
Fred Drake2db76802004-12-01 05:05:47 +000010
11\begin{document}
12\maketitle
13\tableofcontents
14
15This article explains the new features in Python 2.5. No release date
Andrew M. Kuchling5eefdca2006-02-08 11:36:09 +000016for Python 2.5 has been set; it will probably be released in the
17autumn of 2006.
Fred Drake2db76802004-12-01 05:05:47 +000018
Andrew M. Kuchling437567c2006-03-07 20:48:55 +000019% XXX Compare with previous release in 2 - 3 sentences here.
Fred Drake2db76802004-12-01 05:05:47 +000020
21This article doesn't attempt to provide a complete specification of
22the new features, but instead provides a convenient overview. For
23full details, you should refer to the documentation for Python 2.5.
Andrew M. Kuchling437567c2006-03-07 20:48:55 +000024% XXX add hyperlink when the documentation becomes available online.
Fred Drake2db76802004-12-01 05:05:47 +000025If you want to understand the complete implementation and design
26rationale, refer to the PEP for a particular new feature.
27
28
29%======================================================================
Andrew M. Kuchling437567c2006-03-07 20:48:55 +000030\section{PEP 308: Conditional Expressions}
31
32% XXX write this
33
34
35%======================================================================
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +000036\section{PEP 309: Partial Function Application}
Fred Drake2db76802004-12-01 05:05:47 +000037
Andrew M. Kuchlingb1c96fd2005-03-20 21:42:04 +000038The \module{functional} module is intended to contain tools for
Andrew M. Kuchling437567c2006-03-07 20:48:55 +000039functional-style programming. Currently it only contains a
40\class{partial()} function, but new functions will probably be added
41in future versions of Python.
Andrew M. Kuchlingb1c96fd2005-03-20 21:42:04 +000042
Andrew M. Kuchling4b000cd2005-04-09 15:51:44 +000043For programs written in a functional style, it can be useful to
44construct variants of existing functions that have some of the
45parameters filled in. Consider a Python function \code{f(a, b, c)};
46you could create a new function \code{g(b, c)} that was equivalent to
47\code{f(1, b, c)}. This is called ``partial function application'',
48and is provided by the \class{partial} class in the new
49\module{functional} module.
50
51The constructor for \class{partial} takes the arguments
52\code{(\var{function}, \var{arg1}, \var{arg2}, ...
53\var{kwarg1}=\var{value1}, \var{kwarg2}=\var{value2})}. The resulting
54object is callable, so you can just call it to invoke \var{function}
55with the filled-in arguments.
56
57Here's a small but realistic example:
58
59\begin{verbatim}
60import functional
61
62def log (message, subsystem):
63 "Write the contents of 'message' to the specified subsystem."
64 print '%s: %s' % (subsystem, message)
65 ...
66
67server_log = functional.partial(log, subsystem='server')
Andrew M. Kuchling437567c2006-03-07 20:48:55 +000068server_log('Unable to open socket')
Andrew M. Kuchling4b000cd2005-04-09 15:51:44 +000069\end{verbatim}
70
Andrew M. Kuchling6af7fe02005-08-02 17:20:36 +000071Here's another example, from a program that uses PyGTk. Here a
72context-sensitive pop-up menu is being constructed dynamically. The
73callback provided for the menu option is a partially applied version
74of the \method{open_item()} method, where the first argument has been
75provided.
Andrew M. Kuchling4b000cd2005-04-09 15:51:44 +000076
Andrew M. Kuchling6af7fe02005-08-02 17:20:36 +000077\begin{verbatim}
78...
79class Application:
80 def open_item(self, path):
81 ...
82 def init (self):
83 open_func = functional.partial(self.open_item, item_path)
84 popup_menu.append( ("Open", open_func, 1) )
85\end{verbatim}
Andrew M. Kuchlingb1c96fd2005-03-20 21:42:04 +000086
87
88\begin{seealso}
89
90\seepep{309}{Partial Function Application}{PEP proposed and written by
91Peter Harris; implemented by Hye-Shik Chang, with adaptations by
92Raymond Hettinger.}
93
94\end{seealso}
Fred Drake2db76802004-12-01 05:05:47 +000095
96
97%======================================================================
Fred Drakedb7b0022005-03-20 22:19:47 +000098\section{PEP 314: Metadata for Python Software Packages v1.1}
99
Andrew M. Kuchlingd8d732e2005-04-09 23:59:41 +0000100Some simple dependency support was added to Distutils. The
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000101\function{setup()} function now has \code{requires}, \code{provides},
102and \code{obsoletes} keyword parameters. When you build a source
103distribution using the \code{sdist} command, the dependency
104information will be recorded in the \file{PKG-INFO} file.
Andrew M. Kuchlingd8d732e2005-04-09 23:59:41 +0000105
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000106Another new keyword parameter is \code{download_url}, which should be
107set to a URL for the package's source code. This means it's now
108possible to look up an entry in the package index, determine the
109dependencies for a package, and download the required packages.
Andrew M. Kuchlingd8d732e2005-04-09 23:59:41 +0000110
111% XXX put example here
112
113\begin{seealso}
114
115\seepep{314}{Metadata for Python Software Packages v1.1}{PEP proposed
116and written by A.M. Kuchling, Richard Jones, and Fred Drake;
117implemented by Richard Jones and Fred Drake.}
118
119\end{seealso}
Fred Drakedb7b0022005-03-20 22:19:47 +0000120
121
122%======================================================================
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000123\section{PEP 328: Absolute and Relative Imports}
124
125% XXX write this
126
127
128%======================================================================
129\section{PEP 341: Unified try/except/finally}
130
131% XXX write this
132
133
134%======================================================================
Andrew M. Kuchlinga2e21cb2005-08-02 17:13:21 +0000135\section{PEP 342: New Generator Features}
136
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000137As introduced in Python 2.3, generators only produce output; once a
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000138generator's code is invoked to create an iterator, there's no way to
139pass any new information into the function when its execution is
140resumed. Hackish solutions to this include making the generator's
141code look at a global variable and then changing the global variable's
142value, or passing in some mutable object that callers then modify.
143Python 2.5 adds the ability to pass values \emph{into} a generator.
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000144
145To refresh your memory of basic generators, here's a simple example:
146
147\begin{verbatim}
148def counter (maximum):
149 i = 0
150 while i < maximum:
151 yield i
152 i += 1
153\end{verbatim}
154
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000155When you call \code{counter(10)}, the result is an iterator that
156returns the values from 0 up to 9. On encountering the
157\keyword{yield} statement, the iterator returns the provided value and
158suspends the function's execution, preserving the local variables.
159Execution resumes on the following call to the iterator's
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000160\method{next()} method, picking up after the \keyword{yield} statement.
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000161
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000162In Python 2.3, \keyword{yield} was a statement; it didn't return any
163value. In 2.5, \keyword{yield} is now an expression, returning a
164value that can be assigned to a variable or otherwise operated on:
Andrew M. Kuchlinga2e21cb2005-08-02 17:13:21 +0000165
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000166\begin{verbatim}
167val = (yield i)
168\end{verbatim}
169
170I recommend that you always put parentheses around a \keyword{yield}
171expression when you're doing something with the returned value, as in
172the above example. The parentheses aren't always necessary, but it's
173easier to always add them instead of having to remember when they're
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000174needed.\footnote{The exact rules are that a \keyword{yield}-expression must
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000175always be parenthesized except when it occurs at the top-level
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000176expression on the right-hand side of an assignment, meaning you can
177write \code{val = yield i} but have to use parentheses when there's an
178operation, as in \code{val = (yield i) + 12}.}
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000179
180Values are sent into a generator by calling its
181\method{send(\var{value})} method. The generator's code is then
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000182resumed and the \keyword{yield} expression returns the specified
183\var{value}. If the regular \method{next()} method is called, the
184\keyword{yield} returns \constant{None}.
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000185
186Here's the previous example, modified to allow changing the value of
187the internal counter.
188
189\begin{verbatim}
190def counter (maximum):
191 i = 0
192 while i < maximum:
193 val = (yield i)
194 # If value provided, change counter
195 if val is not None:
196 i = val
197 else:
198 i += 1
199\end{verbatim}
200
201And here's an example of changing the counter:
202
203\begin{verbatim}
204>>> it = counter(10)
205>>> print it.next()
2060
207>>> print it.next()
2081
209>>> print it.send(8)
2108
211>>> print it.next()
2129
213>>> print it.next()
214Traceback (most recent call last):
215 File ``t.py'', line 15, in ?
216 print it.next()
217StopIteration
Andrew M. Kuchlingc2033702005-08-29 13:30:12 +0000218\end{verbatim}
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000219
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000220Because \keyword{yield} will often be returning \constant{None}, you
221should always check for this case. Don't just use its value in
222expressions unless you're sure that the \method{send()} method
223will be the only method used resume your generator function.
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000224
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000225In addition to \method{send()}, there are two other new methods on
226generators:
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000227
228\begin{itemize}
229
230 \item \method{throw(\var{type}, \var{value}=None,
231 \var{traceback}=None)} is used to raise an exception inside the
232 generator; the exception is raised by the \keyword{yield} expression
233 where the generator's execution is paused.
234
235 \item \method{close()} raises a new \exception{GeneratorExit}
236 exception inside the generator to terminate the iteration.
237 On receiving this
238 exception, the generator's code must either raise
239 \exception{GeneratorExit} or \exception{StopIteration}; catching the
240 exception and doing anything else is illegal and will trigger
241 a \exception{RuntimeError}. \method{close()} will also be called by
242 Python's garbage collection when the generator is garbage-collected.
243
244 If you need to run cleanup code in case of a \exception{GeneratorExit},
245 I suggest using a \code{try: ... finally:} suite instead of
246 catching \exception{GeneratorExit}.
247
248\end{itemize}
249
250The cumulative effect of these changes is to turn generators from
251one-way producers of information into both producers and consumers.
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000252
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000253Generators also become \emph{coroutines}, a more generalized form of
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000254subroutines. Subroutines are entered at one point and exited at
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000255another point (the top of the function, and a \keyword{return
256statement}), but coroutines can be entered, exited, and resumed at
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000257many different points (the \keyword{yield} statements).
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000258
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000259
Andrew M. Kuchlinga2e21cb2005-08-02 17:13:21 +0000260\begin{seealso}
261
262\seepep{342}{Coroutines via Enhanced Generators}{PEP written by
263Guido van Rossum and Phillip J. Eby;
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000264implemented by Phillip J. Eby. Includes examples of
265some fancier uses of generators as coroutines.}
266
267\seeurl{http://en.wikipedia.org/wiki/Coroutine}{The Wikipedia entry for
268coroutines.}
269
Neal Norwitz09179882006-03-04 23:31:45 +0000270\seeurl{http://www.sidhe.org/\~{}dan/blog/archives/000178.html}{An
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000271explanation of coroutines from a Perl point of view, written by Dan
272Sugalski.}
Andrew M. Kuchlinga2e21cb2005-08-02 17:13:21 +0000273
274\end{seealso}
275
276
277%======================================================================
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000278\section{PEP 343: The 'with' statement}
279
280% XXX write this
281
282
283%======================================================================
Andrew M. Kuchling8f4d2552006-03-08 01:50:20 +0000284\section{PEP 352: Exceptions as New-Style Classes}
285
286% XXX write this
287
288
289%======================================================================
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000290\section{PEP 357: The '__index__' method}
291
292% XXX write this
293
294
295%======================================================================
Fred Drake2db76802004-12-01 05:05:47 +0000296\section{Other Language Changes}
297
298Here are all of the changes that Python 2.5 makes to the core Python
299language.
300
301\begin{itemize}
Andrew M. Kuchling1cae3f52004-12-03 14:57:21 +0000302
303\item The \function{min()} and \function{max()} built-in functions
304gained a \code{key} keyword argument analogous to the \code{key}
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000305argument for \method{sort()}. This argument supplies a function
Andrew M. Kuchling1cae3f52004-12-03 14:57:21 +0000306that takes a single argument and is called for every value in the list;
307\function{min()}/\function{max()} will return the element with the
308smallest/largest return value from this function.
309For example, to find the longest string in a list, you can do:
310
311\begin{verbatim}
312L = ['medium', 'longest', 'short']
313# Prints 'longest'
314print max(L, key=len)
315# Prints 'short', because lexicographically 'short' has the largest value
316print max(L)
317\end{verbatim}
318
319(Contributed by Steven Bethard and Raymond Hettinger.)
Fred Drake2db76802004-12-01 05:05:47 +0000320
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000321\item Two new built-in functions, \function{any()} and
322\function{all()}, evaluate whether an iterator contains any true or
323false values. \function{any()} returns \constant{True} if any value
324returned by the iterator is true; otherwise it will return
325\constant{False}. \function{all()} returns \constant{True} only if
326all of the values returned by the iterator evaluate as being true.
327
328% XXX who added?
329
330
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000331\item The list of base classes in a class definition can now be empty.
332As an example, this is now legal:
333
334\begin{verbatim}
335class C():
336 pass
337\end{verbatim}
338(Implemented by Brett Cannon.)
339
Fred Drake2db76802004-12-01 05:05:47 +0000340\end{itemize}
341
342
343%======================================================================
344\subsection{Optimizations}
345
346\begin{itemize}
347
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000348\item When they were introduced
349in Python 2.4, the built-in \class{set} and \class{frozenset} types
350were built on top of Python's dictionary type.
351In 2.5 the internal data structure has been customized for implementing sets,
352and as a result sets will use a third less memory and are somewhat faster.
353(Implemented by Raymond Hettinger.)
Fred Drake2db76802004-12-01 05:05:47 +0000354
355\end{itemize}
356
357The net result of the 2.5 optimizations is that Python 2.5 runs the
Andrew M. Kuchling92e24952004-12-03 13:54:09 +0000358pystone benchmark around XX\% faster than Python 2.4.
Fred Drake2db76802004-12-01 05:05:47 +0000359
360
361%======================================================================
362\section{New, Improved, and Deprecated Modules}
363
364As usual, Python's standard library received a number of enhancements and
365bug fixes. Here's a partial list of the most notable changes, sorted
366alphabetically by module name. Consult the
367\file{Misc/NEWS} file in the source tree for a more
368complete list of changes, or look through the CVS logs for all the
369details.
370
371\begin{itemize}
372
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000373% collections.deque now has .remove()
374
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000375% the cPickle module no longer accepts the deprecated None option in the
376% args tuple returned by __reduce__().
377
378% csv module improvements
379
380% datetime.datetime() now has a strptime class method which can be used to
381% create datetime object using a string and format.
382
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000383\item A new \module{hashlib} module has been added to replace the
384\module{md5} and \module{sha} modules. \module{hashlib} adds support
385for additional secure hashes (SHA-224, SHA-256, SHA-384, and SHA-512).
386When available, the module uses OpenSSL for fast platform optimized
387implementations of algorithms. The old \module{md5} and \module{sha}
388modules still exist as wrappers around hashlib to preserve backwards
389compatibility. (Contributed by Gregory P. Smith.)
390
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000391\item The \function{nsmallest()} and
392\function{nlargest()} functions in the \module{heapq} module
393now support a \code{key} keyword argument similar to the one
394provided by the \function{min()}/\function{max()} functions
395and the \method{sort()} methods. For example:
396Example:
397
398\begin{verbatim}
399>>> import heapq
400>>> L = ["short", 'medium', 'longest', 'longer still']
401>>> heapq.nsmallest(2, L) # Return two lowest elements, lexicographically
402['longer still', 'longest']
403>>> heapq.nsmallest(2, L, key=len) # Return two shortest elements
404['short', 'medium']
405\end{verbatim}
406
407(Contributed by Raymond Hettinger.)
408
Andrew M. Kuchling511a3a82005-03-20 19:52:18 +0000409\item The \function{itertools.islice()} function now accepts
410\code{None} for the start and step arguments. This makes it more
411compatible with the attributes of slice objects, so that you can now write
412the following:
413
414\begin{verbatim}
415s = slice(5) # Create slice object
416itertools.islice(iterable, s.start, s.stop, s.step)
417\end{verbatim}
418
419(Contributed by Raymond Hettinger.)
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000420
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000421\item The \module{operator} module's \function{itemgetter()}
422and \function{attrgetter()} functions now support multiple fields.
423A call such as \code{operator.attrgetter('a', 'b')}
424will return a function
425that retrieves the \member{a} and \member{b} attributes. Combining
426this new feature with the \method{sort()} method's \code{key} parameter
427lets you easily sort lists using multiple fields.
428
429% XXX who added?
430
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000431
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000432\item The \module{os} module underwent a number of changes. The
433\member{stat_float_times} variable now defaults to true, meaning that
434\function{os.stat()} will now return time values as floats. (This
435doesn't necessarily mean that \function{os.stat()} will return times
436that are precise to fractions of a second; not all systems support
437such precision.)
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000438
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000439Constants named \member{os.SEEK_SET}, \member{os.SEEK_CUR}, and
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000440\member{os.SEEK_END} have been added; these are the parameters to the
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000441\function{os.lseek()} function. Two new constants for locking are
442\member{os.O_SHLOCK} and \member{os.O_EXLOCK}.
443
444On FreeBSD, the \function{os.stat()} function now returns
445times with nanosecond resolution, and the returned object
446now has \member{st_gen} and \member{st_birthtime}.
447The \member{st_flags} member is also available, if the platform supports it.
448% XXX patch 1180695, 1212117
449
Andrew M. Kuchling4678dc82006-01-15 16:11:28 +0000450\item The \module{socket} module now supports \constant{AF_NETLINK}
451sockets on Linux, thanks to a patch from Philippe Biondi.
452Netlink sockets are a Linux-specific mechanism for communications
453between a user-space process and kernel code; an introductory
454article about them is at \url{http://www.linuxjournal.com/article/7356}.
455In Python code, netlink addresses are represented as a tuple of 2 integers,
456\code{(\var{pid}, \var{group_mask})}.
457
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000458\item New module: \module{spwd} provides functions for accessing the
459shadow password database on systems that support it.
460% XXX give example
Fred Drake2db76802004-12-01 05:05:47 +0000461
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000462\item The \class{TarFile} class in the \module{tarfile} module now has
Georg Brandl08c02db2005-07-22 18:39:19 +0000463an \method{extractall()} method that extracts all members from the
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000464archive into the current working directory. It's also possible to set
465a different directory as the extraction target, and to unpack only a
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000466subset of the archive's members.
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000467
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000468A tarfile's compression can be autodetected by
469using the mode \code{'r|*'}.
470% patch 918101
471(Contributed by Lars Gust\"abel.)
Gregory P. Smithf21a5f72005-08-21 18:45:59 +0000472
Fredrik Lundh7e0aef02005-12-12 18:54:55 +0000473\item A new package \module{xml.etree} has been added, which contains
474a subset of the ElementTree XML library. Available modules are
475\module{ElementTree}, \module{ElementPath}, and
476\module{ElementInclude}, from ElementTree 1.2.6. (Contributed by
477Fredrik Lundh.)
478
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000479\item The \module{xmlrpclib} module now supports returning
480 \class{datetime} objects for the XML-RPC date type. Supply
481 \code{use_datetime=True} to the \function{loads()} function
482 or the \class{Unmarshaller} class to enable this feature.
483% XXX patch 1120353
484
Gregory P. Smithf21a5f72005-08-21 18:45:59 +0000485
Fred Drake114b8ca2005-03-21 05:47:11 +0000486\end{itemize}
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000487
Fred Drake2db76802004-12-01 05:05:47 +0000488
489
490%======================================================================
491% whole new modules get described in \subsections here
492
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000493% XXX new distutils features: upload
494
Fredrik Lundh7e0aef02005-12-12 18:54:55 +0000495% XXX should hashlib perhaps be described here instead?
496% XXX should xml.etree perhaps be described here instead?
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000497
498
Fred Drake2db76802004-12-01 05:05:47 +0000499
500% ======================================================================
501\section{Build and C API Changes}
502
503Changes to Python's build process and to the C API include:
504
505\begin{itemize}
506
Andrew M. Kuchlingdb85ed52005-10-23 21:52:59 +0000507\item The design of the bytecode compiler has changed a great deal, no
508longer generating bytecode by traversing the parse tree. Instead
509the parse tree is converted to an abstract syntax tree (or AST), and it is
510the abstract syntax tree that's traversed to produce the bytecode.
511
512No documentation has been written for the AST code yet. To start
513learning about it, read the definition of the various AST nodes in
514\file{Parser/Python.asdl}. A Python script reads this file and
515generates a set of C structure definitions in
516\file{Include/Python-ast.h}. The \cfunction{PyParser_ASTFromString()}
517and \cfunction{PyParser_ASTFromFile()}, defined in
518\file{Include/pythonrun.h}, take Python source as input and return the
519root of an AST representing the contents. This AST can then be turned
520into a code object by \cfunction{PyAST_Compile()}. For more
521information, read the source code, and then ask questions on
522python-dev.
523
524% List of names taken from Jeremy's python-dev post at
525% http://mail.python.org/pipermail/python-dev/2005-October/057500.html
526The AST code was developed under Jeremy Hylton's management, and
527implemented by (in alphabetical order) Brett Cannon, Nick Coghlan,
528Grant Edwards, John Ehresman, Kurt Kaiser, Neal Norwitz, Tim Peters,
529Armin Rigo, and Neil Schemenauer, plus the participants in a number of
530AST sprints at conferences such as PyCon.
531
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000532\item The built-in set types now have an official C API. Call
533\cfunction{PySet_New()} and \cfunction{PyFrozenSet_New()} to create a
534new set, \cfunction{PySet_Add()} and \cfunction{PySet_Discard()} to
535add and remove elements, and \cfunction{PySet_Contains} and
536\cfunction{PySet_Size} to examine the set's state.
537
538\item The \cfunction{PyRange_New()} function was removed. It was
539never documented, never used in the core code, and had dangerously lax
540error checking.
Fred Drake2db76802004-12-01 05:05:47 +0000541
542\end{itemize}
543
544
545%======================================================================
546\subsection{Port-Specific Changes}
547
548Platform-specific changes go here.
549
550
551%======================================================================
552\section{Other Changes and Fixes \label{section-other}}
553
554As usual, there were a bunch of other improvements and bugfixes
555scattered throughout the source tree. A search through the CVS change
556logs finds there were XXX patches applied and YYY bugs fixed between
Andrew M. Kuchling92e24952004-12-03 13:54:09 +0000557Python 2.4 and 2.5. Both figures are likely to be underestimates.
Fred Drake2db76802004-12-01 05:05:47 +0000558
559Some of the more notable changes are:
560
561\begin{itemize}
562
563\item Details go here.
564
565\end{itemize}
566
567
568%======================================================================
569\section{Porting to Python 2.5}
570
571This section lists previously described changes that may require
572changes to your code:
573
574\begin{itemize}
575
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000576\item Some old deprecated modules (\module{statcache}, \module{tzparse},
577 \module{whrandom}) have been moved to \file{Lib/lib-old}.
Andrew M. Kuchling0c35db92005-03-20 20:06:49 +0000578You can get access to these modules again by adding the directory
579to your \code{sys.path}:
580
581\begin{verbatim}
582import os
583from distutils import sysconfig
584
585lib_dir = sysconfig.get_python_lib(standard_lib=True)
586old_dir = os.path.join(lib_dir, 'lib-old')
587sys.path.append(old_dir)
588\end{verbatim}
589
590Doing so is discouraged, however; it's better to update any code that
591still uses these modules.
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000592
593% the pickle module no longer uses the deprecated bin parameter.
Fred Drake2db76802004-12-01 05:05:47 +0000594
595\end{itemize}
596
597
598%======================================================================
599\section{Acknowledgements \label{acks}}
600
601The author would like to thank the following people for offering
602suggestions, corrections and assistance with various drafts of this
603article: .
604
605\end{document}