+++++++++++
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 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 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(), 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:
  * Bastion, bsddb185, exceptions, md5, MimeWriter, mimify, popen2, rexec,
    sets, sha, stringold, strop, timing, xmllib.

- 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 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.


Build
-----

C API
-----

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

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

- 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


Tests
-----

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

Mac
---

- The cfmfile was removed.


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

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

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

