summaryrefslogtreecommitdiffstats
path: root/Doc/whatsnew
diff options
context:
space:
mode:
authorAndrew M. Kuchling <amk@amk.ca>2002-05-06 17:46:39 (GMT)
committerAndrew M. Kuchling <amk@amk.ca>2002-05-06 17:46:39 (GMT)
commit821013ef2cc2ae40e3f63c0544b74ddb8922a645 (patch)
tree01b6c73f53f24327c8ce87717f35f51ceb7f728f /Doc/whatsnew
parentd05c74f42d29e0a050bd034bee3fd8c598471276 (diff)
downloadcpython-821013ef2cc2ae40e3f63c0544b74ddb8922a645.zip
cpython-821013ef2cc2ae40e3f63c0544b74ddb8922a645.tar.gz
cpython-821013ef2cc2ae40e3f63c0544b74ddb8922a645.tar.bz2
Write two sections, and write some partial text for some other sections
Diffstat (limited to 'Doc/whatsnew')
-rw-r--r--Doc/whatsnew/whatsnew23.tex263
1 files changed, 224 insertions, 39 deletions
diff --git a/Doc/whatsnew/whatsnew23.tex b/Doc/whatsnew/whatsnew23.tex
index 3e95596..b4fce43 100644
--- a/Doc/whatsnew/whatsnew23.tex
+++ b/Doc/whatsnew/whatsnew23.tex
@@ -1,5 +1,4 @@
\documentclass{howto}
-
% $Id$
\title{What's New in Python 2.3}
@@ -14,7 +13,7 @@
%\section{Introduction \label{intro}}
{\large This article is a draft, and is currently up to date for some
-random version of the CVS tree around March 26 2002. Please send any
+random version of the CVS tree around May 26 2002. Please send any
additions, comments or errata to the author.}
This article explains the new features in Python 2.3. The tentative
@@ -34,6 +33,7 @@ a particular new feature.
%======================================================================
\section{PEP 255: Simple Generators}
+\label{section-generators}
In Python 2.2, generators were added as an optional feature, to be
enabled by a \code{from __future__ import generators} directive. In
@@ -184,12 +184,30 @@ and Tim Peters, with other fixes from the Python Labs crew.}
%======================================================================
\section{PEP 278: Universal Newline Support}
-XXX write this section
-
-%Highlights: import and friends will understand any of \r, \n and \r\n
-%as end of line. Python file input will do the same if you use mode 'U'.
-%Everything can be disabled by configuring with --without-universal-newlines.
-
+The three major operating systems used today are Microsoft Windows,
+Apple's Macintosh OS, and the various Unix derivatives. A minor
+irritation is that these three platforms all use different characters
+to mark the ends of lines in text files. Unix uses character 10, the
+ASCII linefeed, MacOS uses character 13, the ASCII carriage return,
+and Windows uses a two-character sequence of carriage return plus a
+newline.
+
+Python's file objects can now support end of line conventions other
+than the one followed by the platform on which Python is running.
+Opening a file with the mode \samp{U} or \samp{rU} will open a file
+for reading in universal newline mode. All three line ending
+conventions will be translated to a \samp{\e n} in the strings
+returned by the various file methods such as \method{read()} and
+\method{readline()}.
+
+Universal newline support is also used when importing modules and when
+executing a file with the \function{execfile()} function. This means
+that Python modules can be shared between all three operating systems
+without needing to convert the line-endings.
+
+This feature can be disabled at compile-time by specifying the
+\longprogramopt{without-universal-newlines} when running Python's
+configure script.
\begin{seealso}
@@ -200,8 +218,72 @@ and implemented by Jack Jansen.}
%======================================================================
\section{PEP 285: The \class{bool} Type}
+\label{section-bool}
+
+A Boolean type was added to Python 2.3. Two new constants were added
+to the \module{__builtin__} module, \constant{True} and
+\constant{False}. The type object for this new type is named
+\class{bool}; the constructor for it takes any Python value and
+converts it to \constant{True} or \constant{False}.
+
+\begin{verbatim}
+>>> bool(1)
+True
+>>> bool(0)
+False
+>>> bool([])
+False
+>>> bool( (1,) )
+True
+\end{verbatim}
+
+Most of the standard library modules and built-in functions have been
+changed to return Booleans.
+
+\begin{verbatim}
+>>> o = []
+>>> hasattr(o, 'append')
+True
+>>> isinstance(o, list)
+True
+>>> isinstance(o, tuple)
+False
+\end{verbatim}
+
+Python's Booleans were added with the primary goal of making code
+clearer. For example, if you're reading a function and encounter the
+statement \code{return 1}, you might wonder whether the \samp{1}
+represents a truth value, or whether it's an index, or whether it's a
+coefficient that multiplies some other quantity. If the statement is
+\code{return True}, however, the meaning of the return value is quite
+clearly a truth value.
+
+Python's Booleans were not added for the sake of strict type-checking.
+A very strict language such as Pascal
+% XXX is Pascal the right example here?
+would also prevent you performing arithmetic with Booleans, and would
+require that the expression in an \keyword{if} statement always
+evaluate to a Boolean. Python is not this strict, and it never will
+be. (\pep{285} explicitly says this.) So you can still use any
+expression in an \keyword{if}, even ones that evaluate to a list or
+tuple or some random object, and the Boolean type is a subclass of the
+\class{int} class, so arithmetic using a Boolean still works.
+
+\begin{verbatim}
+>>> True + 1
+2
+>>> False + 1
+1
+>>> False * 75
+0
+>>> True * 75
+75
+\end{verbatim}
-XXX write this section
+To sum up \constant{True} and \constant{False} in a sentence: they're
+alternative ways to spell the integer values 1 and 0, with the single
+difference that \function{str()} and \function{repr()} return the
+strings \samp{True} and \samp{False} instead of \samp{1} and \samp{0}.
\begin{seealso}
@@ -213,60 +295,158 @@ XXX write this section
%======================================================================
\section{New and Improved Modules}
-arraymodule.c: - add Py_UNICODE arrays
-- support +=, *=
+As usual, Python's standard modules had a number of enhancements and
+bug fixes. Here's a partial list; consult the \file{Misc/NEWS} file
+in the source tree, or the CVS logs, for a more complete list.
+
+\begin{itemize}
+
+\item One minor but far-reaching change is that the names of extension
+types defined by the modules included with Python now contain the
+module and a \samp{.} in front of the type name. For example, in
+Python 2.2, if you created a socket and printed its
+\member{__class__}, you'd get this output:
+
+\begin{verbatim}
+>>> s = socket.socket()
+>>> s.__class__
+<type 'socket'>
+\end{verbatim}
+
+In 2.3, you get this:
+\begin{verbatim}
+>>> s.__class__
+<type '_socket.socket'>
+\end{verbatim}
+
+\item The \method{strip()}, \method{lstrip()}, and \method{rstrip()}
+string methods now have an optional argument for specifying the
+characters to strip. The default is still to remove all whitespace
+characters:
+
+\begin{verbatim}
+>>> ' abc '.strip()
+'abc'
+>>> '><><abc<><><>'.strip('<>')
+'abc'
+>>> '><><abc<><><>\n'.strip('<>')
+'abc<><><>\n'
+>>> u'\u4000\u4001abc\u4000'.strip(u'\u4000')
+u'\u4001abc'
+>>>
+\end{verbatim}
+
+\item Another new string method is \method{zfill()}, originally a
+function in the \module{string} module. \method{zfill()} pads a
+numeric string with zeros on the left until it's the specified width.
+Note that the \code{\%} operator is still more flexible and powerful
+than \method{zfill()}.
+
+\begin{verbatim}
+>>> '45'.zfill(4)
+'0045'
+>>> '12345'.zfill(4)
+'12345'
+>>> 'goofy'.zfill(4)
+'0goofy'
+\end{verbatim}
+
+\item Dictionaries have a new method, method{pop(\var{key})}, that
+returns the value corresponding to \var{key} and removes that
+key/value pair from the dictionary. \method{pop()} will raise a
+\exception{KeyError} if the requsted key isn't present in the
+dictionary:
+
+\begin{verbatim}
+>>> d = {1:2}
+>>> d
+{1: 2}
+>>> d.pop(4)
+Traceback (most recent call last):
+ File ``<stdin>'', line 1, in ?
+KeyError: 4
+>>> d.pop(1)
+2
+>>> d.pop(1)
+Traceback (most recent call last):
+ File ``<stdin>'', line 1, in ?
+KeyError: pop(): dictionary is empty
+>>> d
+{}
+>>>
+\end{verbatim}
distutils: command/bdist_packager, support for Solaris pkgtool
and HP-UX swinstall
-Return enhanced tuples in grpmodule
-posixmodule: killpg, mknod, fchdir,
+\item Two new functions, \function{killpg()} and \function{mknod()},
+were added to the \module{posix} module that underlies the \module{os}
+module.
-Expat is now included with the Python source
+\item (XXX write this) arraymodule.c: - add Py_UNICODE arrays
+- support +=, *=
-Readline: Add get_history_item, get_current_history_length, and
-redisplay functions.
+\item The \module{grp} module now returns enhanced tuples:
-Add optional arg to string methods strip(), lstrip(), rstrip().
-The optional arg specifies characters to delete.
+\begin{verbatim}
+>>> import grp
+>>> g = grp.getgrnam('amk')
+>>> g.gr_name, g.gr_gid
+('amk', 500)
+\end{verbatim}
-New method: string.zfill()
+\item The \module{readline} module also gained a number of new
+functions: \function{get_history_item()},
+\function{get_current_history_length()}, and \function{redisplay()}.
+
+\end{itemize}
-Add dict method pop().
New enumerate() built-in.
%======================================================================
\section{Interpreter Changes and Fixes}
-file object can now be subtyped (did this not work before?)
+Here are the changes that Python 2.3 makes to the core language.
+
+\begin{itemize}
+\item The \keyword{yield} statement is now always a keyword, as
+described in section~\ref{section-generators}.
+
+\item Two new constants, \constant{True} and \constant{False} were
+added along with the built-in \class{bool} type, as described in
+section~\ref{section-bool}.
+
+\item The \class{file} type can now be subtyped. (XXX did this not work
+before? Thought I used it in an example in the 2.2 What's New document...)
-yield is now always available
+\item File objects also manage their internal string buffer
+differently by increasing it exponentially when needed.
+This results in the benchmark tests in \file{Lib/test/test_bufio.py}
+speeding up from 57 seconds to 1.7 seconds, according to one
+measurement.
-This adds the module name and a dot in front of the type name in every
-type object initializer, except for built-in types (and those that
-already had this). Note that it touches lots of Mac modules -- I have
-no way to test these but the changes look right. Apologies if they're
-not. This also touches the weakref docs, which contains a sample type
-object initializer. It also touches the mmap test output, because the
-mmap type's repr is included in that output. It touches object.h to
-put the correct description in a comment.
+\end{itemize}
-File objects: Grow the string buffer at a mildly exponential rate for
-the getc version of get_line. This makes test_bufio finish in 1.7
-seconds instead of 57 seconds on my machine (with Py_DEBUG defined).
%======================================================================
\section{Other Changes and Fixes}
+XXX write this
+
The tools used to build the documentation now work under Cygwin as
well as \UNIX.
+
% ======================================================================
-\section{C Interface Changes}
+\section{Build and C API Changes}
+
+XXX write this
-Patch \#527027: Allow building python as shared library with
+\begin{itemize}
+
+\item Patch \#527027: Allow building python as shared library with
--enable-shared
pymalloc is now enabled by default (also mention debug-mode pymalloc)
@@ -277,6 +457,10 @@ PyObject_DelItemString() added
PyArg_NoArgs macro is now deprecated
+\item The source code for the Expat XML parser is now included with
+the Python source, so the \module{pyexpat} module is no longer
+dependent on having a system library containing Expat.
+
===
Introduce two new flag bits that can be set in a PyMethodDef method
descriptor, as used for the tp_methods slot of a type. These new flag
@@ -297,7 +481,11 @@ these special method types are not meaningful in that case; a
ValueError will be raised if these flags are found in that context.
===
-Ports:
+\end{itemize}
+
+\subsection{Port-Specific Changes}
+
+XXX write this
OS/2 EMX port
@@ -319,6 +507,3 @@ suggestions, corrections and assistance with various drafts of this
article: Fred~L. Drake, Jr.
\end{document}
-
-
-