python-peps/peps/pep-3100.rst

381 lines
16 KiB
ReStructuredText
Raw Permalink Normal View History

PEP: 3100
Title: Miscellaneous Python 3.0 Plans
Author: Brett Cannon <brett@python.org>
Status: Final
Type: Process
2004-08-20 08:43:19 -04:00
Content-Type: text/x-rst
Created: 20-Aug-2004
2004-08-20 11:05:39 -04:00
Post-History:
2004-08-20 08:43:19 -04:00
Abstract
========
This PEP, previously known as :pep:`3000`, describes smaller scale changes
and new features for which no separate PEP is written yet, all targeted
for Python 3000.
2004-08-20 08:43:19 -04:00
The list of features included in this document is subject to change
and isn't binding on the Python development community; features may be
added, removed, and modified at any time. The purpose of this list is
to focus our language development effort on changes that are steps to
3.0, and to encourage people to invent ways to smooth the transition.
This document is not a wish-list that anyone can extend. While there
are two authors of this PEP, we're just supplying the text; the
decisions for which changes are listed in this document are made by
2004-08-20 11:05:39 -04:00
Guido van Rossum, who has chosen them as goals for Python 3.0.
Guido's pronouncements on things that will not change in Python 3.0
are recorded in :pep:`3099`.
2004-08-20 08:43:19 -04:00
General goals
=============
A general goal is to reduce feature duplication by removing old ways
of doing things. A general principle of the design will be that one
obvious way of doing something is enough. [1]_
Influencing PEPs
================
* :pep:`238` (Changing the Division Operator)
* :pep:`328` (Imports: Multi-Line and Absolute/Relative)
* :pep:`343` (The "with" Statement)
* :pep:`352` (Required Superclass for Exceptions)
Style changes
=============
* The C style guide will be updated to use 4-space indents, never tabs.
This style should be used for all new files; existing files can be
updated only if there is no hope to ever merge a particular file from
the Python 2 HEAD. Within a file, the indentation style should be
consistent. No other style guide changes are planned ATM.
2004-08-20 08:43:19 -04:00
Core language
=============
* True division becomes default behavior :pep:`238` [done]
2006-09-06 02:42:42 -04:00
* ``exec`` as a statement is not worth it -- make it a function [done]
* Add optional declarations for static typing :pep:`3107` [10]_ [done]
* Support only new-style classes; classic classes will be gone [1]_ [done]
* Replace ``print`` by a function [14]_ :pep:`3105` [done]
* The ``softspace`` attribute of files goes away. [done]
2007-07-27 15:21:32 -04:00
* Use ``except E1, E2, E3 as err:`` if you want the error variable. [3]_ [done]
* ``None`` becomes a keyword [4]_; also ``True`` and ``False`` [done]
2006-12-19 14:01:10 -05:00
* ``...`` to become a general expression element [16]_ [done]
2006-09-06 02:42:42 -04:00
* ``as`` becomes a keyword [5]_ (starting in 2.6 already) [done]
* Have list comprehensions be syntactic sugar for passing an
equivalent generator expression to ``list()``; as a consequence the
loop variable will no longer be exposed :pep:`289` [done]
* Comparisons other than ``==`` and ``!=`` between disparate types
2006-09-06 02:42:42 -04:00
will raise an exception unless explicitly supported by the type [6]_ [done]
* floats will not be acceptable as arguments in place of ints for operations
where floats are inadvertently accepted (PyArg_ParseTuple() i & l formats)
* Remove from ... import * at function scope. [done] This means that functions
can always be optimized and support for unoptimized functions can go away.
* Imports :pep:`328`
+ Imports will be absolute by default. [done]
+ Relative imports must be explicitly specified. [done]
+ Indirection entries in ``sys.modules`` (i.e., a value of ``None`` for
``A.string`` means to use the top-level ``string`` module) will not be
supported.
2007-07-27 15:21:32 -04:00
* __init__.py might become optional in sub-packages? __init__.py will still
be required for top-level packages.
2006-02-27 11:26:26 -05:00
* Cleanup the Py_InitModule() variants {,3,4} (also import and parser APIs)
* Cleanup the APIs exported in pythonrun, etc.
2006-02-28 12:18:37 -05:00
* Some expressions will require parentheses that didn't in 2.x:
2006-02-27 12:38:27 -05:00
- List comprehensions will require parentheses around the iterables.
This will make list comprehensions more similar to generator comprehensions.
2007-07-27 15:21:32 -04:00
[x for x in 1, 2] will need to be: [x for x in (1, 2)] [done]
- Lambdas may have to be parenthesized :pep:`308` [NO]
2007-12-01 23:49:16 -05:00
* In order to get rid of the confusion between __builtin__ and __builtins__,
it was decided to rename __builtin__ (the module) to builtins, and to leave
__builtins__ (the sandbox hook) alone. [#builtin]_ [#builtins]_ [done]
* Attributes on functions of the form ``func_whatever`` will be renamed
``__whatever__`` [17]_ [done]
2006-12-19 14:01:10 -05:00
* Set literals and comprehensions [19]_ [20]_ [done]
{x} means set([x]); {x, y} means set([x, y]).
{F(x) for x in S if P(x)} means set(F(x) for x in S if P(x)).
NB. {range(x)} means set([range(x)]), NOT set(range(x)).
There's no literal for an empty set; use set() (or {1}&{2} :-).
There's no frozenset literal; they are too rarely needed.
* The ``__nonzero__`` special method will be renamed to ``__bool__``
and have to return a bool. The typeobject slot will be called
2006-12-19 14:01:10 -05:00
``tp_bool`` [23]_ [done]
* Dict comprehensions, as first proposed in :pep:`274` [done]
2007-07-11 08:35:47 -04:00
{K(x): V(x) for x in S if P(x)} means dict((K(x), V(x)) for x in S if P(x)).
2004-08-20 08:43:19 -04:00
To be removed:
* String exceptions: use instances of an Exception class [2]_ [done]
2006-12-19 14:01:10 -05:00
* ``raise Exception, "message"``: use ``raise Exception("message")`` [12]_
2007-12-09 10:29:34 -05:00
[done]
* ``x``: use ``repr(x)`` [2]_ [done]
* The ``<>`` operator: use ``!=`` instead [3]_ [done]
* The __mod__ and __divmod__ special methods on float. [they should stay] [21]_
* Drop unbound methods [7]_ [26]_ [done]
2007-12-09 10:29:34 -05:00
* METH_OLDARGS [done]
* WITH_CYCLE_GC [done]
2006-12-19 14:01:10 -05:00
* __getslice__, __setslice__, __delslice__ [#sequence-types]_;
2007-12-09 10:29:34 -05:00
remove slice opcodes and use slice objects. [done]
* ``__oct__``, ``__hex__``: use ``__index__`` in ``oct()`` and ``hex()``
instead. [done]
* ``__methods__`` and ``__members__`` [done]
* C APIs (see code):
PyFloat_AsString, PyFloat_AsReprString, PyFloat_AsStringEx,
PySequence_In, PyEval_EvalFrame, PyEval_CallObject,
_PyObject_Del, _PyObject_GC_Del, _PyObject_GC_Track, _PyObject_GC_UnTrack
PyString_AsEncodedString, PyString_AsDecodedString
PyArg_NoArgs, PyArg_GetInt, intargfunc, intintargfunc
PyImport_ReloadModule ?
Atomic Types
============
* Remove distinction between int and long types; 'long' built-in type and
literals with 'L' or 'l' suffix disappear [1]_ [done]
* Make all strings be Unicode, and have a separate bytes() type [1]_
The new string type will be called 'str'. See :pep:`3137`. [done]
2007-03-04 01:05:40 -05:00
* Return iterable views instead of lists where appropriate for atomic
type methods (e.g. ``dict.keys()``, ``dict.values()``,
``dict.items()``, etc.); iter* methods will be removed. [done]
2007-12-09 10:29:34 -05:00
* Make ``string.join()`` stringify its arguments? [18]_ [NO]
* Fix open() so it returns a ValueError if the mode is bad rather than IOError.
2007-07-27 15:21:32 -04:00
[done]
To be removed:
* ``basestring.find()`` and ``basestring.rfind()``; use ``basestring.index()``
2007-03-04 01:05:40 -05:00
or ``basestring.[r]partition()`` or
``basestring.rindex()`` in a try/except block??? [13]_ [UNLIKELY]
* ``file.xreadlines()`` method [#file-object]_ [done]
2007-07-27 15:21:32 -04:00
* ``dict.setdefault()``? [15]_ [UNLIKELY]
* ``dict.has_key()`` method; use ``in`` operator [done]
* ``list.sort()`` and ``builtin.sorted()`` methods: eliminate ``cmp``
parameter [27]_ [done]
2004-08-20 08:43:19 -04:00
Built-in Namespace
==================
2004-08-20 08:43:19 -04:00
* Make built-ins return an iterator where appropriate (e.g. ``range()``,
``zip()``, ``map()``, ``filter()``, etc.) [done]
* Remove ``input()`` and rename ``raw_input()`` to ``input()``.
If you need the old input(), use eval(input()). [done]
* Introduce ``trunc()``, which would call the ``__trunc__()`` method on its
argument; suggested use is for objects like float where calling ``__int__()``
2008-01-05 15:00:01 -05:00
has data loss, but an integral representation is still desired? [8]_ [done]
* Exception hierarchy changes :pep:`352` [done]
* Add a ``bin()`` function for a binary representation of integers [done]
2004-08-20 11:05:39 -04:00
2004-08-20 08:43:19 -04:00
To be removed:
* ``apply()``: use ``f(*args, **kw)`` instead [2]_ [done]
2007-12-09 10:29:34 -05:00
* ``buffer()``: must die (use a bytes() type instead) (?) [2]_ [done]
2009-10-04 11:59:16 -04:00
* ``callable()``: just use isinstance(x, collections.Callable) (?) [2]_ [done]
* ``compile()``: put in ``sys`` (or perhaps in a module of its own) [2]_
2007-05-20 03:45:53 -04:00
* ``coerce()``: no longer needed [2]_ [done]
2007-08-11 20:43:42 -04:00
* ``execfile()``, ``reload()``: use ``exec()`` [2]_ [done]
2006-12-19 15:51:35 -05:00
* ``intern()``: put in ``sys`` [2]_, [22]_ [done]
* ``reduce()``: put in ``functools``, a loop is more readable most of the
times [2]_, [9]_ [done]
2007-05-20 03:45:53 -04:00
* ``xrange()``: use ``range()`` instead [1]_ [See range() above] [done]
2007-09-13 18:49:14 -04:00
* ``StandardError``: this is a relic from the original exception hierarchy;
2007-07-27 15:21:32 -04:00
subclass ``Exception`` instead. [done]
2004-08-20 08:43:19 -04:00
Standard library
================
* Reorganize the standard library to not be as shallow?
* Move test code to where it belongs, there will be no more test() functions
in the standard library
* Convert all tests to use either doctest or unittest.
* For the procedures of standard library improvement, see :pep:`3001`
2004-08-20 08:43:19 -04:00
To be removed:
* The sets module. [done]
* stdlib modules to be removed
+ see docstrings and comments in the source
2007-12-14 18:59:22 -05:00
- ``macfs`` [to do]
- ``new``, ``reconvert``, ``stringold``, ``xmllib``,
``pcre``, ``pypcre``, ``strop`` [all done]
+ see :pep:`4`
2007-05-31 22:35:09 -04:00
- ``buildtools``,
``mimetools``,
``multifile``,
``rfc822``,
2007-09-22 04:23:41 -04:00
[to do]
- ``mpz``, ``posixfile``, ``regsub``, ``rgbimage``,
2007-12-09 10:29:34 -05:00
``sha``, ``statcache``, ``sv``, ``TERMIOS``, ``timing`` [done]
2007-05-31 22:35:09 -04:00
- ``cfmfile``, ``gopherlib``, ``md5``, ``MimeWriter``, ``mimify`` [done]
- ``cl``, ``sets``, ``xreadlines``, ``rotor``, ``whrandom`` [done]
+ Everything in lib-old :pep:`4` [done]
- ``Para``, ``addpack``, ``cmp``, ``cmpcache``, ``codehack``,
``dircmp``, ``dump``, ``find``, ``fmt``, ``grep``,
``lockfile``, ``newdir``, ``ni``, ``packmail``, ``poly``,
``rand``, ``statcache``, ``tb``, ``tzparse``, ``util``,
``whatsound``, ``whrandom``, ``zmod``
* ``sys.exitfunc``: use atexit module instead [#sys-module]_,
[#exitfunc-patch]_ [done]
* ``sys.exc_type``, ``sys.exc_values``, ``sys.exc_traceback``:
not thread-safe; use ``sys.exc_info()`` or an attribute
2007-05-29 03:59:42 -04:00
of the exception [2]_ [11]_ [#sys-module]_ [done]
2007-02-09 20:17:29 -05:00
* ``sys.exc_clear``: Python 3's except statements provide the same
functionality [24]_ :pep:`3110` [#sys-module]_ [done]
* ``array.read``, ``array.write`` [#array-module]_
* ``operator.isCallable`` : ``callable()`` built-in is being removed
[#operator-module]_ [#remove-operator-funcs]_ [done]
* ``operator.sequenceIncludes`` : redundant thanks to
``operator.contains`` [#operator-module]_ [#remove-operator-funcs]_ [done]
2019-06-25 00:58:50 -04:00
* In the thread module, the acquire_lock() and release_lock() aliases
for the acquire() and release() methods on lock objects.
(Probably also just remove the thread module as a public API,
in favor of always using threading.py.)
* UserXyz classes, in favour of XyzMixins.
* Remove the unreliable empty() and full() methods from Queue.py? [25]_
* Remove jumpahead() from the random API? [25]_
2007-12-14 20:02:40 -05:00
* Make the primitive for random be something generating random bytes
rather than random floats? [25]_
* Get rid of Cookie.SerialCookie and Cookie.SmartCookie? [25]_
2007-02-24 11:36:15 -05:00
* Modify the heapq.heapreplace() API to compare the new value to the top
of the heap? [25]_
2004-08-20 08:43:19 -04:00
2006-03-22 00:24:31 -05:00
Outstanding Issues
==================
* Require C99, so we can use // comments, named initializers, declare variables
without introducing a new scope, among other benefits. (Also better support
for IEEE floating point issues like NaN and infinities?)
2006-03-22 00:24:31 -05:00
* Remove support for old systems, including: BeOS, RISCOS, (SGI) Irix, Tru64
2006-03-22 00:24:31 -05:00
2004-08-20 08:43:19 -04:00
References
==========
2004-08-20 11:05:39 -04:00
.. [1] PyCon 2003 State of the Union:
https://legacy.python.org/doc/essays/ppt/pycon2003/pycon2003.ppt
2004-08-20 08:43:19 -04:00
2004-08-20 11:05:39 -04:00
.. [2] Python Regrets:
https://legacy.python.org/doc/essays/ppt/regrets/PythonRegrets.pdf
2004-08-20 08:43:19 -04:00
2004-08-20 11:05:39 -04:00
.. [3] Python Wiki:
https://wiki.python.org/moin/Python3.0
2004-08-20 08:43:19 -04:00
.. [4] python-dev email ("Constancy of None")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2004-July/046294.html
.. [5] python-dev email (' "as" to be a keyword?')
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2004-July/046316.html
.. [6] python-dev email ("Comparing heterogeneous types")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2004-June/045111.html
.. [7] python-dev email ("Let's get rid of unbound methods")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2005-January/050625.html
.. [8] python-dev email ("Fixing _PyEval_SliceIndex so that integer-like
objects can be used")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2005-February/051674.html
2006-12-19 14:01:10 -05:00
.. [9] Guido's blog ("The fate of reduce() in Python 3000")
https://www.artima.com/weblogs/viewpost.jsp?thread=98196
2006-12-19 14:01:10 -05:00
.. [10] Guido's blog ("Python Optional Typechecking Redux")
https://www.artima.com/weblogs/viewpost.jsp?thread=89161
2006-12-19 14:01:10 -05:00
.. [11] python-dev email ("anonymous blocks")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2005-April/053060.html
2006-12-19 14:01:10 -05:00
.. [12] python-dev email ("PEP 8: exception style")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2005-August/055190.html
2006-12-19 14:01:10 -05:00
.. [13] python-dev email (Remove str.find in 3.0?)
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2005-August/055705.html
2006-12-19 14:01:10 -05:00
.. [14] python-dev email (Replacement for print in Python 3.0)
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2005-September/056154.html
2006-12-19 14:01:10 -05:00
.. [15] python-dev email ("defaultdict")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2006-February/061261.html
2006-02-19 02:10:16 -05:00
2006-12-19 14:01:10 -05:00
.. [16] python-3000 email
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-3000/2006-April/000996.html
2006-04-19 17:56:53 -04:00
2006-12-19 14:01:10 -05:00
.. [17] python-3000 email ("Pronouncement on parameter lists")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-3000/2006-April/001175.html
2006-12-19 14:01:10 -05:00
.. [18] python-3000 email ("More wishful thinking")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-3000/2006-April/000810.html
2006-12-19 14:01:10 -05:00
.. [19] python-3000 email ("sets in P3K?")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-3000/2006-April/001286.html
2006-12-19 14:01:10 -05:00
.. [20] python-3000 email ("sets in P3K?")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-3000/2006-May/001666.html
2006-12-19 14:01:10 -05:00
.. [21] python-3000 email ("bug in modulus?")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-3000/2006-May/001735.html
2006-12-19 14:01:10 -05:00
.. [22] SF patch "sys.id() and sys.intern()"
https://bugs.python.org/issue1601678
2006-12-19 14:01:10 -05:00
.. [23] python-3000 email ("__nonzero__ vs. __bool__")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-3000/2006-November/004524.html
2007-02-09 20:17:29 -05:00
.. [24] python-3000 email ("Pre-peps on raise and except changes")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-3000/2007-February/005672.html
2007-02-24 11:36:15 -05:00
.. [25] python-3000 email ("Py3.0 Library Ideas")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-3000/2007-February/005726.html
2007-02-24 11:36:15 -05:00
.. [26] python-dev email ("Should we do away with unbound methods in Py3k?")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2007-November/075279.html
.. [27] python-dev email ("Mutable sequence .sort() signature")
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2008-February/076818.html
.. [#sys-module] Python docs (sys -- System-specific parameters and functions)
https://docs.python.org/release/2.6/library/sys.html
.. [#operator-module] Python docs (operator -- Standard operators as functions)
https://docs.python.org/release/2.6/library/operator.html
.. [#array-module] Python docs (array -- Efficient arrays of numeric values)
https://docs.python.org/release/2.6/library/array.html
.. [#file-object] Python docs (File objects)
https://docs.python.org/release/2.6/library/stdtypes.html
2006-12-19 14:01:10 -05:00
.. [#sequence-types] Python docs (Additional methods for emulation of sequence types)
https://docs.python.org/release/2.6/reference/datamodel.html#additional-methods-for-emulation-of-sequence-types
2006-12-19 14:01:10 -05:00
.. [#builtin] Approach to resolving __builtin__ vs __builtins__
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-3000/2007-March/006161.html
2007-12-01 23:49:16 -05:00
.. [#builtins] New name for __builtins__
2017-06-11 15:02:39 -04:00
https://mail.python.org/pipermail/python-dev/2007-November/075388.html
.. [#exitfunc-patch] Patch to remove sys.exitfunc
https://github.com/python/cpython/issues/44715
.. [#remove-operator-funcs] Remove deprecated functions from operator
https://github.com/python/cpython/issues/43602
2004-08-20 08:43:19 -04:00
Copyright
=========
This document has been placed in the public domain.