blob: 46c6b199f5106c1ed2d8446214e614ce283d8d7b [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%======================================================================
284\section{PEP 357: The '__index__' method}
285
286% XXX write this
287
288
289%======================================================================
Fred Drake2db76802004-12-01 05:05:47 +0000290\section{Other Language Changes}
291
292Here are all of the changes that Python 2.5 makes to the core Python
293language.
294
295\begin{itemize}
Andrew M. Kuchling1cae3f52004-12-03 14:57:21 +0000296
297\item The \function{min()} and \function{max()} built-in functions
298gained a \code{key} keyword argument analogous to the \code{key}
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000299argument for \method{sort()}. This argument supplies a function
Andrew M. Kuchling1cae3f52004-12-03 14:57:21 +0000300that takes a single argument and is called for every value in the list;
301\function{min()}/\function{max()} will return the element with the
302smallest/largest return value from this function.
303For example, to find the longest string in a list, you can do:
304
305\begin{verbatim}
306L = ['medium', 'longest', 'short']
307# Prints 'longest'
308print max(L, key=len)
309# Prints 'short', because lexicographically 'short' has the largest value
310print max(L)
311\end{verbatim}
312
313(Contributed by Steven Bethard and Raymond Hettinger.)
Fred Drake2db76802004-12-01 05:05:47 +0000314
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000315\item Two new built-in functions, \function{any()} and
316\function{all()}, evaluate whether an iterator contains any true or
317false values. \function{any()} returns \constant{True} if any value
318returned by the iterator is true; otherwise it will return
319\constant{False}. \function{all()} returns \constant{True} only if
320all of the values returned by the iterator evaluate as being true.
321
322% XXX who added?
323
324
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000325\item The list of base classes in a class definition can now be empty.
326As an example, this is now legal:
327
328\begin{verbatim}
329class C():
330 pass
331\end{verbatim}
332(Implemented by Brett Cannon.)
333
Fred Drake2db76802004-12-01 05:05:47 +0000334\end{itemize}
335
336
337%======================================================================
338\subsection{Optimizations}
339
340\begin{itemize}
341
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000342\item When they were introduced
343in Python 2.4, the built-in \class{set} and \class{frozenset} types
344were built on top of Python's dictionary type.
345In 2.5 the internal data structure has been customized for implementing sets,
346and as a result sets will use a third less memory and are somewhat faster.
347(Implemented by Raymond Hettinger.)
Fred Drake2db76802004-12-01 05:05:47 +0000348
349\end{itemize}
350
351The net result of the 2.5 optimizations is that Python 2.5 runs the
Andrew M. Kuchling92e24952004-12-03 13:54:09 +0000352pystone benchmark around XX\% faster than Python 2.4.
Fred Drake2db76802004-12-01 05:05:47 +0000353
354
355%======================================================================
356\section{New, Improved, and Deprecated Modules}
357
358As usual, Python's standard library received a number of enhancements and
359bug fixes. Here's a partial list of the most notable changes, sorted
360alphabetically by module name. Consult the
361\file{Misc/NEWS} file in the source tree for a more
362complete list of changes, or look through the CVS logs for all the
363details.
364
365\begin{itemize}
366
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000367% collections.deque now has .remove()
368
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000369% the cPickle module no longer accepts the deprecated None option in the
370% args tuple returned by __reduce__().
371
372% csv module improvements
373
374% datetime.datetime() now has a strptime class method which can be used to
375% create datetime object using a string and format.
376
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000377\item A new \module{hashlib} module has been added to replace the
378\module{md5} and \module{sha} modules. \module{hashlib} adds support
379for additional secure hashes (SHA-224, SHA-256, SHA-384, and SHA-512).
380When available, the module uses OpenSSL for fast platform optimized
381implementations of algorithms. The old \module{md5} and \module{sha}
382modules still exist as wrappers around hashlib to preserve backwards
383compatibility. (Contributed by Gregory P. Smith.)
384
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000385\item The \function{nsmallest()} and
386\function{nlargest()} functions in the \module{heapq} module
387now support a \code{key} keyword argument similar to the one
388provided by the \function{min()}/\function{max()} functions
389and the \method{sort()} methods. For example:
390Example:
391
392\begin{verbatim}
393>>> import heapq
394>>> L = ["short", 'medium', 'longest', 'longer still']
395>>> heapq.nsmallest(2, L) # Return two lowest elements, lexicographically
396['longer still', 'longest']
397>>> heapq.nsmallest(2, L, key=len) # Return two shortest elements
398['short', 'medium']
399\end{verbatim}
400
401(Contributed by Raymond Hettinger.)
402
Andrew M. Kuchling511a3a82005-03-20 19:52:18 +0000403\item The \function{itertools.islice()} function now accepts
404\code{None} for the start and step arguments. This makes it more
405compatible with the attributes of slice objects, so that you can now write
406the following:
407
408\begin{verbatim}
409s = slice(5) # Create slice object
410itertools.islice(iterable, s.start, s.stop, s.step)
411\end{verbatim}
412
413(Contributed by Raymond Hettinger.)
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000414
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000415\item The \module{operator} module's \function{itemgetter()}
416and \function{attrgetter()} functions now support multiple fields.
417A call such as \code{operator.attrgetter('a', 'b')}
418will return a function
419that retrieves the \member{a} and \member{b} attributes. Combining
420this new feature with the \method{sort()} method's \code{key} parameter
421lets you easily sort lists using multiple fields.
422
423% XXX who added?
424
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000425
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000426\item The \module{os} module underwent a number of changes. The
427\member{stat_float_times} variable now defaults to true, meaning that
428\function{os.stat()} will now return time values as floats. (This
429doesn't necessarily mean that \function{os.stat()} will return times
430that are precise to fractions of a second; not all systems support
431such precision.)
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000432
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000433Constants named \member{os.SEEK_SET}, \member{os.SEEK_CUR}, and
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000434\member{os.SEEK_END} have been added; these are the parameters to the
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000435\function{os.lseek()} function. Two new constants for locking are
436\member{os.O_SHLOCK} and \member{os.O_EXLOCK}.
437
438On FreeBSD, the \function{os.stat()} function now returns
439times with nanosecond resolution, and the returned object
440now has \member{st_gen} and \member{st_birthtime}.
441The \member{st_flags} member is also available, if the platform supports it.
442% XXX patch 1180695, 1212117
443
Andrew M. Kuchling4678dc82006-01-15 16:11:28 +0000444\item The \module{socket} module now supports \constant{AF_NETLINK}
445sockets on Linux, thanks to a patch from Philippe Biondi.
446Netlink sockets are a Linux-specific mechanism for communications
447between a user-space process and kernel code; an introductory
448article about them is at \url{http://www.linuxjournal.com/article/7356}.
449In Python code, netlink addresses are represented as a tuple of 2 integers,
450\code{(\var{pid}, \var{group_mask})}.
451
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000452\item New module: \module{spwd} provides functions for accessing the
453shadow password database on systems that support it.
454% XXX give example
Fred Drake2db76802004-12-01 05:05:47 +0000455
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000456\item The \class{TarFile} class in the \module{tarfile} module now has
Georg Brandl08c02db2005-07-22 18:39:19 +0000457an \method{extractall()} method that extracts all members from the
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000458archive into the current working directory. It's also possible to set
459a different directory as the extraction target, and to unpack only a
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000460subset of the archive's members.
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000461
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000462A tarfile's compression can be autodetected by
463using the mode \code{'r|*'}.
464% patch 918101
465(Contributed by Lars Gust\"abel.)
Gregory P. Smithf21a5f72005-08-21 18:45:59 +0000466
Fredrik Lundh7e0aef02005-12-12 18:54:55 +0000467\item A new package \module{xml.etree} has been added, which contains
468a subset of the ElementTree XML library. Available modules are
469\module{ElementTree}, \module{ElementPath}, and
470\module{ElementInclude}, from ElementTree 1.2.6. (Contributed by
471Fredrik Lundh.)
472
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000473\item The \module{xmlrpclib} module now supports returning
474 \class{datetime} objects for the XML-RPC date type. Supply
475 \code{use_datetime=True} to the \function{loads()} function
476 or the \class{Unmarshaller} class to enable this feature.
477% XXX patch 1120353
478
Gregory P. Smithf21a5f72005-08-21 18:45:59 +0000479
Fred Drake114b8ca2005-03-21 05:47:11 +0000480\end{itemize}
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000481
Fred Drake2db76802004-12-01 05:05:47 +0000482
483
484%======================================================================
485% whole new modules get described in \subsections here
486
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000487% XXX new distutils features: upload
488
Fredrik Lundh7e0aef02005-12-12 18:54:55 +0000489% XXX should hashlib perhaps be described here instead?
490% XXX should xml.etree perhaps be described here instead?
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000491
492
Fred Drake2db76802004-12-01 05:05:47 +0000493
494% ======================================================================
495\section{Build and C API Changes}
496
497Changes to Python's build process and to the C API include:
498
499\begin{itemize}
500
Andrew M. Kuchlingdb85ed52005-10-23 21:52:59 +0000501\item The design of the bytecode compiler has changed a great deal, no
502longer generating bytecode by traversing the parse tree. Instead
503the parse tree is converted to an abstract syntax tree (or AST), and it is
504the abstract syntax tree that's traversed to produce the bytecode.
505
506No documentation has been written for the AST code yet. To start
507learning about it, read the definition of the various AST nodes in
508\file{Parser/Python.asdl}. A Python script reads this file and
509generates a set of C structure definitions in
510\file{Include/Python-ast.h}. The \cfunction{PyParser_ASTFromString()}
511and \cfunction{PyParser_ASTFromFile()}, defined in
512\file{Include/pythonrun.h}, take Python source as input and return the
513root of an AST representing the contents. This AST can then be turned
514into a code object by \cfunction{PyAST_Compile()}. For more
515information, read the source code, and then ask questions on
516python-dev.
517
518% List of names taken from Jeremy's python-dev post at
519% http://mail.python.org/pipermail/python-dev/2005-October/057500.html
520The AST code was developed under Jeremy Hylton's management, and
521implemented by (in alphabetical order) Brett Cannon, Nick Coghlan,
522Grant Edwards, John Ehresman, Kurt Kaiser, Neal Norwitz, Tim Peters,
523Armin Rigo, and Neil Schemenauer, plus the participants in a number of
524AST sprints at conferences such as PyCon.
525
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000526\item The built-in set types now have an official C API. Call
527\cfunction{PySet_New()} and \cfunction{PyFrozenSet_New()} to create a
528new set, \cfunction{PySet_Add()} and \cfunction{PySet_Discard()} to
529add and remove elements, and \cfunction{PySet_Contains} and
530\cfunction{PySet_Size} to examine the set's state.
531
532\item The \cfunction{PyRange_New()} function was removed. It was
533never documented, never used in the core code, and had dangerously lax
534error checking.
Fred Drake2db76802004-12-01 05:05:47 +0000535
536\end{itemize}
537
538
539%======================================================================
540\subsection{Port-Specific Changes}
541
542Platform-specific changes go here.
543
544
545%======================================================================
546\section{Other Changes and Fixes \label{section-other}}
547
548As usual, there were a bunch of other improvements and bugfixes
549scattered throughout the source tree. A search through the CVS change
550logs finds there were XXX patches applied and YYY bugs fixed between
Andrew M. Kuchling92e24952004-12-03 13:54:09 +0000551Python 2.4 and 2.5. Both figures are likely to be underestimates.
Fred Drake2db76802004-12-01 05:05:47 +0000552
553Some of the more notable changes are:
554
555\begin{itemize}
556
557\item Details go here.
558
559\end{itemize}
560
561
562%======================================================================
563\section{Porting to Python 2.5}
564
565This section lists previously described changes that may require
566changes to your code:
567
568\begin{itemize}
569
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000570\item Some old deprecated modules (\module{statcache}, \module{tzparse},
571 \module{whrandom}) have been moved to \file{Lib/lib-old}.
Andrew M. Kuchling0c35db92005-03-20 20:06:49 +0000572You can get access to these modules again by adding the directory
573to your \code{sys.path}:
574
575\begin{verbatim}
576import os
577from distutils import sysconfig
578
579lib_dir = sysconfig.get_python_lib(standard_lib=True)
580old_dir = os.path.join(lib_dir, 'lib-old')
581sys.path.append(old_dir)
582\end{verbatim}
583
584Doing so is discouraged, however; it's better to update any code that
585still uses these modules.
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000586
587% the pickle module no longer uses the deprecated bin parameter.
Fred Drake2db76802004-12-01 05:05:47 +0000588
589\end{itemize}
590
591
592%======================================================================
593\section{Acknowledgements \label{acks}}
594
595The author would like to thank the following people for offering
596suggestions, corrections and assistance with various drafts of this
597article: .
598
599\end{document}