Create two subsections of the "Core Language Changes" section, because

the list is getting awfully long
Mention Karatsuba multiplication and some other items
This commit is contained in:
Andrew M. Kuchling 2002-08-20 00:54:36 +00:00
parent 11b795cd0f
commit 6974aa93c1
1 changed files with 104 additions and 67 deletions

View File

@ -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 @@ language.
\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 @@ KeyError: pop(): dictionary is empty
(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 @@ than \method{zfill()}.
(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}