diff options
Diffstat (limited to 'Doc/whatsnew/2.7.rst')
-rw-r--r-- | Doc/whatsnew/2.7.rst | 259 |
1 files changed, 214 insertions, 45 deletions
diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst index 9148743..580790f 100644 --- a/Doc/whatsnew/2.7.rst +++ b/Doc/whatsnew/2.7.rst @@ -6,7 +6,7 @@ :Release: |release| :Date: |today| -.. Fix accents on Kristjan Valur Jonsson, Fuerstenau. +.. Fix accents on Kristjan Valur Jonsson, Fuerstenau, Tarek Ziade. .. $Id$ Rules for maintenance: @@ -55,12 +55,32 @@ No release schedule has been decided yet for 2.7. .. Compare with previous release in 2 - 3 sentences here. add hyperlink when the documentation becomes available online. +Python 3.1 +================ + +Much as Python 2.6 incorporated features from Python 3.0, +version 2.7 is influenced by features from 3.1. + +XXX mention importlib; anything else? + +One porting change: the :option:`-3` switch now automatically +enables the :option:`-Qwarn` switch that causes warnings +about using classic division with integers and long integers. + .. ======================================================================== .. Large, PEP-level features and changes should be described here. -.. Should there be a new section here for 3k migration? -.. Or perhaps a more general section describing module changes/deprecation? .. ======================================================================== +PEP 372: Adding an ordered dictionary to collections +==================================================== + +XXX write this + +Several modules will now use :class:`OrderedDict` by default. The +:mod:`ConfigParser` module uses :class:`OrderedDict` for the list +of sections and the options within a section. +The :meth:`namedtuple._asdict` method returns an :class:`OrderedDict` +as well. Other Language Changes @@ -85,6 +105,43 @@ Some smaller changes made to the core Python language are: (Contributed by Fredrik Johansson and Victor Stinner; :issue:`3439`.) +* The :class:`bytearray` type's :meth:`translate` method will + now accept None as its first argument. (Fixed by Georg Brandl; + :issue:`4759`.) + +.. ====================================================================== + + +Optimizations +------------- + +Several performance enhancements have been added: + +.. * A new :program:`configure` option, :option:`--with-computed-gotos`, + compiles the main bytecode interpreter loop using a new dispatch + mechanism that gives speedups of up to 20%, depending on the system + and benchmark. The new mechanism is only supported on certain + compilers, such as gcc, SunPro, and icc. + +* The garbage collector now performs better when many objects are + being allocated without deallocating any. A full garbage collection + pass is only performed when the middle generation has been collected + 10 times and when the number of survivor objects from the middle + generation exceeds 10% of the number of objects in the oldest + generation. The second condition was added to reduce the number + of full garbage collections as the number of objects on the heap grows, + avoiding quadratic performance when allocating very many objects. + (Suggested by Martin von Loewis and implemented by Antoine Pitrou; + :issue:`4074`.) + +* The garbage collector tries to avoid tracking simple containers + which can't be part of a cycle. In Python 2.7, this is now true for + tuples and dicts containing atomic types (such as ints, strings, + etc.). Transitively, a dict containing tuples of atomic types won't + be tracked either. This helps reduce the cost of each + garbage collection by decreasing the number of objects to be + considered and traversed by the collector. + (Contributed by Antoine Pitrou; :issue:`4688`.) * Integers are now stored internally either in base 2**15 or in base 2**30, the base being determined at build time. Previously, they @@ -93,7 +150,7 @@ Some smaller changes made to the core Python language are: benchmark results on 32-bit machines have been mixed. Therefore, the default is to use base 2**30 on 64-bit machines and base 2**15 on 32-bit machines; on Unix, there's a new configure option - --enable-big-digits that can be used to override this default. + :option:`--enable-big-digits` that can be used to override this default. Apart from the performance improvements this change should be invisible to end users, with one exception: for testing and @@ -106,41 +163,28 @@ Some smaller changes made to the core Python language are: >>> sys.long_info sys.long_info(bits_per_digit=30, sizeof_digit=4) - (Contributed by Mark Dickinson; :issue:`4258`.) + Another set of changes made long objects a few bytes smaller: 2 bytes + smaller on 32-bit systems and 6 bytes on 64-bit. + (Contributed by Mark Dickinson; :issue:`5260`.) -.. ====================================================================== - +* The division algorithm for long integers has been made faster + by tightening the inner loop, doing shifts instead of multiplications, + and fixing an unnecessary extra iteration. + Various benchmarks show speedups of between 50% and 150% for long + integer divisions and modulo operations. + (Contributed by Mark Dickinson; :issue:`5512`.) -Optimizations -------------- - -A few performance enhancements have been added: - -* The garbage collector now performs better when many objects are - being allocated without deallocating any. A full garbage collection - pass is only performed when the middle generation has been collected - 10 times and when the number of survivor objects from the middle - generation exceeds 10% of the number of objects in the oldest - generation. The second condition was added to reduce the number - of full garbage collections as the number of objects on the heap grows, - avoiding quadratic performance when allocating very many objects. - (Suggested by Martin von Loewis and implemented by Antoine Pitrou; - :issue:`4074`.) - -* The garbage collector tries to avoid tracking simple containers which - can't be part of a cycle. As of now, this is true for tuples and dicts - containing atomic types (such as ints, strings, etc.). Transitively, a dict - containing tuples of atomic types won't be tracked either. This helps bring - down the individual cost of each garbage collection, since it decreases the - number of objects to be considered and traversed by the collector. - - To help diagnosing this optimization, a new function in the :mod:`gc` - module, :func:`is_tracked`, returns True if a given instance is tracked - by the garbage collector, False otherwise. - (Contributed by Antoine Pitrou; :issue:`4688`.) +* The implementation of ``%`` checks for the left-side operand being + a Python string and special-cases it; this results in a 1-3% + performance increase for applications that frequently use ``%`` + with strings, such as templating libraries. + (Implemented by Collin Winter; :issue:`5176`.) +* List comprehensions with an ``if`` condition are compiled into + faster bytecode. (Patch by Antoine Pitrou, back-ported to 2.7 + by Jeffrey Yasskin; :issue:`4715`.) .. ====================================================================== @@ -153,15 +197,6 @@ changes, sorted alphabetically by module name. Consult the :file:`Misc/NEWS` file in the source tree for a more complete list of changes, or look through the Subversion logs for all the details. -* In Distutils, distutils.sdist.add_defaults now uses package_dir and data_files - to feed MANIFEST. - -* It is not mandatory anymore to store clear text passwords in the - :file:`.pypirc` file when registering and uploading packages to PyPI. As long - as the username is present in that file, the :mod:`distutils` package will - prompt for the password if not present. (Added by tarek, with the initial - contribution of Nathan Van Gheem; :issue:`4394`.) - * The :mod:`bz2` module's :class:`BZ2File` now supports the context management protocol, so you can write ``with bz2.BZ2File(...) as f: ...``. (Contributed by Hagen Fuerstenau; :issue:`3860`.) @@ -200,21 +235,100 @@ changes, or look through the Subversion logs for all the details. Contributed by Raymond Hettinger; :issue:`1696199`. + The :class:`namedtuple` class now has an optional *rename* parameter. + If *rename* is True, field names that are invalid because they've + been repeated or that aren't legal Python identifiers will be + renamed to legal names that are derived from the field's + position within the list of fields: + + >>> T=namedtuple('T', ['field1', '$illegal', 'for', 'field2'], rename=True) + >>> T._fields + ('field1', '_1', '_2', 'field2') + + (Added by Raymond Hettinger; :issue:`1818`.) + +* In Distutils, :func:`distutils.sdist.add_defaults` now uses + *package_dir* and *data_files* to create the MANIFEST file. + + It is no longer mandatory to store clear-text passwords in the + :file:`.pypirc` file when registering and uploading packages to PyPI. As long + as the username is present in that file, the :mod:`distutils` package will + prompt for the password if not present. (Added by Tarek Ziade, + based on an initial contribution by Nathan Van Gheem; :issue:`4394`.) + +* New method: the :class:`Decimal` class gained a + :meth:`from_float` class method that performs an exact conversion + of a floating-point number to a :class:`Decimal`. + Note that this is an **exact** conversion that strives for the + closest decimal approximation to the floating-point representation's value; + the resulting decimal value will therefore still include the inaccuracy, + if any. + For example, ``Decimal.from_float(0.1)`` returns + ``Decimal('0.1000000000000000055511151231257827021181583404541015625')``. + (Implemented by Raymond Hettinger; :issue:`4796`.) + +* A new function in the :mod:`gc` module, :func:`is_tracked`, returns + True if a given instance is tracked by the garbage collector, False + otherwise. (Contributed by Antoine Pitrou; :issue:`4688`.) + * The :mod:`gzip` module's :class:`GzipFile` now supports the context management protocol, so you can write ``with gzip.GzipFile(...) as f: ...``. (Contributed by Hagen Fuerstenau; :issue:`3860`.) + It's now possible to override the modification time + recorded in a gzipped file by providing an optional timestamp to + the constructor. (Contributed by Jacques Frechet; :issue:`4272`.) * The :class:`io.FileIO` class now raises an :exc:`OSError` when passed an invalid file descriptor. (Implemented by Benjamin Peterson; :issue:`4991`.) +* New function: ``itertools.compress(*data*, *selectors*)`` takes two + iterators. Elements of *data* are returned if the corresponding + value in *selectors* is True:: + + itertools.compress('ABCDEF', [1,0,1,0,1,1]) => + A, C, E, F + + New function: ``itertools.combinations_with_replacement(*iter*, *r*)`` + returns all the possible *r*-length combinations of elements from the + iterable *iter*. Unlike :func:`combinations`, individual elements + can be repeated in the generated combinations:: + + itertools.combinations_with_replacement('abc', 2) => + ('a', 'a'), ('a', 'b'), ('a', 'c'), + ('b', 'b'), ('b', 'c'), ('c', 'c') + + Note that elements are treated as unique depending on their position + in the input, not their actual values. + + The :class:`itertools.count` function now has a *step* argument that + allows incrementing by values other than 1. :func:`count` also + now allows keyword arguments, and using non-integer values such as + floats or :class:`Decimal` instances. (Implemented by Raymond + Hettinger; :issue:`5032`.) + + :func:`itertools.combinations` and :func:`itertools.product` were + previously raising :exc:`ValueError` for values of *r* larger than + the input iterable. This was deemed a specification error, so they + now return an empty iterator. (Fixed by Raymond Hettinger; :issue:`4816`.) + +* The :mod:`json` module was upgraded to version 2.0.9 of the + simplejson package, which includes a C extension that makes + encoding and decoding faster. + (Contributed by Bob Ippolito; :issue:`4136`.) + + To support the new :class:`OrderedDict` type, :func:`json.load` + now has an optional *object_pairs_hook* parameter that will be called + with any object literal that decodes to a list of pairs. + (Contributed by Raymond Hettinger; :issue:`5381`.) + * The :mod:`pydoc` module now has help for the various symbols that Python uses. You can now do ``help('<<')`` or ``help('@')``, for example. (Contributed by David Laban; :issue:`4739`.) * A new function in the :mod:`subprocess` module, :func:`check_output`, runs a command with a specified set of arguments - and returns the command's output as a string if the command runs without + and returns the command's output as a string when the command runs without error, or raises a :exc:`CalledProcessError` exception otherwise. :: @@ -229,13 +343,41 @@ changes, or look through the Subversion logs for all the details. (Contributed by Gregory P. Smith.) +* The ``sys.version_info`` value is now a named tuple, with attributes + named ``major``, ``minor``, ``micro``, ``releaselevel``, and ``serial``. + (Contributed by Ross Light; :issue:`4285`.) + +* The :mod:`unittest` module was enhanced in several ways. + Test cases can raise the :exc:`SkipTest` exception to skip a test. + (:issue:`1034053`.) + It will now use 'x' for expected failures + and 'u' for unexpected successes when run in its verbose mode. + (Contributed by Benjamin Peterson.) + + The :meth:`assertRaises` and :meth:`failUnlessRaises` methods now + return a context handler when called without providing a callable + object to run. For example, you can write this:: + + with self.assertRaises(KeyError): + raise ValueError + + (Implemented by Antoine Pitrou; :issue:`4444`.) + * The :func:`is_zipfile` function in the :mod:`zipfile` module will now accept a file object, in addition to the path names accepted in earlier versions. (Contributed by Gabriel Genellina; :issue:`4756`.) + :mod:`zipfile` now supports archiving empty directories and + extracts them correctly. (Fixed by Kuba Wieczorek; :issue:`4710`.) + .. ====================================================================== .. whole new modules get described in subsections here +importlib: Importing Modules +------------------------------ + +XXX write this + ttk: Themed Widgets for Tk -------------------------- @@ -266,11 +408,16 @@ Changes to Python's build process and to the C API include: debugged doesn't hold the GIL; the macro will now acquire it before printing. (Contributed by Victor Stinner; :issue:`3632`.) -* :cfunc:`Py_AddPendingCall` is now thread safe, letting any +* :cfunc:`Py_AddPendingCall` is now thread-safe, letting any worker thread submit notifications to the main Python thread. This is particularly useful for asynchronous IO operations. (Contributed by Kristjan Valur Jonsson; :issue:`4293`.) +* The :program:`configure` script now checks for floating-point rounding bugs + on certain 32-bit Intel chips and defines a :cmacro:`X87_DOUBLE_ROUNDING` + preprocessor definition. No code currently uses this definition, + but it's available if anyone wishes to use it. + (Added by Mark Dickinson; :issue:`2937`.) .. ====================================================================== @@ -293,6 +440,28 @@ Port-Specific Changes: Windows Port-Specific Changes: Mac OS X ----------------------------------- +* The ``/Library/Python/2.7/site-packages`` is now appended to + ``sys.path``, in order to share added packages between the system + installation and a user-installed copy of the same version. + (Changed by Ronald Oussoren; :issue:`4865`.) + + +Other Changes and Fixes +======================= + +* When importing a module from a :file:`.pyc` or :file:`.pyo` file + with an existing :file:`.py` counterpart, the :attr:`co_filename` + attributes of all code objects if the original filename is obsolete, + which can happen if the file has been renamed, moved, or is accessed + through different paths. (Patch by Ziga Seilnacht and Jean-Paul + Calderone; :issue:`1180193`.) + +* The :file:`regrtest.py` script now takes a :option:`--randseed=` + switch that takes an integer that will be used as the random seed + for the :option:`-r` option that executes tests in random order. + The :option:`-r` option also now reports the seed that was used + (Added by Collin Winter.) + .. ====================================================================== |