+++++++++++
Python News
+++++++++++

(editors: check NEWS.help for information about editing NEWS using ReST.)

What's New in Python 3000?
==========================

*Release date: XX-XXX-200X*

TO DO
-----

- See PEP 3000, 3100.

- Weed really old/weird stuff from the library.

- Use io.py instead of C stdio everywhere.

- Make strings all Unicode (see branches/py3k-struni).

- Get rid of various compatibility-related flags (e.g. division flags).


Core and Builtins
-----------------

- PEP 3131: Support non-ASCII identifiers.

- PEP 3120: Change default encoding to UTF-8.

- PEP 3123: Use proper C inheritance for PyObject.

- Removed the __oct__ and __hex__ special methods and added a bin()
  builtin function.

- PEP 3127: octal literals now start with "0o". Old-style octal literals
  are invalid. There are binary literals with a prefix of "0b".
  This also affects int(x, 0).

- None, True, False are now keywords.

- PEP 3119: isinstance() and issubclass() can be overridden.

- Remove BaseException.message.

- Remove tuple parameter unpacking (PEP 3113).

- Remove the f_restricted attribute from frames.  This naturally leads to teh
  removal of PyEval_GetRestricted() and PyFrame_IsRestricted().

- PEP 3132 was accepted. That means that you can do ``a, *b = range(5)``
  to assign 0 to a and [1, 2, 3, 4] to b.

- range() now returns an iterator rather than a list.  Floats are not allowed.
  xrange() is no longer defined.

- Patch #1660500: hide iteration variable in list comps, add set comps
  and use common code to handle compilation of iterative expressions

- By default, != returns the opposite of ==, unless the latter returns
  NotImplemented.

- Patch #1680961: sys.exitfunc has been removed and replaced with a private
  C-level API.

- PEP 3115: new metaclasses: the metaclass is now specified as a
  keyword arg in the class statement, which can now use the full syntax of
  a parameter list. Also, the metaclass can implement a __prepare__ function
  which will be called to create the dictionary for the new class namespace.

- The long-deprecated argument "pend" of PyFloat_FromString() has been
  removed.

- The dir() function has been extended to call the __dir__() method on
  its argument, if it exists. If not, it will work like before. This allows
  customizing the output of dir() in the presence of a __getattr__().

- Removed support for __members__ and __methods__.

- Removed indexing/slicing on BaseException.

- input() became raw_input(): the name input() now implements the
  functionality formerly known as raw_input(); the name raw_input()
  is no longer defined.

- Classes listed in an 'except' clause must inherit from BaseException.

- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
  and .keys(), .items(), .values() return dict views.

- PEP 3105: print is now a function.  Also (not in the PEP) the
  'softspace' attribute of files is now gone (since print() doesn't use
  it).  A side effect of this change is that you can get incomplete
  output lines in interactive sessions:

  >>> print(42, end="")
  42>>> 

  We may be able to fix this after the I/O library rewrite.

- PEP 3102: keyword-only arguments.

- Int/Long unification is complete.  The 'long' built-in type
  and literals with trailing 'L' or 'l' have been removed.
  Performance may be sub-optimal (haven't really benchmarked).

- 'except E, V' must now be spelled as 'except E as V' and deletes V
  at the end of the except clause; V must be a simple name.

- Added function annotations per PEP 3107.

- Added nonlocal declaration from PEP 3104

  >>> def f(x):
  ...     def inc():
  ...         nonlocal x
  ...         x += 1
  ...         return x
  ...     return inc
  ...
  >>> inc = f(0)
  >>> inc()
  1
  >>> inc()
  2

- Moved intern() to sys.intern().

- exec is now a function.

- Renamed nb_nonzero to nb_bool and __nonzero__ to __bool__.

- Classic classes are a thing of the past.  All classes are new style.

- Exceptions *must* derive from BaseException.

- Integer division always returns a float.  The -Q option is no more.
  All the following are gone:
   * PyNumber_Divide and PyNumber_InPlaceDivide
   * __div__, __rdiv__, and __idiv__
   * nb_divide, nb_inplace_divide
   * operator.div, operator.idiv, operator.__div__, operator.__idiv__
  (Only __truediv__ and __floordiv__ remain, not sure how to handle them
   if we want to re-use __div__ and friends.  If we do, it will make
   it harder to write code for both 2.x and 3.x.)

- 'as' and 'with' are keywords.

- Absolute import is the default behavior for 'import foo' etc.

- Removed support for syntax:
  backticks (ie, `x`), <>

- Removed these Python builtins:
  apply(), callable(), coerce(), execfile(), file(), reduce(), reload()

- Removed these Python methods:
  {}.has_key

- Removed these opcodes:
  BINARY_DIVIDE, INPLACE_DIVIDE, UNARY_CONVERT

- Remove C API support for restricted execution.

- zip returns an iterator

- Additions:
  set literals, ellipsis literal

- Added class decorators per PEP 3129.


Extension Modules
-----------------

- Remove the imageop module.  Obsolete long with its unit tests becoming
  useless from the removal of rgbimg and imgfile.

- Removed these attributes from Python modules:
  * operator module: div, idiv, __div__, __idiv__, isCallable, sequenceIncludes
  * sys module: exc_clear(), exc_type, exc_value, exc_traceback


Library
-------

- Remove the compiler package.  Use of the _ast module and (an eventual)
  AST -> bytecode mechanism.

- Removed these modules:
  * audiodev, Bastion, bsddb185, exceptions, linuxaudiodev,
    md5, MimeWriter, mimify, popen2,
    rexec, sets, sha, stringold, strop, sunaudiodev, timing, xmllib.

- Moved these modules to Tools/Demos:
  * toaiff

- Remove obsolete IRIX modules: al/AL, cd/CD, cddb, cdplayer, cl/CL, DEVICE,
  ERRNO, FILE, fl/FL, flp, fm, GET, gl/GL, GLWS, IN, imgfile, IOCTL, jpeg,
  panel, panelparser, readcd, sgi, sv/SV, torgb, WAIT.

- Remove obsolete functions:
  * commands.getstatus(), os.popen*,

- Remove functions in the string module that are also string methods;
  Remove string.{letters, lowercase, uppercase}.

- Remove support for long obsolete platforms: plat-aix3, plat-irix5.

- Remove xmlrpclib.SlowParser.  It was based on xmllib.

- Patch #1680961: atexit has been reimplemented in C.

- Add new codecs for UTF-32, UTF-32-LE and UTF-32-BE.


Build
-----

C API
-----

- Removed these Python slots:
  __coerce__, __div__, __idiv__, __rdiv__

- Removed these C APIs:
  PyNumber_Coerce(), PyNumber_CoerceEx(), PyMember_Get, PyMember_Set

- Removed these C slots/fields:
  nb_divide, nb_inplace_divide

- Removed these macros:
  staticforward, statichere, PyArg_GetInt, PyArg_NoArgs

- Removed these typedefs:
  intargfunc, intintargfunc, intobjargproc, intintobjargproc,
  getreadbufferproc, getwritebufferproc, getsegcountproc, getcharbufferproc,
  memberlist


Tests
-----

Documentation
-------------

Mac
---

- The cfmfile was removed.


New platforms
-------------

Tools/Demos
-----------

**(For information about older versions, consult the HISTORY file.)**

