****************************
  What's New In Python 3.4
****************************

:Release: |release|
:Date: |today|

.. Rules for maintenance:

   * Anyone can add text to this document, but the maintainer reserves the
   right to rewrite any additions. In particular, for obscure or esoteric
   features, the maintainer may reduce any addition to a simple reference to
   the new documentation rather than explaining the feature inline.

   * While the maintainer will periodically go through Misc/NEWS
   and add changes, it's best not to rely on this. We know from experience
   that any changes that aren't in the What's New documentation around the
   time of the original release will remain largely unknown to the community
   for years, even if they're added later. We also know from experience that
   other priorities can arise, and the maintainer will run out of time to do
   updates - in such cases, end users will be much better served by partial
   notifications that at least give a hint about new features to
   investigate.

   * This is not a complete list of every single change; completeness
   is the purpose of Misc/NEWS. The What's New should focus on changes that
   are visible to Python *users* and that *require* a feature release (i.e.
   most bug fixes should only be recorded in Misc/NEWS)

   * PEPs should not be marked Final until they have an entry in What's New.
   A placeholder entry that is just a section header and a link to the PEP
   (e.g ":pep:`397` has been implemented") is acceptable. If a PEP has been
   implemented and noted in What's New, don't forget to mark it as Final!

   * If you want to draw your new text to the attention of the
   maintainer, add 'XXX' to the beginning of the paragraph or
   section.

   * It's OK to add just a very brief note about a change.  For
   example: "The :ref:`~socket.transmogrify()` function was added to the
   :mod:`socket` module."  The maintainer will research the change and
   write the necessary text (if appropriate). The advantage of doing this
   is that even if no more descriptive text is ever added, readers will at
   least have a notification that the new feature exists and a link to the
   relevant documentation.

   * You can comment out your additions if you like, but it's not
   necessary (especially when a final release is some months away).

   * Credit the author of a patch or bugfix.   Just the name is
   sufficient; the e-mail address isn't necessary.

   * It's helpful to add the bug/patch number as a comment:

   The :ref:`~socket.transmogrify()` function was added to the
   :mod:`socket` module. (Contributed by P.Y. Developer in :issue:`12345`.)

   This saves the maintainer the effort of going through the Mercurial log
   when researching a change.

   * Cross referencing tip: :ref:`mod.attr` will display as ``mod.attr``,
   while :ref:`~mod.attr` will display as ``attr``.

This article explains the new features in Python 3.4, compared to 3.3.

.. Python 3.4 was released on TBD.

For full details, see the :source:`Misc/NEWS` file.

.. note:: Prerelease users should be aware that this document is currently in
   draft form. It will be updated substantially as Python 3.4 moves towards
   release, so it's worth checking back even after reading earlier versions.


.. seealso::

   .. :pep:`4XX` - Python 3.4 Release Schedule


Summary -- Release highlights
=============================

.. This section singles out the most important changes in Python 3.3.
   Brevity is key.

New syntax features:

* None yet.

New library modules:

* None yet.

New built-in features:

* None yet.

Implementation improvements:

* None yet.

Significantly Improved Library Modules:

* SHA-3 (Keccak) support for :mod:`hashlib`.

Security improvements:

* None yet.

Please read on for a comprehensive list of user-facing changes.


.. PEP-sized items next.

.. _pep-4XX:

.. PEP 4XX: Example PEP
.. ====================


.. (Implemented by Foo Bar.)

.. .. seealso::

   :pep:`4XX` - Example PEP
      PEP written by Example Author




Other Language Changes
======================

Some smaller changes made to the core Python language are:

* Unicode database updated to UCD version 6.2.



New Modules
===========

.. module name
.. -----------

* None yet.


Improved Modules
================

* None yet.


Optimizations
=============

Major performance enhancements have been added:

* None yet.


Build and C API Changes
=======================

Changes to Python's build process and to the C API include:

* None yet.


Deprecated
==========

Unsupported Operating Systems
-----------------------------

* None yet.


Deprecated Python modules, functions and methods
------------------------------------------------

* None yet.


Deprecated functions and types of the C API
-------------------------------------------

* None yet.


Deprecated features
-------------------

* None yet.


Porting to Python 3.4
=====================

This section lists previously described changes and other bugfixes
that may require changes to your code.

* Nothing yet.
