blob: e9a31c80ea4d836dfbc7657b0e83589b2f3bc366 [file] [log] [blame]
Ned Deily3a2883c2019-06-12 23:31:45 -04001****************************
2 What's New In Python 3.9
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.9, compared to 3.8.
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.9 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.9.
63 Brevity is key.
64
65
66.. PEP-sized items next.
67
68
69
70New Features
71============
72
73
74
75Other Language Changes
76======================
77
Victor Stinner3939c322019-06-25 15:02:43 +020078* Python now gets the absolute path of the script filename specified on
79 the command line (ex: ``python3 script.py``): the ``__file__`` attribute of
80 the ``__main__`` module, ``sys.argv[0]`` and ``sys.path[0]`` become an
81 absolute path, rather than a relative path. These paths now remain valid
82 after the current directory is changed by :func:`os.chdir`. As a side effect,
83 a traceback also displays the absolute path for ``__main__`` module frames in
84 this case.
85 (Contributed by Victor Stinner in :issue:`20443`.)
Ned Deily3a2883c2019-06-12 23:31:45 -040086
Victor Stinner22eb6892019-06-26 00:51:05 +020087* In development mode and in debug build, *encoding* and *errors* arguments are
88 now checked on string encoding and decoding operations. Examples:
89 :func:`open`, :meth:`str.encode` and :meth:`bytes.decode`.
90
91 By default, for best performances, the *errors* argument is only checked at
92 the first encoding/decoding error, and the *encoding* argument is sometimes
93 ignored for empty strings.
94 (Contributed by Victor Stinner in :issue:`37388`.)
95
Ned Deily3a2883c2019-06-12 23:31:45 -040096
97New Modules
98===========
99
100* None yet.
101
102
103Improved Modules
104================
105
Victor Stinner066e5b12019-06-14 18:55:22 +0200106threading
107---------
108
109In a subinterpreter, spawning a daemon thread now raises an exception. Daemon
110threads were never supported in subinterpreters. Previously, the subinterpreter
111finalization crashed with a Pyton fatal error if a daemon thread was still
112running.
113
Ned Deily3a2883c2019-06-12 23:31:45 -0400114
115Optimizations
116=============
117
118
119Build and C API Changes
120=======================
121
Victor Stinner2ff58a22019-06-17 14:27:23 +0200122* Add a new public :c:func:`PyObject_CallNoArgs` function to the C API:
Victor Stinner5352cc42019-06-17 17:15:36 +0200123 call a callable Python object without any arguments. It is the most efficient
124 way to call a callable Python object without any argument.
125 (Contributed by Victor Stinner in :issue:`37194`.)
126
Ned Deily3a2883c2019-06-12 23:31:45 -0400127
128
129Deprecated
130==========
131
Serhiy Storchaka231aad32019-06-17 16:57:27 +0300132* Currently :func:`math.factorial` accepts :class:`float` instances with
133 non-negative integer values (like ``5.0``). It raises a :exc:`ValueError`
134 for non-integral and negative floats. It is deprecated now. In future
135 Python versions it will raise a :exc:`TypeError` for all floats.
136 (Contributed by Serhiy Storchaka in :issue:`37315`.)
Ned Deily3a2883c2019-06-12 23:31:45 -0400137
138
139Removed
140=======
141
Victor Stinner36456df2019-06-25 03:01:08 +0200142* The ``sys.getcheckinterval()`` and ``sys.setcheckinterval()`` functions have
143 been removed. They were deprecated since Python 3.2. Use
144 :func:`sys.getswitchinterval` and :func:`sys.setswitchinterval` instead.
145 (Contributed by Victor Stinner in :issue:`37392`.)
146
Victor Stinner987a0dc2019-06-19 10:36:10 +0200147* The C function ``PyImport_Cleanup()`` has been removed. It was documented as:
148 "Empty the module table. For internal use only."
Victor Stinnerc68e3fb2019-06-20 22:41:25 +0200149 (Contributed by Victor Stinner in :issue:`36710`.)
Victor Stinner987a0dc2019-06-19 10:36:10 +0200150
Victor Stinnerac7b1a32019-06-18 00:00:24 +0200151* ``_dummy_thread`` and ``dummy_threading`` modules have been removed. These
152 modules were deprecated since Python 3.7 which requires threading support.
153 (Contributed by Victor Stinner in :issue:`37312`.)
154
155* ``aifc.openfp()`` alias to ``aifc.open()``, ``sunau.openfp()`` alias to
156 ``sunau.open()``, and ``wave.openfp()`` alias to ``wave.open()`` have been
157 removed. They were deprecated since Python 3.7.
158 (Contributed by Victor Stinner in :issue:`37320`.)
Ned Deily3a2883c2019-06-12 23:31:45 -0400159
160
161Porting to Python 3.9
162=====================
163
164This section lists previously described changes and other bugfixes
165that may require changes to your code.
166
167