summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/whatsnew/3.0.rst585
1 files changed, 296 insertions, 289 deletions
diff --git a/Doc/whatsnew/3.0.rst b/Doc/whatsnew/3.0.rst
index 9592d80..c195f53 100644
--- a/Doc/whatsnew/3.0.rst
+++ b/Doc/whatsnew/3.0.rst
@@ -4,8 +4,6 @@
.. XXX Add trademark info for Apple, Microsoft.
-.. XXX Remove duplicates; just put info in the most relevant section.
-
:Author: Guido van Rossum
:Release: |release|
:Date: |today|
@@ -132,112 +130,6 @@ Note:
:func:`print` function calls, so this is mostly a non-issue for
larger projects.
-Text Vs. Data Instead Of Unicode Vs. 8-bit
-------------------------------------------
-
-Everything you thought you knew about binary data and Unicode has
-changed:
-
-XXX HIRO
-
-* Python 3.0 uses the concepts of *text* and (binary) *data* instead
- of Unicode strings and 8-bit strings. All text is Unicode; however
- *encoded* Unicode is represented as binary data. The type used to
- hold text is :class:`str`, the type used to hold data is
- :class:`bytes`. The difference is that any attempt to mix text and
- data in Python 3.0 raises a TypeError exception, whereas if you were
- to mix Unicode and 8-bit strings in Python 2.x, you would only get
- an exception if the 8-bit string contained non-ASCII values. As a
- consequence, pretty much all code that uses Unicode, encodings or
- binary data most likely has to change. The change is for the
- better, as in the 2.x world there were numerous bugs having to do
- with mixing encoded and unencoded text.
-
-* You no longer use ``u"..."`` literals for Unicode text. However,
- you must use ``b"..."`` literals for binary data.
-
-* Files opened as text files (still the default mode for :func:`open`)
- always use an encoding to map between strings (in memory) and bytes
- (on disk). Binary files (opened with a ``b`` in the mode argument)
- always use bytes in memory. This means that if a file is opened
- using an incorrect mode or encoding, I/O will likely fail. It also
- means that even Unix users will have to specify the correct mode
- (text or binary) when opening a file. There is a platform-dependent
- default encoding, which on Unixy platforms can be set with the
- ``LANG`` environment variable (and sometimes also with some other
- platform-specific locale-related environment variables). In many
- cases, but not all, the system default is UTF-8; you should never
- count on this default. Any application reading or writing more than
- pure ASCII text should probably have a way to override the encoding.
-
-* The builtin :class:`basestring` abstract type was removed. Use
- :class:`str` instead. The :class:`str` and :class:`bytes` types
- don't have functionality enough in common to warrant a shared base
- class.
-
-* Filenames are passed to and returned from APIs as (Unicode) strings.
- This can present platform-specific problems because on some
- platforms filenames are arbitrary byte strings. (On the other hand
- on Windows, filenames are natively stored as Unicode.) As a
- work-around, most APIs (e.g. :func:`open` and many functions in the
- :mod:`os` module) that take filenames accept :class:`bytes` objects
- as well as strings, and a few APIs have a way to ask for a
- :class:`bytes` return value: :func:`os.listdir` returns a
- :class:`bytes` instance if the argument is a :class:`bytes`
- instance, and :func:`os.getcwdu` returns the current working
- directory as a :class:`bytes` instance.
-
-* Some system APIs like :data:`os.environ` and :data:`sys.argv` can
- also present problems when the bytes made available by the system is
- not interpretable using the default encoding. Setting the ``LANG``
- variable and rerunning the program is probably the best approach.
-
-* All backslashes in raw strings are interpreted literally. This
- means that ``'\U'`` and ``'\u'`` escapes in raw strings are not
- treated specially.
-
-XXX Deal with dupes below
-
-* There is only one text string type; its name is :class:`str` but its
- behavior and implementation are like :class:`unicode` in 2.x.
-
-* The :class:`basestring` superclass has been removed. The ``2to3``
- tool (see below) replaces every occurrence of :class:`basestring`
- with :class:`str`.
-
-* :pep:`3137`: There is a new type, :class:`bytes`, to represent
- binary data (and encoded text, which is treated as binary data until
- it is decoded). The :class:`str` and :class:`bytes` types cannot be
- mixed; you must always explicitly convert between them, using the
- :meth:`str.encode` (str -> bytes) or :meth:`bytes.decode` (bytes ->
- str) methods.
-
-* Like :class:`str`, the :class:`bytes` type is immutable. There is a
- separate *mutable* type to hold buffered binary data,
- :class:`bytearray`. Nearly all APIs that accept :class:`bytes` also
- accept :class:`bytearray`. The mutable API is based on
- :class:`collections.MutableSequence`.
-
-* :pep:`3138`: The :func:`repr` of a string no longer escapes
- non-ASCII characters. It still escapes control characters and code
- points with non-printable status in the Unicode standard, however.
-
-* :pep:`3120`: The default source encoding is now UTF-8.
-
-* :pep:`3131`: Non-ASCII letters are now allowed in identifiers.
- (However, the standard library remains ASCII-only with the exception
- of contributor names in comments.)
-
-* :pep:`3116`: New I/O implementation. The API is nearly 100%
- backwards compatible, but completely reimplemented (currently largely
- in Python). Also, binary files use bytes instead of strings.
-
-* The :mod:`StringIO` and :mod:`cStringIO` modules are gone. Instead,
- import :class:`io.StringIO` or :class:`io.BytesIO`, for text and
- data respectively.
-
-* See also the :ref:`unicode-howto`, which was updated for Python 3.0.
-
Views And Iterators Instead Of Lists
-------------------------------------
@@ -277,12 +169,13 @@ Python 3.0 has simplified the rules for ordering comparisons:
elements must be comparable to each other. Note that this does not
apply to the ``==`` and ``!=`` operators: objects of different
uncomparable types always compare unequal to each other, and an
- object always compares equal to itself (i.e., ``x is y`` implies ``x
- = y``; this is true even for ``NaN``).
+ object always compares equal to itself (i.e., ``x is y`` implies
+ ``x == y``; this is true even for *NaN*).
-* :meth:`builtin.sorted` and :meth:`list.sort` no longer accept the *cmp*
- argument providing a comparison function. Use the *key* argument
- instead. N.B. the *key* and *reverse* arguments are now "keyword-only".
+* :meth:`builtin.sorted` and :meth:`list.sort` no longer accept the
+ *cmp* argument providing a comparison function. Use the *key*
+ argument instead. N.B. the *key* and *reverse* arguments are now
+ "keyword-only".
* The :func:`cmp` function is gone, and the :meth:`__cmp__` special
method is no longer supported. Use :meth:`__lt__` for sorting,
@@ -316,6 +209,115 @@ Integers
* Octal literals are no longer of the form ``0720``; use ``0o720``
instead.
+Text Vs. Data Instead Of Unicode Vs. 8-bit
+------------------------------------------
+
+Everything you thought you knew about binary data and Unicode has
+changed.
+
+* Python 3.0 uses the concepts of *text* and (binary) *data* instead
+ of Unicode strings and 8-bit strings. All text is Unicode; however
+ *encoded* Unicode is represented as binary data. The type used to
+ hold text is :class:`str`, the type used to hold data is
+ :class:`bytes`. The biggest difference with the 2.x situation is
+ that any attempt to mix text and data in Python 3.0 raises
+ :ext:`TypeError`, whereas if you were to mix Unicode and 8-bit
+ strings in Python 2.x, it would work if the 8-bit string happened to
+ contain only 7-bit (ASCII) bytes, but you would get
+ :ext:`UnicodeDecodeError` if it contained non-ASCII values. This
+ value-specific behavior has caused numerous sad faces over the
+ years.
+
+* As a consequence of this change in philosophy, pretty much all code
+ that uses Unicode, encodings or binary data most likely has to
+ change. The change is for the better, as in the 2.x world there
+ were numerous bugs having to do with mixing encoded and unencoded
+ text. To be prepared in Python 2.x, start using :class:`unicode`
+ for all unencoded text, and :class:`str` for binary or encoded data
+ only. Then the ``2to3`` tool will do most of the work for you.
+
+* You can no longer use ``u"..."`` literals for Unicode text.
+ However, you must use ``b"..."`` literals for binary data.
+
+* As the :class:`str` and :class:`bytes` types cannot be mixed, you
+ must always explicitly convert between them. Use :meth:`str.encode`
+ to go from :class:`str` to :class:`bytes`, and :meth:`bytes.decode`
+ to go from :class:`bytes` to :class:`str`. You can also use
+ ``bytes(s, encoding=...)`` and ``str(b, encoding=...)``,
+ respectively.
+
+* Like :class:`str`, the :class:`bytes` type is immutable. There is a
+ separate *mutable* type to hold buffered binary data,
+ :class:`bytearray`. Nearly all APIs that accept :class:`bytes` also
+ accept :class:`bytearray`. The mutable API is based on
+ :class:`collections.MutableSequence`.
+
+* All backslashes in raw string literals are interpreted literally.
+ This means that ``'\U'`` and ``'\u'`` escapes in raw strings are not
+ treated specially. For example, ``r'\u20ac'`` is a string of 6
+ characters in Python 3.0, whereas in 2.6, ``ur'\u20ac'`` was the
+ single "euro" character. (Of course, this change only affects raw
+ string literals; the euro character is ``'\u20ac'`` in Python 3.0.)
+
+* The builtin :class:`basestring` abstract type was removed. Use
+ :class:`str` instead. The :class:`str` and :class:`bytes` types
+ don't have functionality enough in common to warrant a shared base
+ class. The ``2to3`` tool (see below) replaces every occurrence of
+ :class:`basestring` with :class:`str`.
+
+* Files opened as text files (still the default mode for :func:`open`)
+ always use an encoding to map between strings (in memory) and bytes
+ (on disk). Binary files (opened with a ``b`` in the mode argument)
+ always use bytes in memory. This means that if a file is opened
+ using an incorrect mode or encoding, I/O will likely fail loudly,
+ instead of silently producing incorrect data. It also means that
+ even Unix users will have to specify the correct mode (text or
+ binary) when opening a file. There is a platform-dependent default
+ encoding, which on Unixy platforms can be set with the ``LANG``
+ environment variable (and sometimes also with some other
+ platform-specific locale-related environment variables). In many
+ cases, but not all, the system default is UTF-8; you should never
+ count on this default. Any application reading or writing more than
+ pure ASCII text should probably have a way to override the encoding.
+ There is no longer any need for using the encoding-aware streams
+ in the :mod:`codecs` module.
+
+* Filenames are passed to and returned from APIs as (Unicode) strings.
+ This can present platform-specific problems because on some
+ platforms filenames are arbitrary byte strings. (On the other hand,
+ on Windows filenames are natively stored as Unicode.) As a
+ work-around, most APIs (e.g. :func:`open` and many functions in the
+ :mod:`os` module) that take filenames accept :class:`bytes` objects
+ as well as strings, and a few APIs have a way to ask for a
+ :class:`bytes` return value. Thus, :func:`os.listdir` returns a
+ list of :class:`bytes` instances if the argument is a :class:`bytes`
+ instance, and :func:`os.getcwdu` returns the current working
+ directory as a :class:`bytes` instance. Note that when
+ :func:`os.listdir` returns a list of strings, filenames that
+ cannot be decoded properly are omitted rather than raising
+ :exc:`UnicodeError`.
+
+* Some system APIs like :data:`os.environ` and :data:`sys.argv` can
+ also present problems when the bytes made available by the system is
+ not interpretable using the default encoding. Setting the ``LANG``
+ variable and rerunning the program is probably the best approach.
+
+* :pep:`3138`: The :func:`repr` of a string no longer escapes
+ non-ASCII characters. It still escapes control characters and code
+ points with non-printable status in the Unicode standard, however.
+
+* :pep:`3120`: The default source encoding is now UTF-8.
+
+* :pep:`3131`: Non-ASCII letters are now allowed in identifiers.
+ (However, the standard library remains ASCII-only with the exception
+ of contributor names in comments.)
+
+* The :mod:`StringIO` and :mod:`cStringIO` modules are gone. Instead,
+ import the :mod:`io` module and use :class:`io.StringIO` or
+ :class:`io.BytesIO` for text and data respectively.
+
+* See also the :ref:`unicode-howto`, which was updated for Python 3.0.
+
Overview Of Syntax Changes
==========================
@@ -341,8 +343,8 @@ New Syntax
* Keyword arguments are allowed after the list of base classes in a
class definition. This is used by the new convention for specifying
- a metaclass (see :pep:`3115`), but can be used for other purposes as
- well, as long as the metaclass supports it.
+ a metaclass (see next section), but can be used for other purposes
+ as well, as long as the metaclass supports it.
* :pep:`3104`: :keyword:`nonlocal` statement. Using ``nonlocal x``
you can now assign directly to a variable in an outer (but
@@ -376,8 +378,8 @@ New Syntax
Changed Syntax
--------------
-* New :keyword:`raise` statement syntax: ``raise [expr [from expr]]``.
- Also note that string exceptions are no longer legal (:pep:`0352`).
+* :pep:`3109` and :pep:`3134`: new :keyword:`raise` statement syntax:
+ ``raise [expr [from expr]]``. See below.
* :keyword:`as` and :keyword:`with` are now reserved words. (Since
2.6, actually.)
@@ -389,6 +391,22 @@ Changed Syntax
* Change from :keyword:`except` *exc*, *var* to
:keyword:`except` *exc* :keyword:`as` *var*. See :pep:`3110`.
+* :pep:`3115`: New Metaclass Syntax. Instead of::
+
+ class C:
+ __metaclass__ = M
+ ...
+
+ you must now use::
+
+ class C(metaclass=M):
+ ...
+
+ The module-global :data:`__metaclass__` variable is no longer
+ supported. (It was a crutch to make it easier to default to
+ new-style classes without deriving every class from
+ :class:`object`.)
+
* List comprehensions no longer support the syntactic form
``[... for var in item1, item2, ...]``. Use
``[... for var in (item1, item2, ...)]`` instead.
@@ -430,6 +448,8 @@ Removed Syntax
not starting with ``.`` are always interpreted as absolute imports.
(:pep:`0328`)
+* Classic classes are gone.
+
Changes Already Present In Python 2.6
=====================================
@@ -551,9 +571,10 @@ review:
considered implementation details of the pure Python versions.
Users should always import the standard version, which attempts to
import the accelerated version and falls back to the pure Python
- version. The :mod:`pickle` module received this treatment. The
- :mod:`profile` module is on the list for 3.1. The :mod:`StringIO`
- module has been turned into a class in the :mod:`io` module.
+ version. The :mod:`pickle` / :mod:`cPickle` pair received this
+ treatment. The :mod:`profile` module is on the list for 3.1. The
+ :mod:`StringIO` module has been turned into a class in the :mod:`io`
+ module.
* Some related modules have been grouped into packages, and usually
the submodule names have been simplified. The resulting new
@@ -579,7 +600,8 @@ review:
* :mod:`xmlrpc` (:mod:`xmlrpclib`, :mod:`DocXMLRPCServer`,
:mod:`SimpleXMLRPCServer`).
-Some other library changes (not covered by :pep:`3108`):
+Some other changes to standard library moduled, not covered by
+:pep:`3108`:
* Killed :mod:`sets`. Use the builtin :func:`set` function.
@@ -601,6 +623,28 @@ Some other library changes (not covered by :pep:`3108`):
* Cleanup of the :mod:`random` module: removed the :func:`jumpahead` API.
+* The :mod:`new` module is gone.
+
+* The functions :func:`os.tmpnam`, :func:`os.tempnam` and
+ :func:`os.tmpfile` have been removed in favor of the :mod:`tempfile`
+ module.
+
+* The :mod:`tokenize` module has been changed to work with bytes. The
+ main entry point is now :func:`tokenize.tokenize`, instead of
+ generate_tokens.
+
+* :data:`string.letters` and its friends (:data:`string.lowercase` and
+ :data:`string.uppercase`) are gone. Use
+ :data:`string.ascii_letters` etc. instead. (The reason for the
+ removal is that :data:string.letters` and friends had
+ locale-specific behavior, which is a bad idea for such
+ attractively-named global "constants".)
+
+* Renamed module :mod:`__builtin__` to :mod:`builtins` (removing the
+ underscores, adding an 's'). The :data:`__builtins__` variable
+ found in most global namespaces is unchanged. To modify a builtin,
+ you should use :mod:`builtins`, not :data:`__builtins__`!
+
:pep:`3101`: A New Approach To String Formatting
================================================
@@ -612,81 +656,86 @@ Some other library changes (not covered by :pep:`3108`):
scoop.
-:pep:`3106`: Revamping dict :meth:`dict.keys`, :meth:`dict.items` and :meth:`dict.values`
-=========================================================================================
-
-.. XXX expand this (but note that the "pitfalls" section currently has
-.. XXX more detail :-)
-
-* The :meth:`dict.iterkeys`, :meth:`dict.itervalues` and :meth:`dict.iteritems`
- methods have been removed.
-
-* :meth:`dict.keys`, :meth:`dict.values` and :meth:`dict.items` return objects
- with set behavior that reference the underlying dict; these are often
- referred to as *dictionary views*.
+Changes To Exceptions
+=====================
-
-Exception Stuff
-===============
+The APIs for raising and catching exception have been cleaned up and
+new powerful features added:
* :pep:`0352`: All exceptions must be derived (directly or indirectly)
from :exc:`BaseException`. This is the root of the exception
- hierarchy. Most exceptions should actually be derived from
- :exc:`Exception`. This is not a new recommendation, but the
+ hierarchy. This is not new as a recommendation, but the
*requirement* to inherit from :exc:`BaseException` is new. (Python
2.6 still allowed classic classes to be raised, and placed no
- restriction on what you can catch.)
-
-* :exc:`StandardError` was removed (in 2.6, actually).
-
-* Dropping sequence behavior (slicing!) and :attr:`message` attribute of
- exception instances.
-
-* :pep:`3109`: Raising exceptions. You must now use ``raise Exception(args)``
- instead of ``raise Exception, args``.
-
-* :pep:`3110`: Catching exceptions. You must now use ``except SomeException as
- identifier:`` instead of ``except Exception, identifier:``
-
-* :pep:`3134`: Exception chaining. XXX
-
-* A few exception messages are improved when Windows fails to load an extension
- module. For example, ``error code 193`` is now ``%1 is not a valid Win32
- application``. Strings now deal with non-English locales.
-
-
-New Class And Metaclass Stuff
-=============================
-
-XXX Move to new syntax section???
-
-* Classic classes are gone.
-
-* :pep:`3115`: New Metaclass Syntax. Instead of::
-
- class C:
- __metaclass__ = M
- ...
-
- you now use::
-
- class C(metaclass=M):
- ...
-
- The module-global :data:`__metaclass__` variable is no longer supported.
- (It was a crutch to make it easier to default to new-style classes
- without deriving every class from :class:`object`.)
-
-
-Other Language Changes
-======================
-
-* Moved :func:`intern` to :func:`sys.intern`.
+ restriction on what you can catch.) As a consequence, string
+ exceptions are finally truly and utterly dead.
+
+* Almost all exceptions should actually derive from :exc:`Exception`;
+ :exc:`BaseException` should only be used as a base class for
+ exceptions that should only be handled at the top level, such as
+ :exc:`SystemExit` or :exc:`KeyboardInterrupt`. The recommended
+ idiom for handling all exceptions except for this latter category is
+ to use :keyword:`except` :exc:`Exception`.
+
+* :exc:`StandardError` was removed (in 2.6 already).
+
+* Exceptions no longer behave as sequences. Use the :attr:`args`
+ attribute instead.
+
+* :pep:`3109`: Raising exceptions. You must now use :keyword:`raise`
+ *Exception*(*args*) instead of :keyword:`raise` *Exception*, *args*.
+ Additionally, you can no longer explicitly specify a traceback;
+ instead, if you *have* to do this, you can assign directly to the
+ :attr:`__traceback__` attribute (see below).
+
+* :pep:`3110`: Catching exceptions. You must now use
+ *:keyword:`except` SomeException* :keyword:`as` *variable* instead
+ *of :keyword:`except` *SomeException*, variable*. Moreover, the
+ *variable* is explicitly deleted when the :keyword:`except` block
+ is left.
+
+* :pep:`3134`: Exception chaining. There are two cases: implicit
+ chaining and explicit chaining. Implicit chaining happens when an
+ exception is raised in an :keyword:`except` or :keyword:`finally`
+ handler block. This usually happens due to a bug in the handler
+ block; we call this a *secondary* exception. In this case, the
+ original exception (that was being handled) is saved as the
+ :attr:`__context__` attribute of the secondary exception.
+ Explicit chaining is invoked with this syntax::
+
+ raise SecondaryException() from primary_exception
+
+ (where *primary_exception* is any expression that produces an
+ exception object, probably an exception that was previously caught).
+ In this case, the primary exception is stored on the
+ :attr:`__cause__` attribute of the secondary exception. The
+ traceback printed when an unhandled exception occurs walks the chain
+ of :attr:`__cause__` and :attr:`__context__` attributes and prints a
+ separate traceback for each component of the chain, with the primary
+ exception at the top. (Java users may recognize this behavior. :-)
+
+* :pep:`3134`: Exception objects now store their traceback as the
+ :attr:`__traceback__` attribute. This means that an exception
+ object now contains all the information pertaining to an exception,
+ and there are fewer reasons to use :func:`sys.exc_info` (though the
+ latter is not removed).
+
+* A few exception messages are improved when Windows fails to load an
+ extension module. For example, ``error code 193`` is now ``%1 is
+ not a valid Win32 application``. Strings now deal with non-English
+ locales.
+
+
+Miscellaneous Other Changes
+===========================
+
+Operators And Special Methods
+-----------------------------
* ``!=`` now returns the opposite of ``==``, unless ``==`` returns
- ``NotImplemented``.
+ :data:`NotImplemented`.
-* The concept of "unbound methods" was removed from the language.
+* The concept of "unbound methods" has been removed from the language.
When referencing a method as a class attribute, you now get a plain
function object.
@@ -696,27 +745,46 @@ Other Language Changes
:meth:`__delitem__`, when used as an assignment or deletion target,
respectively).
-* :pep:`3111`: :func:`raw_input` renamed to :func:`input`. That is,
- the new :func:`input` function reads a line from :data:`sys.stdin`
- and returns it with the trailing newline stripped. It raises
- :exc:`EOFError` if the input is terminated prematurely. To get the
- old behavior of :func:`input`, use ``eval(input())``.
+* :pep:`3114`: the standard :meth:`next` method has been renamed to
+ :meth:`__next__`.
+
+* The :meth:`__oct__` and :meth:`__hex__` special methods are removed
+ -- :func:`oct` and :func:`hex` use :meth:`__index__` now to convert
+ the argument to an integer.
+
+* Removed support for :attr:`__members__` and :attr:`__methods__`.
+
+* The function attributes named :attr:`func_X` have been renamed to
+ use the :data:`__X__` form, freeing up these names in the function
+ attribute namespace for user-defined attributes. To wit,
+ :attr:`func_closure`, :attr:`func_code`, :attr:`func_defaults`,
+ :attr:`func_dict`, :attr:`func_doc`, :attr:`func_globals`,
+ :attr:`func_name` were renamed to :attr:`__closure__`,
+ :attr:`__code__`, :attr:`__defaults__`, :attr:`__dict__`,
+ :attr:`__doc__`, :attr:`__globals__`, :attr:`__name__`,
+ respectively.
-* :pep:`3114`: ``.next()`` renamed to :meth:`__next__`, new builtin
- :func:`next` to call the :meth:`__next__` method on an object.
+* :meth:`__nonzero__` is now :meth:`__bool__`.
+
+Builtins
+--------
* :pep:`3135`: New :func:`super`. You can now invoke :func:`super`
- without arguments and the right class and instance will
- automatically be chosen. With arguments, its behavior is unchanged.
+ without arguments and (assuming this is in a regular instance method
+ defined inside a :keyword:`class` statement) the right class and
+ instance will automatically be chosen. With arguments, the behavior
+ of :func:`super` is unchanged.
-* :func:`zip`, :func:`map` and :func:`filter` return iterators.
+* :pep:`3111`: :func:`raw_input` was renamed to :func:`input`. That
+ is, the new :func:`input` function reads a line from
+ :data:`sys.stdin` and returns it with the trailing newline stripped.
+ It raises :exc:`EOFError` if the input is terminated prematurely.
+ To get the old behavior of :func:`input`, use ``eval(input())``.
-* :data:`string.letters` and its friends (:data:`string.lowercase` and
- :data:`string.uppercase`) are gone. Use
- :data:`string.ascii_letters` etc. instead. (The reason for the
- removal is that :data:string.letters` and friends had
- locale-specific behavior, which is a bad idea for such
- attractively-named global "constants".)
+* A new builtin :func:`next` was added to call the :meth:`__next__`
+ method on an object.
+
+* Moved :func:`intern` to :func:`sys.intern`.
* Removed: :func:`apply`. Instead of ``apply(f, args)`` use
``f(*args)``.
@@ -742,110 +810,49 @@ Other Language Changes
* Removed. :meth:`dict.has_key` -- use the :keyword:`in` operator
instead.
-* The :meth:`__oct__` and :meth:`__hex__` special methods are removed
- -- :func:`oct` and :func:`hex` use :meth:`__index__` now to convert
- the argument to an integer.
-
-* Removed support for :attr:`__members__` and :attr:`__methods__`.
-
-* Renamed the boolean conversion C-level slot and method:
- ``nb_nonzero`` is now ``nb_bool`` and :meth:`__nonzero__` is now
- :meth:`__bool__`.
-
-* Renamed module :mod:`__builtin__` to :mod:`builtins` (removing the
- underscores, adding an 's'). The :data:`__builtins__` variable
- found in most global namespaces is unchanged. To modify a builtin,
- you should use :mod:`builtins`, not :data:`__builtins__`!
-
-* Renamed function attributes :attr:`func_whatever` to
- :attr:`__whatever__`. XXX list every single one.
-
-* Removed :exc:`StandardError`.
-
-* Removed METH_OLDARGS and WITH_CYCLE_GC. XXX more.
-
-.. ======================================================================
-
-
-Optimizations
--------------
-
-The net result of the 3.0 generalizations is that Python 3.0 runs the
-pystone benchmark around 10% slower than Python 2.5. Most likely the
-biggest cause is the removal of special-casing for small integers.
-There's room for improvement, but it will happen after 3.0 is
-released!
-
.. ======================================================================
-New, Improved, And Deprecated Modules
-=====================================
-
-As usual, Python's standard library received a number of enhancements and bug
-fixes. Here's a partial list of the most notable changes, sorted alphabetically
-by module name. Consult the :file:`Misc/NEWS` file in the source tree for a more
-complete list of changes, or look through the Subversion logs for all the
-details.
-
-* The :mod:`cPickle` module is gone. Use :mod:`pickle` instead. Eventually
- we'll have a transparent accelerator module.
-
-* The :mod:`imageop` module is gone.
-
-* The :mod:`audiodev`, :mod:`Bastion`, :mod:`bsddb185`, :mod:`exceptions`,
- :mod:`linuxaudiodev`, :mod:`md5`, :mod:`MimeWriter`, :mod:`mimify`,
- :mod:`popen2`, :mod:`rexec`, :mod:`sets`, :mod:`sha`, :mod:`stringold`,
- :mod:`strop`, :mod:`sunaudiodev`, :mod:`timing`, and :mod:`xmllib` modules are
- gone.
-
-* The :mod:`bsddb` module is gone. It is being maintained externally
- with its own release schedule better mirroring that of BerkeleyDB.
- See http://www.jcea.es/programacion/pybsddb.htm.
-
-* The :mod:`new` module is gone.
-
-* The functions :func:`os.tmpnam`, :func:`os.tempnam` and :func:`os.tmpfile`
- have been removed in favor of the :mod:`tempfile` module.
-
-* The :mod:`tokenize` module has been changed to work with bytes. The main
- entry point is now :func:`tokenize.tokenize`, instead of generate_tokens.
-
-.. ======================================================================
-.. whole new modules get described in subsections here
-
-.. ======================================================================
-
-
-Build And C API Changes
+Build and C API Changes
=======================
-Changes to Python's build process and to the C API include:
+Due to time constraints, here is a *very* incomplete list of changes
+to the C API.
+
+* Support for several platforms was dropped, including but not limited
+ to Mac OS 9, BeOS, RISCOS, Irix, and Tru64.
-* :pep:`3118`: New Buffer API. XXX
+* :pep:`3118`: New Buffer API.
-* :pep:`3121`: Extension Module Initialization & Finalization. XXX
+* :pep:`3121`: Extension Module Initialization & Finalization.
-* :pep:`3123`: Making :cmacro:`PyObject_HEAD` conform to standard C. XXX
+* :pep:`3123`: Making :cmacro:`PyObject_HEAD` conform to standard C.
* No more C API support for restricted execution.
-* :cfunc:`PyNumber_Coerce`, :cfunc:`PyNumber_CoerceEx`, :cfunc:`PyMember_Get`,
- and :cfunc:`PyMember_Set` C APIs are removed.
+* :cfunc:`PyNumber_Coerce`, :cfunc:`PyNumber_CoerceEx`,
+ :cfunc:`PyMember_Get`, and :cfunc:`PyMember_Set` C APIs are removed.
* New C API :cfunc:`PyImport_ImportModuleNoBlock`, works like
- :cfunc:`PyImport_ImportModule` but won't block on the import lock (returning
- an error instead).
+ :cfunc:`PyImport_ImportModule` but won't block on the import lock
+ (returning an error instead).
-.. ======================================================================
+* Renamed the boolean conversion C-level slot and method:
+ ``nb_nonzero`` is now ``nb_bool``.
+* Removed ``METH_OLDARGS`` and ``WITH_CYCLE_GC`` from the C API.
+
+.. ======================================================================
-Port-Specific Changes
----------------------
-XXX Platform-specific changes go here.
+Performance
+===========
-* XXX BeOS, RISCOS, Irix, Tru64 support
+The net result of the 3.0 generalizations is that Python 3.0 runs the
+pystone benchmark around 10% slower than Python 2.5. Most likely the
+biggest cause is the removal of special-casing for small integers.
+There's room for improvement, but it will happen after 3.0 is
+released!
.. ======================================================================