[Python-3000-checkins] r67488 - python/branches/py3k/Doc/whatsnew/3.0.rst

guido.van.rossum python-3000-checkins at python.org
Wed Dec 3 03:03:20 CET 2008


Author: guido.van.rossum
Date: Wed Dec  3 03:03:19 2008
New Revision: 67488

Log:
Another checkpoint -- some stuff I managed to do on the train.


Modified:
   python/branches/py3k/Doc/whatsnew/3.0.rst

Modified: python/branches/py3k/Doc/whatsnew/3.0.rst
==============================================================================
--- python/branches/py3k/Doc/whatsnew/3.0.rst	(original)
+++ python/branches/py3k/Doc/whatsnew/3.0.rst	Wed Dec  3 03:03:19 2008
@@ -129,25 +129,29 @@
   :func:`print` function calls, so this is mostly a non-issue for
   larger projects.
 
-Text Strings Vs. Bytes
-----------------------
+Text Vs. Data Instead Of Unicode Vs. 8-bit
+------------------------------------------
 
 Everything you thought you knew about binary data and Unicode has
-changed.  There's a longer section below; here's a summary of the
-changes:
+changed:
 
-* Python 3.0 uses *strings* and *bytes* instead of *Unicode strings*
-  and *8-bit strings*.  The difference is that any attempt to mix
-  strings and bytes 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.
+XXX HIRO
 
-* You no longer need to use ``u"..."`` literals for Unicode text.
-  However, you must use ``b"..."`` literals for binary data.
+* 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
@@ -167,6 +171,50 @@
   don't have functionality enough in common to warrant a shared base
   class.
 
+* 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
@@ -254,8 +302,8 @@
 This section gives a brief overview of every *syntactic* change in
 Python 3.0.
 
-Additions
----------
+New Syntax
+----------
 
 * :pep:`3107`: Function argument and return value annotations.  This
   provides a standardized way of annotating a function's parameters
@@ -304,8 +352,8 @@
 
 * Bytes literals are introduced with a leading ``b`` or ``B``.
 
-Changes
--------
+Changed Syntax
+--------------
 
 * New :keyword:`raise` statement syntax: ``raise [expr [from expr]]``.
   Also note that string exceptions are no longer legal (:pep:`0352`).
@@ -333,8 +381,8 @@
   *must* now be spelled as ``...``.  (Previously it could also be
   spelled as ``. . .``, by a mere accident of the grammar.)
 
-Removals
---------
+Removed Syntax
+--------------
 
 * :pep:`3113`: Tuple parameter unpacking removed.  You can no longer
   write ``def foo(a, (b, c)): ...``.
@@ -362,7 +410,6 @@
   (:pep:`0328`)
 
 
-
 Changes Already Present In Python 2.6
 =====================================
 
@@ -401,8 +448,7 @@
 
 * :ref:`pep-3112`.  The ``b"..."`` string literal notation (and its
   variants like ``b'...'``, ``b"""..."""``, and ``br"..."``) now
-  produces a literal of type :class:`bytes`.  More about
-  :class:`bytes` below.
+  produces a literal of type :class:`bytes`.
 
 * :ref:`pep-3116`.  The :mod:`io` module is now the standard way of
   doing file I/O, and the initial values of :data:`sys.stdin`,
@@ -411,14 +457,17 @@
   alias for :func:`io.open` and has additional keyword arguments
   *encoding*, *errors*, *newline* and *closefd*.  Also note that an
   invalid *mode* argument now raises :exc:`ValueError`, not
-  :exc:`IOError`.
+  :exc:`IOError`.  The binary file object underlying a text file
+  object can be accessed as :attr:`f.buffer` (but beware that the
+  text object maintains a buffer of itself in order to speed up
+  the encoding and decoding operations).
 
 * :ref:`pep-3118`.  The old builtin :func:`buffer` is now really gone;
   the new builtin :func:`memoryview` provides (mostly) similar
   functionality.
 
 * :ref:`pep-3119`.  The :mod:`abc` module and the ABCs defined in the
-  :mod:`collections` module plays a slightly more prominent role in
+  :mod:`collections` module plays a somewhat more prominent role in
   the language now, and builtin collection types like :class:`dict`
   and :class:`list` conform to the :class:`collections.MutableMapping`
   and :class:`collections.MutableSequence` ABC, respectively.
@@ -427,11 +476,11 @@
   notation is the only one supported, and binary literals have been
   added.
 
-* :ref:`pep-3129`.  This speaks for itself.
+* :ref:`pep-3129`.
 
 * :ref:`pep-3141`.  The :mod:`numbers` module is another new use of
   ABCs, defining Python's "numeric tower".  Also note the new
-  :mod:`fractions` module.
+  :mod:`fractions` module which implements :class:`numbers.Rational`.
 
 
 Library Changes
@@ -532,58 +581,14 @@
 * Cleanup of the :mod:`random` module: removed the :func:`jumpahead` API.
 
 
-Strings And Bytes
-=================
-
-This section discusses the many changes in string XXX
-
-* There is only one 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
-  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
-  you decide to decode it).  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.
-
-.. XXX add bytearray
-
-* All backslashes in raw strings are interpreted literally.  This means that
-  ``'\U'`` and ``'\u'`` escapes in raw strings are not treated specially.
-
-* :pep:`3138`: :func:`repr` of a string no longer escapes all
-  non-ASCII characters.  XXX
-
-* :pep:`3112`: Bytes literals, e.g. ``b"abc"``, create :class:`bytes`
-  instances.
-
-* :pep:`3120`: UTF-8 default source encoding.
-
-* :pep:`3131`: Non-ASCII 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 mostly 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`.
-
-
-
 :pep:`3101`: A New Approach To String Formatting
 ================================================
 
 * A new system for  built-in string formatting operations replaces the
   ``%`` string  formatting operator.   (However, the ``%``  operator is
   still supported;  it will  be deprecated in  Python 3.1  and removed
-  from the language at some later time.)
-
-.. XXX expand this
+  from the language at some later time.)  Read :pep:`3101` for the full
+  scoop.
 
 
 :pep:`3106`: Revamping dict :meth:`dict.keys`, :meth:`dict.items` and :meth:`dict.values`
@@ -632,16 +637,24 @@
 New Class And Metaclass Stuff
 =============================
 
+XXX Move to new syntax section???
+
 * Classic classes are gone.
 
-* :pep:`3115`: New Metaclass Syntax.
+* :pep:`3115`: New Metaclass Syntax.  Instead of::
+
+    class C:
+        __metaclass__ = M
+        ...
 
-* :pep:`3119`: Abstract Base Classes (ABCs); ``@abstractmethod`` and
-  ``@abstractproperty`` decorators; collection ABCs.
+  you now use::
 
-* :pep:`3129`: Class decorators.
+    class C(metaclass=M):
+        ...
 
-* :pep:`3141`: Numeric ABCs.
+  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


More information about the Python-3000-checkins mailing list