summaryrefslogtreecommitdiffstats
path: root/Doc/whatsnew/whatsnew23.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Doc/whatsnew/whatsnew23.tex')
-rw-r--r--Doc/whatsnew/whatsnew23.tex203
1 files changed, 192 insertions, 11 deletions
diff --git a/Doc/whatsnew/whatsnew23.tex b/Doc/whatsnew/whatsnew23.tex
index 6ff6fb7..effb48a 100644
--- a/Doc/whatsnew/whatsnew23.tex
+++ b/Doc/whatsnew/whatsnew23.tex
@@ -12,13 +12,11 @@
% MacOS framework-related changes (section of its own, probably)
-% the new set-next-statement functionality of pdb (SF #643835)
-
%\section{Introduction \label{intro}}
-{\large This article is a draft, and is currently up to date for some
-random version of the CVS tree from early November 2002. Please send any
-additions, comments or errata to the author.}
+{\large This article is a draft, and is currently up to date for
+Python 2.3alpha1. Please send any additions, comments or errata to
+the author.}
This article explains the new features in Python 2.3. The tentative
release date of Python 2.3 is currently scheduled for some undefined
@@ -647,6 +645,128 @@ Walter D\"orwald.}
%======================================================================
+\section{PEP 273: Importing Modules from Zip Archives}
+
+The new \module{zipimport} module adds support for importing
+modules from a ZIP-format archive. You shouldn't need to import the
+module explicitly; it will be automatically imported if a ZIP
+archive's filename is added to \code{sys.path}. For example:
+
+\begin{verbatim}
+amk@nyman:~/src/python$ unzip -l /tmp/example.zip
+Archive: /tmp/example.zip
+ Length Date Time Name
+ -------- ---- ---- ----
+ 8467 11-26-02 22:30 jwzthreading.py
+ -------- -------
+ 8467 1 file
+amk@nyman:~/src/python$ ./python
+Python 2.3a0 (#1, Dec 30 2002, 19:54:32)
+[GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-113)] on linux2
+Type "help", "copyright", "credits" or "license" for more information.
+>>> import sys
+>>> sys.path.insert(0, '/tmp/example.zip') # Add .zip file to front of path
+>>> import jwzthreading
+>>> jwzthreading.__file__
+'/tmp/example.zip/jwzthreading.py'
+>>>
+\end{verbatim}
+
+An entry in \code{sys.path} can now be the filename of a ZIP archive.
+The ZIP archive can contain any kind of files, but only files named
+\code{*.py}, \code{*.pyc}, or \code{*.pyo} can be imported. If an
+archive only contains \code{*.py} files, Python will not attempt to
+modify the archive by adding the corresponding {*.pyc} file.
+Therefore, if a ZIP archive doesn't contain {*.pyc} files, importing
+may be rather slow.
+
+A path within the archive can also be specified to only import from a
+subdirectory; for example, the path \file{/tmp/example.zip/lib/}
+would only import from the \file{lib/} subdirectory within the
+archive.
+
+This new feature is implemented using the new import hooks from
+\pep{302}; see section~\ref{section-pep302} for a description.
+
+\begin{seealso}
+
+\seepep{273}{Import Modules from Zip Archives}{Written by James C. Ahlstrom,
+who also provided an implementation.
+Python 2.3 follows the specification in \pep{273},
+but uses an implementation written by Just van Rossum
+that uses the import hooks described in \pep{302}.}
+
+\end{seealso}
+
+%======================================================================
+\section{PEP 302: New Import Hooks \label{section-pep302}}
+
+While it's been possible to write custom import hooks ever since the
+\module{ihooks} module was introduced in Python 1.3, no one has ever
+been really happy with it, because writing new import hooks is
+difficult and messy. There have been various alternative interfaces
+proposed, such as the \module{imputil} and \module{iu} modules, but
+none has ever gained much acceptance, and none was easily usable from
+\C{} code.
+
+\pep{302} borrows ideas from its predecessors, especially from
+Gordon McMillan's \module{iu} module. Three new items
+are added to the \module{sys} module:
+
+\begin{itemize}
+ \item[\code{sys.path_hooks}] is a list of functions. Each function
+takes a string containing a path and returns either \code{None} or an
+importer object that will handle imports from this path.
+
+ \item[\code{sys.path_importer_cache}] caches importer objects for
+each path, so \code{sys.path_hooks} will only need to be traversed
+once for each path.
+
+ \item[\code{sys.meta_path}] is a list of importer objects
+that will be traversed before \code{sys.path} is checked at all.
+This list is initially empty, but can be extended. Additional built-in
+and frozen modules can be imported by an object added to this list.
+
+\end{itemize}
+
+Importer objects must have a single method,
+\method{find_module(\var{fullname}, \var{path}=None)}. \var{fullname}
+will be a module or package name, e.g. \samp{string} or
+\samp{spam.ham}. \method{find_module()} must return a loader object
+that has a single method, \method{load_module(\var{fullname})}, that
+creates and returns the corresponding module object.
+
+Pseudo-code for Python's new import logic, therefore, looks something
+like this (simplified a bit; see \pep{302} for the full details):
+
+\begin{verbatim}
+for mp in sys.meta_path:
+ loader = mp(fullname)
+ if loader is not None:
+ <module> = loader(fullname)
+
+for path in sys.path:
+ for hook in sys.path_hooks:
+ importer = hook(path)
+ if importer is not None:
+ loader = importer.find_module(fullname)
+ return loader.load_module(fullname)
+
+# Not found!
+raise ImportError
+\end{verbatim}
+
+\begin{seealso}
+
+\seepep{302}{New Import Hooks}{Written by Just van~Rossum and Paul Moore.
+Implemented by Just van Rossum.
+% XXX is that credit right?
+}
+
+\end{seealso}
+
+
+%======================================================================
\section{Extended Slices\label{section-slices}}
Ever since Python 1.4, the slicing syntax has supported an optional
@@ -797,7 +917,8 @@ section~\ref{section-bool} of this document.
integer instead of raising an \exception{OverflowError} when a string
or floating-point number is too large to fit into an integer. This
can lead to the paradoxical result that
-\code{isinstance(int(\var{expression}), int)} is false, but that seems unlikely to cause problems in practice.
+\code{isinstance(int(\var{expression}), int)} is false, but that seems
+unlikely to cause problems in practice.
\item Built-in types now support the extended slicing syntax,
as described in section~\ref{section-slices} of this document.
@@ -835,7 +956,7 @@ creates a dictionary with keys taken from the supplied iterator
(Patches contributed by Raymond Hettinger.)
-The \function{dict()} constructor now also accepts keyword arguments to
+Also, the \function{dict()} constructor now accepts keyword arguments to
simplify creating small dictionaries:
\begin{verbatim}
@@ -1012,6 +1133,9 @@ Oren Tirosh.)
\begin{itemize}
+\item The creation of new-style class instances has been made much
+faster; they're now faster than classic classes!
+
\item The \method{sort()} method of list objects has been extensively
rewritten by Tim Peters, and the implementation is significantly
faster.
@@ -1056,7 +1180,7 @@ support using the \code{+=} assignment operator to add another array's
contents, and the \code{*=} assignment operator to repeat an array.
(Contributed by Jason Orendorff.)
-\item The \module{bsddb} module has been updated to version 3.4.0
+\item The \module{bsddb} module has been updated to version 4.1.1
of the \ulink{PyBSDDB}{http://pybsddb.sourceforge.net} package,
providing a more complete interface to the transactional features of
the BerkeleyDB library.
@@ -1118,6 +1242,8 @@ now return enhanced tuples:
('amk', 500)
\end{verbatim}
+\item The \module{gzip} module can now handle files exceeding 2~Gb.
+
\item The new \module{heapq} module contains an implementation of a
heap queue algorithm. A heap is an array-like data structure that
keeps items in a partially sorted order such that,
@@ -1218,13 +1344,21 @@ ValueError: sample larger than population
>>> random.sample(xrange(1,10000,2), 10) # Choose ten odds under 10000
[3407, 3805, 1505, 7023, 2401, 2267, 9733, 3151, 8083, 9195]
\end{verbatim}
-
-(Contributed by Raymond Hettinger.)
+
+The \module{random} module now uses a new algorithm, the Mersenne
+Twister, implemented in C. It's faster and more extensively studied
+than the previous algorithm.
+
+(All changes contributed by Raymond Hettinger.)
\item The \module{readline} module also gained a number of new
functions: \function{get_history_item()},
\function{get_current_history_length()}, and \function{redisplay()}.
+\item The \module{shutil} module gained a \function{move(\var{src},
+\var{dest})} that recursively moves a file or directory to a new
+location.
+
\item Support for more advanced POSIX signal handling was added
to the \module{signal} module by adding the \function{sigpending},
\function{sigprocmask} and \function{sigsuspend} functions, where supported
@@ -1284,6 +1418,28 @@ documentation for details.
%XXX add a link to the module docs?
(Contributed by Greg Ward.)
+\item The \module{thread} and \module{threading} modules now have
+companion, \module{dummy_thread} and \module{dummy_threading}, that
+provide a do-nothing implementation of the \module{thread} module's
+interface, even if threads are not supported. The intention is to
+simplify thread-aware modules (that \emph{don't} rely on threads to
+run) by putting the following code at the top:
+
+% XXX why as _threading?
+\begin{verbatim}
+try:
+ import threading as _threading
+except ImportError:
+ import dummy_threading as _threading
+\end{verbatim}
+
+Code can then call functions and use classes in \module{_threading}
+whether or not threads are supported, avoiding an \keyword{if}
+statement and making the code slightly clearer. This module will not
+magically make multithreaded code run without threads; code that waits
+for another thread to return or to do something will simply hang
+forever.
+
\item The \module{time} module's \function{strptime()} function has
long been an annoyance because it uses the platform C library's
\function{strptime()} implementation, and different platforms
@@ -1610,6 +1766,8 @@ allocate objects, and \cfunction{PyObject_GC_Del} to deallocate them.
\end{itemize}
+It's also no longer possible to build Python without the garbage collector.
+
\item Python can now optionally be built as a shared library
(\file{libpython2.3.so}) by supplying \longprogramopt{enable-shared}
when running Python's \program{configure} script. (Contributed by Ondrej
@@ -1672,6 +1830,22 @@ Expat.
\end{itemize}
+\begin{comment}
+%======================================================================
+\subsection{Date/Time Type}
+
+Date and time types suitable for expressing timestamps were added as
+the \module{datetime} module. The types don't support different
+calendars or many fancy features, and just stick to the basics.
+
+The three primary types are: \class{date}, representing a day, month,
+and year; \class{time}, consisting of hour, minute, and second value;
+and \class{datetime}, which contains both a date and a time.
+
+XXX finish this section
+\end{comment}
+
+
%======================================================================
\subsection{Port-Specific Changes}
@@ -1695,7 +1869,8 @@ The RPM spec files, found in the \file{Misc/RPM/} directory in the
Python source distribution, were updated for 2.3. (Contributed by
Sean Reifschneider.)
-Python now supports AtheOS (\url{http://www.atheos.cx}) and GNU/Hurd.
+Python now supports AtheOS (\url{http://www.atheos.cx}), GNU/Hurd,
+OpenVMS, and OS/2 with EMX.
%======================================================================
@@ -1738,6 +1913,12 @@ should instead call \code{PyCode_Addr2Line(f->f_code, f->f_lasti)}.
This will have the added effect of making the code work as desired
under ``python -O'' in earlier versions of Python.
+A nifty new feature is that trace functions can now the
+\member{f_lineno} attribute of frame objects can now be assigned to,
+changing the line that will be executed next. A \samp{jump} command
+has been added to the \module{pdb} debugger taking advantage of this
+new feature. (Implemented by Richie Hindle.)
+
\end{itemize}