]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-133879: Copyedit "What's new in Python 3.15" (#140007)
authorHugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Tue, 14 Oct 2025 10:32:55 +0000 (13:32 +0300)
committerGitHub <noreply@github.com>
Tue, 14 Oct 2025 10:32:55 +0000 (13:32 +0300)
Doc/whatsnew/3.15.rst

index 5446cd1fdabde4cef79dff4767d708a35770acd0..c5321ee9983625dc036673d43256091ae69e30ce 100644 (file)
@@ -3,7 +3,7 @@
   What's new in Python 3.15
 ****************************
 
-:Editor: TBD
+:Editor: Hugo van Kemenade
 
 .. Rules for maintenance:
 
@@ -56,8 +56,8 @@ For full details, see the :ref:`changelog <changelog>`.
    so it's worth checking back even after reading earlier versions.
 
 
-Summary --- release highlights
-==============================
+Summary -- Release highlights
+=============================
 
 .. This section singles out the most important changes in Python 3.15.
    Brevity is key.
@@ -65,6 +65,13 @@ Summary --- release highlights
 
 .. PEP-sized items next.
 
+* :pep:`799`: :ref:`A dedicated profiling package for organizing Python
+  profiling tools <whatsnew315-sampling-profiler>`
+* :pep:`686`: :ref:`Python now uses UTF-8 as the default encoding
+  <whatsnew315-utf8-default>`
+* :pep:`782`: :ref:`A new PyBytesWriter C API to create a Python bytes object
+  <whatsnew315-pep782>`
+* :ref:`Improved error messages <whatsnew315-improved-error-messages>`
 
 
 New features
@@ -72,8 +79,8 @@ New features
 
 .. _whatsnew315-sampling-profiler:
 
-High frequency statistical sampling profiler
---------------------------------------------
+:pep:`799`: High frequency statistical sampling profiler
+--------------------------------------------------------
 
 A new statistical sampling profiler has been added to the new :mod:`!profiling` module as
 :mod:`!profiling.sampling`. This profiler enables low-overhead performance analysis of
@@ -95,23 +102,33 @@ Key features include:
 * **Multiple output formats**: Generate both detailed statistics and flamegraph data
 * **Thread-aware profiling**: Option to profile all threads or just the main thread
 
-Profile process 1234 for 10 seconds with default settings::
+Profile process 1234 for 10 seconds with default settings:
+
+.. code-block:: shell
 
   python -m profiling.sampling 1234
 
-Profile with custom interval and duration, save to file::
+Profile with custom interval and duration, save to file:
+
+.. code-block:: shell
 
   python -m profiling.sampling -i 50 -d 30 -o profile.stats 1234
 
-Generate collapsed stacks for flamegraph::
+Generate collapsed stacks for flamegraph:
+
+.. code-block:: shell
 
   python -m profiling.sampling --collapsed 1234
 
-Profile all threads and sort by total time::
+Profile all threads and sort by total time:
+
+.. code-block:: shell
 
   python -m profiling.sampling -a --sort-tottime 1234
 
-The profiler generates statistical estimates of where time is spent::
+The profiler generates statistical estimates of where time is spent:
+
+.. code-block:: text
 
   Real-time sampling stats: Mean: 100261.5Hz (9.97µs) Min: 86333.4Hz (11.58µs) Max: 118807.2Hz (8.42µs) Samples: 400001
   Captured 498841 samples in 5.00 seconds
@@ -166,9 +183,13 @@ analysis, highlighting functions with high CPU usage and call frequency patterns
 This capability is particularly valuable for debugging performance issues in
 production systems where traditional profiling approaches would be too intrusive.
 
+  .. seealso:: :pep:`799` for further details.
+
 (Contributed by Pablo Galindo and László Kiss Kollár in :gh:`135953`.)
 
 
+.. _whatsnew315-improved-error-messages:
+
 Improved error messages
 -----------------------
 
@@ -211,9 +232,11 @@ Improved error messages
 Other language changes
 ======================
 
+.. _whatsnew315-utf8-default:
+
 * Python now uses UTF-8_ as the default encoding, independent of the system's
   environment. This means that I/O operations without an explicit encoding,
-  e.g. ``open('flying-circus.txt')``, will use UTF-8.
+  for example, ``open('flying-circus.txt')``, will use UTF-8.
   UTF-8 is a widely-supported Unicode_ character encoding that has become a
   *de facto* standard for representing text, including nearly every webpage
   on the internet, many common file formats, programming languages, and more.
@@ -227,7 +250,7 @@ Other language changes
 
   To retain the previous behaviour, Python's UTF-8 mode may be disabled with
   the :envvar:`PYTHONUTF8=0 <PYTHONUTF8>` environment variable or the
-  :option:`-X utf8=0 <-X>` command line option.
+  :option:`-X utf8=0 <-X>` command-line option.
 
   .. seealso:: :pep:`686` for further details.
 
@@ -386,7 +409,7 @@ locale
 ------
 
 * :func:`~locale.setlocale` now supports language codes with ``@``-modifiers.
-  ``@``-modifier are no longer silently removed in :func:`~locale.getlocale`,
+  ``@``-modifiers are no longer silently removed in :func:`~locale.getlocale`,
   but included in the language code.
   (Contributed by Serhiy Storchaka in :gh:`137729`.)
 
@@ -610,71 +633,6 @@ module_name
 
 
 
-Deprecated
-==========
-
-CLI
----
-
-* Deprecate :option:`-b` and :option:`!-bb` command line options
-  and schedule them to become no-op in Python 3.17.
-  These were primarily helpers for the Python 2 -> 3 transition.
-  Starting with Python 3.17, no :exc:`BytesWarning` will be raised
-  for these cases; use a type checker instead.
-
-  (Contributed by Nikita Sobolev in :gh:`136355`.)
-
-hashlib
--------
-
-* In hash function constructors such as :func:`~hashlib.new` or the
-  direct hash-named constructors such as :func:`~hashlib.md5` and
-  :func:`~hashlib.sha256`, their optional initial data parameter could
-  also be passed a keyword argument named ``data=`` or ``string=`` in
-  various :mod:`hashlib` implementations.
-
-  Support for the ``string`` keyword argument name is now deprecated and
-  is slated for removal in Python 3.19. Prefer passing the initial data as
-  a positional argument for maximum backwards compatibility.
-
-  (Contributed by Bénédikt Tran in :gh:`134978`.)
-
-__version__
------------
-
-* The ``__version__`` attribute has been deprecated in these standard library
-  modules and will be removed in Python 3.20.
-  Use :py:data:`sys.version_info` instead.
-
-  - :mod:`argparse`
-  - :mod:`csv`
-  - :mod:`!ctypes.macholib`
-  - :mod:`ipaddress`
-  - :mod:`json`
-  - :mod:`logging` (``__date__`` also deprecated)
-  - :mod:`optparse`
-  - :mod:`pickle`
-  - :mod:`platform`
-  - :mod:`re`
-  - :mod:`socketserver`
-  - :mod:`tabnanny`
-  - :mod:`tkinter.font`
-  - :mod:`tkinter.ttk`
-
-  (Contributed by Hugo van Kemenade in :gh:`76007`.)
-
-.. Add deprecations above alphabetically, not here at the end.
-
-.. include:: ../deprecations/pending-removal-in-3.16.rst
-
-.. include:: ../deprecations/pending-removal-in-3.17.rst
-
-.. include:: ../deprecations/pending-removal-in-3.19.rst
-
-.. include:: ../deprecations/pending-removal-in-3.20.rst
-
-.. include:: ../deprecations/pending-removal-in-future.rst
-
 Removed
 =======
 
@@ -712,6 +670,12 @@ importlib.resources
   (Contributed by Semyon Moroz in :gh:`138044`)
 
 
+mimetypes
+---------
+
+* Add ``application/toml``. (Contributed by Gil Forcada in :gh:`139959`.)
+
+
 pathlib
 -------
 
@@ -772,7 +736,7 @@ typing
 
 * Code like ``class B2(A[T2], Protocol[T1, T2]): ...`` now correctly handles
   type parameters order: it is ``(T1, T2)``, not ``(T2, T1)``
-  as it was incorrectly infered in runtime before.
+  as it was incorrectly inferred in runtime before.
   (Contributed by Nikita Sobolev in :gh:`137191`.)
 
 * :class:`typing.ByteString` has been removed from ``typing.__all__``.
@@ -814,20 +778,70 @@ zipimport
   (Contributed by Jiahao Li in :gh:`133656`.)
 
 
-Porting to Python 3.15
-======================
+Deprecated
+==========
 
-This section lists previously described changes and other bugfixes
-that may require changes to your code.
+New deprecations
+----------------
 
+* CLI:
 
-Build changes
-=============
+  * Deprecate :option:`-b` and :option:`!-bb` command-line options
+    and schedule them to become no-op in Python 3.17.
+    These were primarily helpers for the Python 2 -> 3 transition.
+    Starting with Python 3.17, no :exc:`BytesWarning` will be raised
+    for these cases; use a type checker instead.
 
-* Removed implicit fallback to the bundled copy of the ``libmpdec`` library.
-  Now this should be explicitly enabled with :option:`--with-system-libmpdec`
-  set to ``no`` or with :option:`!--without-system-libmpdec`.
-  (Contributed by Sergey B Kirpichev in :gh:`115119`.)
+    (Contributed by Nikita Sobolev in :gh:`136355`.)
+
+* :mod:`hashlib`:
+
+  * In hash function constructors such as :func:`~hashlib.new` or the
+    direct hash-named constructors such as :func:`~hashlib.md5` and
+    :func:`~hashlib.sha256`, their optional initial data parameter could
+    also be passed a keyword argument named ``data=`` or ``string=`` in
+    various :mod:`hashlib` implementations.
+
+    Support for the ``string`` keyword argument name is now deprecated and
+    is slated for removal in Python 3.19. Prefer passing the initial data as
+    a positional argument for maximum backwards compatibility.
+
+    (Contributed by Bénédikt Tran in :gh:`134978`.)
+
+* ``__version__``
+
+  * The ``__version__`` attribute has been deprecated in these standard library
+    modules and will be removed in Python 3.20.
+    Use :py:data:`sys.version_info` instead.
+
+    - :mod:`argparse`
+    - :mod:`csv`
+    - :mod:`!ctypes.macholib`
+    - :mod:`ipaddress`
+    - :mod:`json`
+    - :mod:`logging` (``__date__`` also deprecated)
+    - :mod:`optparse`
+    - :mod:`pickle`
+    - :mod:`platform`
+    - :mod:`re`
+    - :mod:`socketserver`
+    - :mod:`tabnanny`
+    - :mod:`tkinter.font`
+    - :mod:`tkinter.ttk`
+
+    (Contributed by Hugo van Kemenade in :gh:`76007`.)
+
+.. Add deprecations above alphabetically, not here at the end.
+
+.. include:: ../deprecations/pending-removal-in-3.16.rst
+
+.. include:: ../deprecations/pending-removal-in-3.17.rst
+
+.. include:: ../deprecations/pending-removal-in-3.19.rst
+
+.. include:: ../deprecations/pending-removal-in-3.20.rst
+
+.. include:: ../deprecations/pending-removal-in-future.rst
 
 
 C API changes
@@ -850,6 +864,8 @@ New features
   and :c:data:`Py_mod_abi`.
   (Contributed by Petr Viktorin in :gh:`137210`.)
 
+.. _whatsnew315-pep782:
+
 * Implement :pep:`782`, the :ref:`PyBytesWriter API <pybyteswriter>`.
   Add functions:
 
@@ -901,39 +917,6 @@ Porting to Python 3.15
   underlying syscall, instead of raising a :exc:`SystemError`.
 
 
-Deprecated C APIs
------------------
-
-* For unsigned integer formats in :c:func:`PyArg_ParseTuple`,
-  accepting Python integers with value that is larger than the maximal value
-  for the C type or less than the minimal value for the corresponding
-  signed integer type of the same size is now deprecated.
-  (Contributed by Serhiy Storchaka in :gh:`132629`.)
-
-* :c:func:`PyBytes_FromStringAndSize(NULL, len) <PyBytes_FromStringAndSize>`
-  and :c:func:`_PyBytes_Resize` are :term:`soft deprecated`,
-  use the :c:type:`PyBytesWriter` API instead.
-  (Contributed by Victor Stinner in :gh:`129813`.)
-
-* Deprecate :c:member:`~PyComplexObject.cval` field of the the
-  :c:type:`PyComplexObject` type.
-  Use :c:func:`PyComplex_AsCComplex` and :c:func:`PyComplex_FromCComplex`
-  to convert a Python complex number to/from the C :c:type:`Py_complex`
-  representation.
-  (Contributed by Sergey B Kirpichev in :gh:`128813`.)
-
-* Functions :c:func:`_Py_c_sum`, :c:func:`_Py_c_diff`, :c:func:`_Py_c_neg`,
-  :c:func:`_Py_c_prod`, :c:func:`_Py_c_quot`, :c:func:`_Py_c_pow` and
-  :c:func:`_Py_c_abs` are :term:`soft deprecated`.
-  (Contributed by Sergey B Kirpichev in :gh:`128813`.)
-
-* :c:member:`~PyConfig.bytes_warning` is deprecated
-  since 3.15 and will be removed in 3.17.
-  (Contributed by Nikita Sobolev in :gh:`136355`.)
-
-
-.. Add C API deprecations above alphabetically, not here at the end.
-
 Removed C APIs
 --------------
 
@@ -1002,3 +985,53 @@ on Python 3.13 and older.
 .. |pythoncapi_compat_project| replace:: |pythoncapi_compat_project_link|_
 .. |pythoncapi_compat_project_link| replace:: pythoncapi-compat project
 .. _pythoncapi_compat_project_link: https://github.com/python/pythoncapi-compat
+
+
+Deprecated C APIs
+-----------------
+
+* For unsigned integer formats in :c:func:`PyArg_ParseTuple`,
+  accepting Python integers with value that is larger than the maximal value
+  for the C type or less than the minimal value for the corresponding
+  signed integer type of the same size is now deprecated.
+  (Contributed by Serhiy Storchaka in :gh:`132629`.)
+
+* :c:func:`PyBytes_FromStringAndSize(NULL, len) <PyBytes_FromStringAndSize>`
+  and :c:func:`_PyBytes_Resize` are :term:`soft deprecated`,
+  use the :c:type:`PyBytesWriter` API instead.
+  (Contributed by Victor Stinner in :gh:`129813`.)
+
+* Deprecate :c:member:`~PyComplexObject.cval` field of the the
+  :c:type:`PyComplexObject` type.
+  Use :c:func:`PyComplex_AsCComplex` and :c:func:`PyComplex_FromCComplex`
+  to convert a Python complex number to/from the C :c:type:`Py_complex`
+  representation.
+  (Contributed by Sergey B Kirpichev in :gh:`128813`.)
+
+* Functions :c:func:`_Py_c_sum`, :c:func:`_Py_c_diff`, :c:func:`_Py_c_neg`,
+  :c:func:`_Py_c_prod`, :c:func:`_Py_c_quot`, :c:func:`_Py_c_pow` and
+  :c:func:`_Py_c_abs` are :term:`soft deprecated`.
+  (Contributed by Sergey B Kirpichev in :gh:`128813`.)
+
+* :c:member:`~PyConfig.bytes_warning` is deprecated
+  since 3.15 and will be removed in 3.17.
+  (Contributed by Nikita Sobolev in :gh:`136355`.)
+
+
+.. Add C API deprecations above alphabetically, not here at the end.
+
+
+Build changes
+=============
+
+* Removed implicit fallback to the bundled copy of the ``libmpdec`` library.
+  Now this should be explicitly enabled with :option:`--with-system-libmpdec`
+  set to ``no`` or with :option:`!--without-system-libmpdec`.
+  (Contributed by Sergey B Kirpichev in :gh:`115119`.)
+
+
+Porting to Python 3.15
+======================
+
+This section lists previously described changes and other bugfixes
+that may require changes to your code.