blob: b644a5ccda4de80e4bc02db7f60e4a94acff24ae [file] [log] [blame]
Yury Selivanovd1da5072015-05-27 22:09:10 -04001****************************
2 What's New In Python 3.6
3****************************
4
5:Release: |release|
6:Date: |today|
7
8.. Rules for maintenance:
9
10 * Anyone can add text to this document. Do not spend very much time
11 on the wording of your changes, because your text will probably
12 get rewritten to some degree.
13
14 * The maintainer will go through Misc/NEWS periodically and add
15 changes; it's therefore more important to add your changes to
16 Misc/NEWS than to this file.
17
18 * This is not a complete list of every single change; completeness
19 is the purpose of Misc/NEWS. Some changes I consider too small
20 or esoteric to include. If such a change is added to the text,
21 I'll just remove it. (This is another reason you shouldn't spend
22 too much time on writing your addition.)
23
24 * If you want to draw your new text to the attention of the
25 maintainer, add 'XXX' to the beginning of the paragraph or
26 section.
27
28 * It's OK to just add a fragmentary note about a change. For
29 example: "XXX Describe the transmogrify() function added to the
30 socket module." The maintainer will research the change and
31 write the necessary text.
32
33 * You can comment out your additions if you like, but it's not
34 necessary (especially when a final release is some months away).
35
36 * Credit the author of a patch or bugfix. Just the name is
37 sufficient; the e-mail address isn't necessary.
38
39 * It's helpful to add the bug/patch number as a comment:
40
41 XXX Describe the transmogrify() function added to the socket
42 module.
43 (Contributed by P.Y. Developer in :issue:`12345`.)
44
45 This saves the maintainer the effort of going through the Mercurial log
46 when researching a change.
47
48This article explains the new features in Python 3.6, compared to 3.5.
49
50For full details, see the :source:`Misc/NEWS` file.
51
52.. note::
53
54 Prerelease users should be aware that this document is currently in draft
55 form. It will be updated substantially as Python 3.6 moves towards release,
56 so it's worth checking back even after reading earlier versions.
57
58
59Summary -- Release highlights
60=============================
61
62.. This section singles out the most important changes in Python 3.6.
63 Brevity is key.
64
Martin Panterbc1ee462016-02-13 00:41:37 +000065* PEP 498: :ref:`Formatted string literals <whatsnew-fstrings>`
Yury Selivanovd1da5072015-05-27 22:09:10 -040066
67.. PEP-sized items next.
68
69.. _pep-4XX:
70
71.. PEP 4XX: Virtual Environments
72.. =============================
73
74
75.. (Implemented by Foo Bar.)
76
77.. .. seealso::
78
79 :pep:`4XX` - Python Virtual Environments
80 PEP written by Carl Meyer
81
82
Victor Stinner34be8072016-03-14 12:04:26 +010083New Features
84============
85
Martin Panterbc1ee462016-02-13 00:41:37 +000086.. _whatsnew-fstrings:
87
88PEP 498: Formatted string literals
89----------------------------------
90
91Formatted string literals are a new kind of string literal, prefixed
92with ``'f'``. They are similar to the format strings accepted by
93:meth:`str.format`. They contain replacement fields surrounded by
94curly braces. The replacement fields are expressions, which are
95evaluated at run time, and then formatted using the :func:`format` protocol.
96
97 >>> name = "Fred"
98 >>> f"He said his name is {name}."
99 'He said his name is Fred.'
100
101See :pep:`498` and the main documentation at :ref:`f-strings`.
102
103
Victor Stinner34be8072016-03-14 12:04:26 +0100104PYTHONMALLOC environment variable
105---------------------------------
106
107The new :envvar:`PYTHONMALLOC` environment variable allows to set the Python
108memory allocators and/or install debug hooks.
109
110It is now possible to install debug hooks on Python memory allocators on Python
111compiled in release mode using ``PYTHONMALLOC=debug``. Effects of debug hooks:
112
113* Newly allocated memory is filled with the byte ``0xCB``
114* Freed memory is filled with the byte ``0xDB``
115* Detect violations of Python memory allocator API. For example,
116 :c:func:`PyObject_Free` called on a memory block allocated by
117 :c:func:`PyMem_Malloc`.
118* Detect write before the start of the buffer (buffer underflow)
119* Detect write after the end of the buffer (buffer overflow)
Victor Stinnerc4aec362016-03-14 22:26:53 +0100120* Check that the :term:`GIL <global interpreter lock>` is held when allocator
121 functions of the :c:data:`PYMEM_DOMAIN_OBJ` domain (ex:
122 :c:func:`PyObject_Malloc`) are called
Victor Stinner34be8072016-03-14 12:04:26 +0100123
124See the :c:func:`PyMem_SetupDebugHooks` function for debug hooks on Python
125memory allocators.
126
127It is now also possible to force the usage of the :c:func:`malloc` allocator of
128the C library for all Python memory allocations using ``PYTHONMALLOC=malloc``.
129It helps to use external memory debuggers like Valgrind on a Python compiled in
130release mode.
131
132(Contributed by Victor Stinner in :issue:`26516`.)
133
134
Yury Selivanovd1da5072015-05-27 22:09:10 -0400135Other Language Changes
136======================
137
138* None yet.
139
140
141New Modules
142===========
143
144* None yet.
145
146
147Improved Modules
148================
149
Berker Peksagb6c95722015-10-08 13:58:49 +0300150datetime
151--------
152
Martin Panterfad4b602015-11-14 01:29:17 +0000153The :meth:`datetime.strftime() <datetime.datetime.strftime>` and
154:meth:`date.strftime() <datetime.date.strftime>` methods now support ISO 8601 date
Berker Peksagb6c95722015-10-08 13:58:49 +0300155directives ``%G``, ``%u`` and ``%V``.
156(Contributed by Ashley Anderson in :issue:`12006`.)
157
158
Serhiy Storchakaffe96ae2016-02-11 13:21:30 +0200159os
160--
161
162A new :meth:`~os.scandir.close` method allows explicitly closing a
163:func:`~os.scandir` iterator. The :func:`~os.scandir` iterator now
164supports the :term:`context manager` protocol. If a :func:`scandir`
165iterator is neither exhausted nor explicitly closed a :exc:`ResourceWarning`
166will be emitted in its destructor.
167(Contributed by Serhiy Storchaka in :issue:`25994`.)
168
169
Serhiy Storchaka0d554d72015-10-10 22:42:18 +0300170pickle
171------
172
Martin Panterfad4b602015-11-14 01:29:17 +0000173Objects that need calling ``__new__`` with keyword arguments can now be pickled
Serhiy Storchaka0d554d72015-10-10 22:42:18 +0300174using :ref:`pickle protocols <pickle-protocols>` older than protocol version 4.
175Protocol version 4 already supports this case. (Contributed by Serhiy
176Storchaka in :issue:`24164`.)
177
178
Martin Panterfad4b602015-11-14 01:29:17 +0000179rlcompleter
180-----------
Serhiy Storchakaab824222015-09-27 13:43:50 +0300181
182Private and special attribute names now are omitted unless the prefix starts
Martin Panterfad4b602015-11-14 01:29:17 +0000183with underscores. A space or a colon is added after some completed keywords.
Serhiy Storchakaab824222015-09-27 13:43:50 +0300184(Contributed by Serhiy Storchaka in :issue:`25011` and :issue:`25209`.)
185
Martin Panter6fe39262015-11-13 23:54:02 +0000186Names of most attributes listed by :func:`dir` are now completed.
187Previously, names of properties and slots which were not yet created on
188an instance were excluded. (Contributed by Martin Panter in :issue:`25590`.)
189
Serhiy Storchakaab824222015-09-27 13:43:50 +0300190
R David Murray4f098062015-11-28 12:24:52 -0500191telnetlib
192---------
193
194:class:`~telnetlib.Telnet` is now a context manager (contributed by
195Stéphane Wirtel in :issue:`25485`).
196
197
Victor Stinner2c2a4e62016-03-11 22:17:48 +0100198unittest.mock
199-------------
200
201The :class:`~unittest.mock.Mock` class has the following improvements:
202
203* Two new methods, :meth:`Mock.assert_called()
204 <unittest.mock.Mock.assert_called>` and :meth:`Mock.assert_called_once()
205 <unittest.mock.Mock.assert_called_once>` to check if the mock object
206 was called.
207 (Contributed by Amit Saha in :issue:`26323`.)
208
209
Berker Peksag960e8482015-10-08 12:27:06 +0300210urllib.robotparser
211------------------
212
Martin Panterfad4b602015-11-14 01:29:17 +0000213:class:`~urllib.robotparser.RobotFileParser` now supports the ``Crawl-delay`` and
Berker Peksag960e8482015-10-08 12:27:06 +0300214``Request-rate`` extensions.
215(Contributed by Nikolay Bogoychev in :issue:`16099`.)
216
217
Serhiy Storchaka503f9082016-02-08 00:02:25 +0200218zipfile
219-------
220
221A new :meth:`ZipInfo.from_file() <zipfile.ZipInfo.from_file>` class method
Martin Panter288ed032016-02-10 05:45:55 +0000222allows making a :class:`~zipfile.ZipInfo` instance from a filesystem file.
Serhiy Storchaka503f9082016-02-08 00:02:25 +0200223A new :meth:`ZipInfo.is_dir() <zipfile.ZipInfo.is_dir>` method can be used
224to check if the :class:`~zipfile.ZipInfo` instance represents a directory.
225(Contributed by Thomas Kluyver in :issue:`26039`.)
226
227
Martin Panter1fe0d132016-02-10 10:06:36 +0000228zlib
229----
230
231The :func:`~zlib.compress` function now accepts keyword arguments.
232(Contributed by Aviv Palivoda in :issue:`26243`.)
233
234
Yury Selivanovd1da5072015-05-27 22:09:10 -0400235Optimizations
236=============
237
Martin Panterfad4b602015-11-14 01:29:17 +0000238* The ASCII decoder is now up to 60 times as fast for error handlers
Victor Stinnerebcf9ed2015-10-14 10:10:00 +0200239 ``surrogateescape``, ``ignore`` and ``replace`` (Contributed
240 by Victor Stinner in :issue:`24870`).
Yury Selivanovd1da5072015-05-27 22:09:10 -0400241
Terry Jan Reedy6dc9ce12015-10-20 01:07:53 -0400242* The ASCII and the Latin1 encoders are now up to 3 times as fast for the
Martin Panterfad4b602015-11-14 01:29:17 +0000243 error handler ``surrogateescape`` (Contributed by Victor Stinner in :issue:`25227`).
Victor Stinnerc3713e92015-09-29 12:32:13 +0200244
Martin Panterfad4b602015-11-14 01:29:17 +0000245* The UTF-8 encoder is now up to 75 times as fast for error handlers
Victor Stinnerebcf9ed2015-10-14 10:10:00 +0200246 ``ignore``, ``replace``, ``surrogateescape``, ``surrogatepass`` (Contributed
247 by Victor Stinner in :issue:`25267`).
Victor Stinner01ada392015-10-01 21:54:51 +0200248
Martin Panterfad4b602015-11-14 01:29:17 +0000249* The UTF-8 decoder is now up to 15 times as fast for error handlers
Victor Stinnerebcf9ed2015-10-14 10:10:00 +0200250 ``ignore``, ``replace`` and ``surrogateescape`` (Contributed
251 by Victor Stinner in :issue:`25301`).
252
253* ``bytes % args`` is now up to 2 times faster. (Contributed by Victor Stinner
254 in :issue:`25349`).
255
256* ``bytearray % args`` is now between 2.5 and 5 times faster. (Contributed by
257 Victor Stinner in :issue:`25399`).
Victor Stinner1d65d912015-10-05 13:43:50 +0200258
Victor Stinner2bf89932015-10-14 11:25:33 +0200259* Optimize :meth:`bytes.fromhex` and :meth:`bytearray.fromhex`: they are now
260 between 2x and 3.5x faster. (Contributed by Victor Stinner in :issue:`25401`).
261
Yury Selivanovd1da5072015-05-27 22:09:10 -0400262
263Build and C API Changes
264=======================
265
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000266* New :c:func:`Py_FinalizeEx` API which indicates if flushing buffered data
267 failed (:issue:`5319`).
Yury Selivanovd1da5072015-05-27 22:09:10 -0400268
269
270Deprecated
271==========
272
Yury Selivanov7a219112015-05-28 17:10:29 -0400273New Keywords
274------------
275
Yury Selivanov62f27b52015-08-03 14:57:21 -0400276``async`` and ``await`` are not recommended to be used as variable, class,
277function or module names. Introduced by :pep:`492` in Python 3.5, they will
278become proper keywords in Python 3.7.
Yury Selivanov7a219112015-05-28 17:10:29 -0400279
280
Yury Selivanovd1da5072015-05-27 22:09:10 -0400281Deprecated Python modules, functions and methods
282------------------------------------------------
283
Brett Cannoneae30792015-12-28 17:55:27 -0800284* :meth:`importlib.machinery.SourceFileLoader` and
285 :meth:`importlib.machinery.SourcelessFileLoader` are now deprecated. They
286 were the only remaining implementations of
287 :meth:`importlib.abc.Loader.load_module` in :mod:`importlib` that had not
288 been deprecated in previous versions of Python in favour of
289 :meth:`importlib.abc.Loader.exec_module`.
Yury Selivanovd1da5072015-05-27 22:09:10 -0400290
291
292Deprecated functions and types of the C API
293-------------------------------------------
294
295* None yet.
296
297
298Deprecated features
299-------------------
300
Brett Cannon9b638682015-10-16 15:14:27 -0700301* The ``pyvenv`` script has been deprecated in favour of ``python3 -m venv``.
302 This prevents confusion as to what Python interpreter ``pyvenv`` is
303 connected to and thus what Python interpreter will be used by the virtual
Brett Cannon63b85052016-01-15 13:33:03 -0800304 environment. (Contributed by Brett Cannon in :issue:`25154`.)
305
306* When performing a relative import, falling back on ``__name__`` and
307 ``__path__`` from the calling module when ``__spec__`` or
308 ``__package__`` are not defined now raises an :exc:`ImportWarning`.
309 (Contributed by Rose Ames in :issue:`25791`.)
Yury Selivanovd1da5072015-05-27 22:09:10 -0400310
311
Martin Panter7e3a91a2016-02-10 04:40:48 +0000312Deprecated Python behavior
313--------------------------
314
315* Raising the :exc:`StopIteration` exception inside a generator will now generate a
316 :exc:`DeprecationWarning`, and will trigger a :exc:`RuntimeError` in Python 3.7.
317 See :ref:`whatsnew-pep-479` for details.
318
319
Yury Selivanovd1da5072015-05-27 22:09:10 -0400320Removed
321=======
322
323API and Feature Removals
324------------------------
325
Yury Selivanov56613162015-07-23 17:51:34 +0300326* ``inspect.getmoduleinfo()`` was removed (was deprecated since CPython 3.3).
Yury Selivanov6dfbc5d2015-07-23 17:49:00 +0300327 :func:`inspect.getmodulename` should be used for obtaining the module
328 name for a given path.
329
Senthil Kumaran613065b2016-01-17 20:12:16 -0800330* ``traceback.Ignore`` class and ``traceback.usage``, ``traceback.modname``,
331 ``traceback.fullmodname``, ``traceback.find_lines_from_code``,
332 ``traceback.find_lines``, ``traceback.find_strings``,
333 ``traceback.find_executable_lines`` methods were removed from the
334 :mod:`traceback` module. They were undocumented methods deprecated since
335 Python 3.2 and equivalent functionality is available from private methods.
336
Yury Selivanovd1da5072015-05-27 22:09:10 -0400337
338Porting to Python 3.6
339=====================
340
341This section lists previously described changes and other bugfixes
342that may require changes to your code.
343
344Changes in the Python API
345-------------------------
346
Victor Stinnerf3914eb2016-01-20 12:16:21 +0100347* The format of the ``co_lnotab`` attribute of code objects changed to support
348 negative line number delta. By default, Python does not emit bytecode with
349 negative line number delta. Functions using ``frame.f_lineno``,
350 ``PyFrame_GetLineNumber()`` or ``PyCode_Addr2Line()`` are not affected.
351 Functions decoding directly ``co_lnotab`` should be updated to use a signed
352 8-bit integer type for the line number delta, but it's only required to
353 support applications using negative line number delta. See
354 ``Objects/lnotab_notes.txt`` for the ``co_lnotab`` format and how to decode
355 it, and see the :pep:`511` for the rationale.
356
Brett Cannon1e3c3e92015-12-27 13:17:04 -0800357* The functions in the :mod:`compileall` module now return booleans instead
358 of ``1`` or ``0`` to represent success or failure, respectively. Thanks to
359 booleans being a subclass of integers, this should only be an issue if you
360 were doing identity checks for ``1`` or ``0``. See :issue:`25768`.
361
Robert Collinsdfa95c92015-08-10 09:53:30 +1200362* Reading the :attr:`~urllib.parse.SplitResult.port` attribute of
363 :func:`urllib.parse.urlsplit` and :func:`~urllib.parse.urlparse` results
364 now raises :exc:`ValueError` for out-of-range values, rather than
365 returning :const:`None`. See :issue:`20059`.
Yury Selivanovd1da5072015-05-27 22:09:10 -0400366
Brett Cannonc0d91af2015-10-16 12:21:37 -0700367* The :mod:`imp` module now raises a :exc:`DeprecationWarning` instead of
368 :exc:`PendingDeprecationWarning`.
369
Martin Panter28a465c2015-11-14 12:52:08 +0000370* The following modules have had missing APIs added to their :attr:`__all__`
Martin Pantere8afd012016-01-16 07:01:46 +0000371 attributes to match the documented APIs: :mod:`calendar`, :mod:`csv`,
372 :mod:`enum`, :mod:`fileinput`, :mod:`ftplib`, :mod:`logging`,
373 :mod:`optparse`, :mod:`tarfile`, :mod:`threading` and
Martin Panter28a465c2015-11-14 12:52:08 +0000374 :mod:`wave`. This means they will export new symbols when ``import *``
375 is used. See :issue:`23883`.
376
Brett Cannon849113a2016-01-22 15:25:50 -0800377* When performing a relative import, if ``__package__`` does not compare equal
378 to ``__spec__.parent`` then :exc:`ImportWarning` is raised.
379 (Contributed by Brett Cannon in :issue:`25791`.)
Brett Cannon63b85052016-01-15 13:33:03 -0800380
Brett Cannon9fa81262016-01-22 16:39:02 -0800381* When a relative import is performed and no parent package is known, then
382 :exc:`ImportError` will be raised. Previously, :exc:`SystemError` could be
Martin Panterd9108d12016-02-21 08:49:56 +0000383 raised. (Contributed by Brett Cannon in :issue:`18018`.)
384
385* Servers based on the :mod:`socketserver` module, including those
386 defined in :mod:`http.server`, :mod:`xmlrpc.server` and
387 :mod:`wsgiref.simple_server`, now only catch exceptions derived
388 from :exc:`Exception`. Therefore if a request handler raises
389 an exception like :exc:`SystemExit` or :exc:`KeyboardInterrupt`,
390 :meth:`~socketserver.BaseServer.handle_error` is no longer called, and
391 the exception will stop a single-threaded server. (Contributed by
392 Martin Panter in :issue:`23430`.)
Brett Cannon9fa81262016-01-22 16:39:02 -0800393
Yury Selivanovd1da5072015-05-27 22:09:10 -0400394
395Changes in the C API
396--------------------
397
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000398* :c:func:`Py_Exit` (and the main interpreter) now override the exit status
399 with 120 if flushing buffered data failed. See :issue:`5319`.