Create two subsections of the "Core Language Changes" section, because
the list is getting awfully long
Mention Karatsuba multiplication and some other items
diff --git a/Doc/whatsnew/whatsnew23.tex b/Doc/whatsnew/whatsnew23.tex
index f919d7e..9ef18ec 100644
--- a/Doc/whatsnew/whatsnew23.tex
+++ b/Doc/whatsnew/whatsnew23.tex
@@ -16,8 +16,6 @@
%
% New sorting code
%
-% Karatsuba multiplication for long ints (#560379)
-%
% xreadlines obsolete; files are their own iterator
%\section{Introduction \label{intro}}
@@ -500,26 +498,6 @@
\item The \keyword{yield} statement is now always a keyword, as
described in section~\ref{section-generators} of this document.
-\item The \code{in} operator now works differently for strings.
-Previously, when evaluating \code{\var{X} in \var{Y}} where \var{X}
-and \var{Y} are strings, \var{X} could only be a single character.
-That's now changed; \var{X} can be a string of any length, and
-\code{\var{X} in \var{Y}} will return \constant{True} if \var{X} is a
-substring of \var{Y}. If \var{X} is the empty string, the result is
-always \constant{True}.
-
-\begin{verbatim}
->>> 'ab' in 'abcd'
-True
->>> 'ad' in 'abcd'
-False
->>> '' in 'abcd'
-True
-\end{verbatim}
-
-Note that this doesn't tell you where the substring starts; the
-\method{find()} method is still necessary to figure that out.
-
\item A new built-in function \function{enumerate()}
was added, as described in section~\ref{section-enumerate} of this
document.
@@ -558,6 +536,85 @@
(Patch contributed by Raymond Hettinger.)
+\item The \keyword{assert} statement no longer checks the \code{__debug__}
+flag, so you can no longer disable assertions by assigning to \code{__debug__}.
+Running Python with the \programopt{-O} switch will still generate
+code that doesn't execute any assertions.
+
+\item Most type objects are now callable, so you can use them
+to create new objects such as functions, classes, and modules. (This
+means that the \module{new} module can be deprecated in a future
+Python version, because you can now use the type objects available
+in the \module{types} module.)
+% XXX should new.py use PendingDeprecationWarning?
+For example, you can create a new module object with the following code:
+
+\begin{verbatim}
+>>> import types
+>>> m = types.ModuleType('abc','docstring')
+>>> m
+<module 'abc' (built-in)>
+>>> m.__doc__
+'docstring'
+\end{verbatim}
+
+\item
+A new warning, \exception{PendingDeprecationWarning} was added to
+indicate features which are in the process of being
+deprecated. The warning will \emph{not} be printed by default. To
+check for use of features that will be deprecated in the future,
+supply \programopt{-Walways::PendingDeprecationWarning::} on the
+command line or use \function{warnings.filterwarnings()}.
+
+\item Using \code{None} as a variable name will now result in a
+\exception{SyntaxWarning} warning. In a future version of Python,
+\code{None} may finally become a keyword.
+
+\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}
+
+\end{itemize}
+
+
+\subsection{String Changes}
+
+\begin{itemize}
+
+\item The \code{in} operator now works differently for strings.
+Previously, when evaluating \code{\var{X} in \var{Y}} where \var{X}
+and \var{Y} are strings, \var{X} could only be a single character.
+That's now changed; \var{X} can be a string of any length, and
+\code{\var{X} in \var{Y}} will return \constant{True} if \var{X} is a
+substring of \var{Y}. If \var{X} is the empty string, the result is
+always \constant{True}.
+
+\begin{verbatim}
+>>> 'ab' in 'abcd'
+True
+>>> 'ad' in 'abcd'
+False
+>>> '' in 'abcd'
+True
+\end{verbatim}
+
+Note that this doesn't tell you where the substring starts; the
+\method{find()} method is still necessary to figure that out.
+
\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
@@ -598,66 +655,46 @@
(Contributed by Walter D\"orwald.)
-\item The \keyword{assert} statement no longer checks the \code{__debug__}
-flag, so you can no longer disable assertions by assigning to \code{__debug__}.
-Running Python with the \programopt{-O} switch will still generate
-code that doesn't execute any assertions.
-
\item A new type object, \class{basestring}, has been added.
Both 8-bit strings and Unicode strings inherit from this type, so
\code{isinstance(obj, basestring)} will return \constant{True} for
either kind of string. It's a completely abstract type, so you
can't create \class{basestring} instances.
+\item Interned strings are no longer immortal. Interned will now be
+garbage-collected in the usual way when the only reference to them is
+from the internal dictionary of interned strings. (Implemented by
+Oren Tirosh.)
+
+\end{itemize}
+
+
+\subsection{Optimizations}
+
+\begin{itemize}
+
\item The \method{sort()} method of list objects has been extensively
rewritten by Tim Peters, and the implementation is significantly
faster.
-\item Most type objects are now callable, so you can use them
-to create new objects such as functions, classes, and modules. (This
-means that the \module{new} module can be deprecated in a future
-Python version, because you can now use the type objects available
-in the \module{types} module.)
-% XXX should new.py use PendingDeprecationWarning?
-For example, you can create a new module object with the following code:
+\item Multiplication of large long integers is now much faster thanks
+to an implementation of Karatsuba multiplication, an algorithm that
+scales better than the O(n*n) required for the grade-school
+multiplication algorithm. (Original patch by Christopher A. Craig,
+and significantly reworked by Tim Peters.)
-\begin{verbatim}
->>> import types
->>> m = types.ModuleType('abc','docstring')
->>> m
-<module 'abc' (built-in)>
->>> m.__doc__
-'docstring'
-\end{verbatim}
+\item The \code{SET_LINENO} opcode is now gone. This may provide a
+small speed increase, subject to your compiler's idiosyncrasies.
+(Removed by Michael Hudson.)
-\item
-A new warning, \exception{PendingDeprecationWarning} was added to
-indicate features which are in the process of being
-deprecated. The warning will \emph{not} be printed by default. To
-check for use of features that will be deprecated in the future,
-supply \programopt{-Walways::PendingDeprecationWarning::} on the
-command line or use \function{warnings.filterwarnings()}.
-
-\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 A number of small rearrangements have been made in various
+hotspots to improve performance, inlining a function here, removing
+some code there. (Implemented mostly by GvR, but lots of people have
+contributed to one change or another.)
\end{itemize}
+
%======================================================================
\section{New and Improved Modules}