| **************************** |
| What's New In Python 3.11 |
| **************************** |
| |
| :Release: |release| |
| :Date: |today| |
| |
| .. Rules for maintenance: |
| |
| * Anyone can add text to this document. Do not spend very much time |
| on the wording of your changes, because your text will probably |
| get rewritten to some degree. |
| |
| * The maintainer will go through Misc/NEWS periodically and add |
| changes; it's therefore more important to add your changes to |
| Misc/NEWS than to this file. |
| |
| * This is not a complete list of every single change; completeness |
| is the purpose of Misc/NEWS. Some changes I consider too small |
| or esoteric to include. If such a change is added to the text, |
| I'll just remove it. (This is another reason you shouldn't spend |
| too much time on writing your addition.) |
| |
| * If you want to draw your new text to the attention of the |
| maintainer, add 'XXX' to the beginning of the paragraph or |
| section. |
| |
| * It's OK to just add a fragmentary note about a change. For |
| example: "XXX Describe the transmogrify() function added to the |
| socket module." The maintainer will research the change and |
| write the necessary text. |
| |
| * You can comment out your additions if you like, but it's not |
| necessary (especially when a final release is some months away). |
| |
| * Credit the author of a patch or bugfix. Just the name is |
| sufficient; the e-mail address isn't necessary. |
| |
| * It's helpful to add the bug/patch number as a comment: |
| |
| XXX Describe the transmogrify() function added to the socket |
| module. |
| (Contributed by P.Y. Developer in :issue:`12345`.) |
| |
| This saves the maintainer the effort of going through the Mercurial log |
| when researching a change. |
| |
| This article explains the new features in Python 3.11, compared to 3.10. |
| |
| For full details, see the :ref:`changelog <changelog>`. |
| |
| .. note:: |
| |
| Prerelease users should be aware that this document is currently in draft |
| form. It will be updated substantially as Python 3.11 moves towards release, |
| so it's worth checking back even after reading earlier versions. |
| |
| |
| Summary -- Release highlights |
| ============================= |
| |
| .. This section singles out the most important changes in Python 3.11. |
| Brevity is key. |
| |
| |
| .. PEP-sized items next. |
| |
| |
| |
| New Features |
| ============ |
| |
| |
| |
| Other Language Changes |
| ====================== |
| |
| |
| |
| New Modules |
| =========== |
| |
| * None yet. |
| |
| |
| Improved Modules |
| ================ |
| |
| fractions |
| --------- |
| |
| Support :PEP:`515`-style initialization of :class:`~fractions.Fraction` from |
| string. (Contributed by Sergey B Kirpichev in :issue:`44258`.) |
| |
| |
| math |
| ---- |
| |
| Add :func:`math.cbrt()`: return the cube root of x. |
| (Contributed by Ajith Ramachandran in :issue:`44357`.) |
| |
| |
| Removed |
| ======= |
| * :class:`smtpd.MailmanProxy` is now removed as it is unusable without |
| an external module, ``mailman``. (Contributed by Dong-hee Na in :issue:`35800`.) |
| |
| |
| Optimizations |
| ============= |
| |
| * Compiler now optimizes simple C-style formatting with literal format |
| containing only format codes ``%s``, ``%r`` and ``%a`` and makes it as |
| fast as corresponding f-string expression. |
| (Contributed by Serhiy Storchaka in :issue:`28307`.) |
| |
| * "Zero-cost" exceptions are implemented. The cost of ``try`` statements is |
| almost eliminated when no exception is raised. |
| (Contributed by Mark Shannon in :issue:`40222`.) |
| |
| * Method calls with keywords are now faster due to bytecode |
| changes which avoid creating bound method instances. Previously, this |
| optimization was applied only to method calls with purely positional |
| arguments. |
| (Contributed by Ken Jin and Mark Shannon in :issue:`26110`, based on ideas |
| implemented in PyPy.) |
| |
| CPython bytecode changes |
| ======================== |
| |
| * Added a new :opcode:`CALL_METHOD_KW` opcode. Calls a method in a similar |
| fashion as :opcode:`CALL_METHOD`, but also supports keyword arguments. Works |
| in tandem with :opcode:`LOAD_METHOD`. |
| |
| |
| Build Changes |
| ============= |
| |
| |
| Deprecated |
| ========== |
| |
| |
| |
| Removed |
| ======= |
| |
| |
| |
| Porting to Python 3.11 |
| ====================== |
| |
| This section lists previously described changes and other bugfixes |
| that may require changes to your code. |
| |
| |
| C API Changes |
| ============= |
| |
| New Features |
| ------------ |
| |
| Porting to Python 3.11 |
| ---------------------- |
| |
| * The :c:func:`PyType_Ready` function now raises an error if a type is defined |
| with the :const:`Py_TPFLAGS_HAVE_GC` flag set but has no traverse function |
| (:c:member:`PyTypeObject.tp_traverse`). |
| (Contributed by Victor Stinner in :issue:`44263`.) |
| |
| Deprecated |
| ---------- |
| |
| Removed |
| ------- |
| |
| * :c:func:`PyFrame_BlockSetup` and :c:func:`PyFrame_BlockPop` have been |
| removed. |
| (Contributed by Mark Shannon in :issue:`40222`.) |
| |
| * Deprecate the following functions to configure the Python initialization: |
| |
| * :c:func:`PySys_AddWarnOptionUnicode` |
| * :c:func:`PySys_AddWarnOption` |
| * :c:func:`PySys_AddXOption` |
| * :c:func:`PySys_HasWarnOptions` |
| * :c:func:`Py_SetPath` |
| * :c:func:`Py_SetProgramName` |
| * :c:func:`Py_SetPythonHome` |
| * :c:func:`Py_SetStandardStreamEncoding` |
| * :c:func:`_Py_SetProgramFullPath` |
| |
| Use the new :c:type:`PyConfig` API of the :ref:`Python Initialization Configuration |
| <init-config>` instead (:pep:`587`). |
| (Contributed by Victor Stinner in :issue:`44113`.) |
| |
| * The following deprecated functions and methods are removed in the :mod:`gettext` |
| module: :func:`~gettext.lgettext`, :func:`~gettext.ldgettext`, |
| :func:`~gettext.lngettext` and :func:`~gettext.ldngettext`. |
| |
| Function :func:`~gettext.bind_textdomain_codeset`, methods |
| :meth:`~gettext.NullTranslations.output_charset` and |
| :meth:`~gettext.NullTranslations.set_output_charset`, and the *codeset* |
| parameter of functions :func:`~gettext.translation` and |
| :func:`~gettext.install` are also removed, since they are only used for |
| the ``l*gettext()`` functions. |
| (Contributed by Dong-hee Na and Serhiy Storchaka in :issue:`44235`.) |