Skip to content

Commit 6001dea

Browse files
miss-islingtonAA-Turnerhugovk
authored
[3.13] GH-109975: Copyedit 3.13 What's New: Other Language Changes (GH-123086) (#123101)
GH-109975: Copyedit 3.13 What's New: Other Language Changes (GH-123086) (cherry picked from commit d60b97a) Co-authored-by: Adam Turner <[email protected]> Co-authored-by: Hugo van Kemenade <[email protected]>
1 parent 8d95102 commit 6001dea

File tree

1 file changed

+156
-102
lines changed

1 file changed

+156
-102
lines changed

Doc/whatsnew/3.13.rst

+156-102
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ Windows support contributed by Dino Viehland and Anthony Shaw.)
242242

243243
.. _`PyPy project`: https://pypy.org/
244244

245+
245246
.. _whatsnew313-improved-error-messages:
246247

247248
Improved error messages
@@ -492,138 +493,123 @@ Incremental garbage collection
492493
The cycle garbage collector is now incremental.
493494
This means that maximum pause times are reduced
494495
by an order of magnitude or more for larger heaps.
496+
(Contributed by Mark Shannon in :gh:`108362`.)
495497

496498

497499
Other Language Changes
498500
======================
499501

500-
* Classes have a new :attr:`~class.__static_attributes__` attribute, populated by the compiler,
501-
with a tuple of names of attributes of this class which are assigned
502-
through ``self.X`` from any function in its body. (Contributed by Irit Katriel
503-
in :gh:`115775`.)
502+
* The compiler now strips common common leading whitespace
503+
from every line in a docstring.
504+
This reduces the size of the :term:`bytecode cache <bytecode>`
505+
(such as ``.pyc`` files), with reductions in file size of around 5%,
506+
for example in :mod:`!sqlalchemy.orm.session` from SQLAlchemy 2.0.
507+
This change affects tools that use docstrings, such as :mod:`doctest`.
508+
509+
.. doctest::
510+
511+
>>> def spam():
512+
... """
513+
... This is a docstring with
514+
... leading whitespace.
515+
...
516+
... It even has multiple paragraphs!
517+
... """
518+
...
519+
>>> spam.__doc__
520+
'\nThis is a docstring with\n leading whitespace.\n\nIt even has multiple paragraphs!\n'
504521

505-
* The :func:`exec` and :func:`eval` built-ins now accept their ``globals``
506-
and ``locals`` namespace arguments as keywords.
507-
(Contributed by Raphael Gaschignard in :gh:`105879`)
522+
(Contributed by Inada Naoki in :gh:`81283`.)
508523

509-
* Allow the *count* argument of :meth:`str.replace` to be a keyword.
510-
(Contributed by Hugo van Kemenade in :gh:`106487`.)
524+
* :ref:`Annotation scopes <annotation-scopes>` within class scopes
525+
can now contain lambdas and comprehensions.
526+
Comprehensions that are located within class scopes
527+
are not inlined into their parent scope.
511528

512-
* Compiler now strip indents from docstrings.
513-
This will reduce the size of :term:`bytecode cache <bytecode>` (e.g. ``.pyc`` file).
514-
For example, cache file size for ``sqlalchemy.orm.session`` in SQLAlchemy 2.0
515-
is reduced by about 5%.
516-
This change will affect tools using docstrings, like :mod:`doctest`.
517-
(Contributed by Inada Naoki in :gh:`81283`.)
529+
.. code-block:: python
518530
519-
* The :func:`compile` built-in can now accept a new flag,
520-
``ast.PyCF_OPTIMIZED_AST``, which is similar to ``ast.PyCF_ONLY_AST``
521-
except that the returned ``AST`` is optimized according to the value
522-
of the ``optimize`` argument.
523-
(Contributed by Irit Katriel in :gh:`108113`).
531+
class C[T]:
532+
type Alias = lambda: T
524533
525-
* :mod:`multiprocessing`, :mod:`concurrent.futures`, :mod:`compileall`:
526-
Replace :func:`os.cpu_count` with :func:`os.process_cpu_count` to select the
527-
default number of worker threads and processes. Get the CPU affinity
528-
if supported.
529-
(Contributed by Victor Stinner in :gh:`109649`.)
534+
(Contributed by Jelle Zijlstra in :gh:`109118` and :gh:`118160`.)
530535

531-
* :func:`os.path.realpath` now resolves MS-DOS style file names even if
532-
the file is not accessible.
533-
(Contributed by Moonsik Park in :gh:`82367`.)
536+
* :ref:`Future statements <future>` are no longer triggered by
537+
relative imports of the :mod:`__future__` module,
538+
meaning that statements of the form ``from .__future__ import ...``
539+
are now simply standard relative imports, with no special features activated.
540+
(Contributed by Jeremiah Gabriel Pascual in :gh:`118216`.)
534541

535-
* Fixed a bug where a :keyword:`global` declaration in an :keyword:`except` block
536-
is rejected when the global is used in the :keyword:`else` block.
542+
* :keyword:`global` declarations are now permitted in :keyword:`except` blocks
543+
when that global is used in the :keyword:`else` block.
544+
Previously this raised an erroneous :exc:`SyntaxError`.
537545
(Contributed by Irit Katriel in :gh:`111123`.)
538546

539-
* Many functions now emit a warning if a boolean value is passed as
540-
a file descriptor argument.
541-
This can help catch some errors earlier.
542-
(Contributed by Serhiy Storchaka in :gh:`82626`.)
543-
544-
* Added a new environment variable :envvar:`PYTHON_FROZEN_MODULES`. It
545-
determines whether or not frozen modules are ignored by the import machinery,
546-
equivalent of the :option:`-X frozen_modules <-X>` command-line option.
547+
* Add :envvar:`PYTHON_FROZEN_MODULES`, a new environment variable that
548+
determines whether frozen modules are ignored by the import machinery,
549+
equivalent to the :option:`-X frozen_modules <-X>` command-line option.
547550
(Contributed by Yilei Yang in :gh:`111374`.)
548551

549-
* Add :ref:`support for the perf profiler <perf_profiling>` working without
550-
frame pointers through the new environment variable
551-
:envvar:`PYTHON_PERF_JIT_SUPPORT` and command-line option :option:`-X perf_jit
552-
<-X>` (Contributed by Pablo Galindo in :gh:`118518`.)
553-
554-
* The new :envvar:`PYTHON_HISTORY` environment variable can be used to change
555-
the location of a ``.python_history`` file.
556-
(Contributed by Levi Sabah, Zackery Spytz and Hugo van Kemenade in
557-
:gh:`73965`.)
558-
559-
* Add :exc:`PythonFinalizationError` exception. This exception derived from
560-
:exc:`RuntimeError` is raised when an operation is blocked during
561-
the :term:`Python finalization <interpreter shutdown>`.
562-
563-
The following functions now raise PythonFinalizationError, instead of
564-
:exc:`RuntimeError`:
565-
566-
* :func:`_thread.start_new_thread`.
567-
* :class:`subprocess.Popen`.
568-
* :func:`os.fork`.
569-
* :func:`os.forkpty`.
570-
571-
(Contributed by Victor Stinner in :gh:`114570`.)
572-
573-
* Added :attr:`!name` and :attr:`!mode` attributes for compressed
574-
and archived file-like objects in modules :mod:`bz2`, :mod:`lzma`,
575-
:mod:`tarfile` and :mod:`zipfile`.
576-
(Contributed by Serhiy Storchaka in :gh:`115961`.)
577-
578-
* Allow controlling Expat >=2.6.0 reparse deferral (:cve:`2023-52425`)
579-
by adding five new methods:
552+
* Add :ref:`support for the perf profiler <perf_profiling>` working
553+
without `frame pointers <https://en.wikipedia.org/wiki/Call_stack>`_ through
554+
the new environment variable :envvar:`PYTHON_PERF_JIT_SUPPORT`
555+
and command-line option :option:`-X perf_jit <-X>`.
556+
(Contributed by Pablo Galindo in :gh:`118518`.)
580557

581-
* :meth:`xml.etree.ElementTree.XMLParser.flush`
582-
* :meth:`xml.etree.ElementTree.XMLPullParser.flush`
583-
* :meth:`xml.parsers.expat.xmlparser.GetReparseDeferralEnabled`
584-
* :meth:`xml.parsers.expat.xmlparser.SetReparseDeferralEnabled`
585-
* :meth:`!xml.sax.expatreader.ExpatParser.flush`
558+
* The location of a :file:`.python_history` file can be changed via the
559+
new :envvar:`PYTHON_HISTORY` environment variable.
560+
(Contributed by Levi Sabah, Zackery Spytz and Hugo van Kemenade
561+
in :gh:`73965`.)
586562

587-
(Contributed by Sebastian Pipping in :gh:`115623`.)
563+
* Classes have a new :attr:`~class.__static_attributes__` attribute.
564+
This is populated by the compiler with a tuple of the class's attribute names
565+
which are assigned through ``self.<name>`` from any function in its body.
566+
(Contributed by Irit Katriel in :gh:`115775`.)
588567

589-
* The :func:`ssl.create_default_context` API now includes
590-
:data:`ssl.VERIFY_X509_PARTIAL_CHAIN` and :data:`ssl.VERIFY_X509_STRICT`
591-
in its default flags.
568+
* The compiler now creates a :attr:`!__firstlineno__` attribute on classes
569+
with the line number of the first line of the class definition.
570+
(Contributed by Serhiy Storchaka in :gh:`118465`.)
592571

593-
.. note::
572+
* The :func:`exec` and :func:`eval` builtins now accept
573+
the *globals* and *locals* arguments as keywords.
574+
(Contributed by Raphael Gaschignard in :gh:`105879`)
594575

595-
:data:`ssl.VERIFY_X509_STRICT` may reject pre-:rfc:`5280` or malformed
596-
certificates that the underlying OpenSSL implementation otherwise would
597-
accept. While disabling this is not recommended, you can do so using::
576+
* The :func:`compile` builtin now accepts a new flag,
577+
``ast.PyCF_OPTIMIZED_AST``, which is similar to ``ast.PyCF_ONLY_AST``
578+
except that the returned AST is optimized according to
579+
the value of the *optimize* argument.
580+
(Contributed by Irit Katriel in :gh:`108113`).
598581

599-
ctx = ssl.create_default_context()
600-
ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT
582+
* Add :exc:`PythonFinalizationError`, a new exception derived from
583+
:exc:`RuntimeError` and used to signal when operations are blocked
584+
during :term:`finalization <interpreter shutdown>`.
585+
The following callables now raise :exc:`!PythonFinalizationError`,
586+
instead of :exc:`RuntimeError`:
601587

602-
(Contributed by William Woodruff in :gh:`112389`.)
588+
* :func:`_thread.start_new_thread`
589+
* :func:`os.fork`
590+
* :func:`os.forkpty`
591+
* :class:`subprocess.Popen`
603592

604-
* The :class:`configparser.ConfigParser` now accepts unnamed sections before named
605-
ones if configured to do so.
606-
(Contributed by Pedro Sousa Lacerda in :gh:`66449`.)
593+
(Contributed by Victor Stinner in :gh:`114570`.)
607594

608-
* :ref:`annotation scope <annotation-scopes>` within class scopes can now
609-
contain lambdas and comprehensions. Comprehensions that are located within
610-
class scopes are not inlined into their parent scope. (Contributed by
611-
Jelle Zijlstra in :gh:`109118` and :gh:`118160`.)
595+
* Allow the *count* argument of :meth:`str.replace` to be a keyword.
596+
(Contributed by Hugo van Kemenade in :gh:`106487`.)
612597

613-
* Classes have a new :attr:`!__firstlineno__` attribute,
614-
populated by the compiler, with the line number of the first line
615-
of the class definition.
616-
(Contributed by Serhiy Storchaka in :gh:`118465`.)
598+
* Many functions now emit a warning if a boolean value is passed as
599+
a file descriptor argument.
600+
This can help catch some errors earlier.
601+
(Contributed by Serhiy Storchaka in :gh:`82626`.)
617602

618-
* ``from __future__ import ...`` statements are now just normal
619-
relative imports if dots are present before the module name.
620-
(Contributed by Jeremiah Gabriel Pascual in :gh:`118216`.)
603+
* Added :attr:`!name` and :attr:`!mode` attributes
604+
for compressed and archived file-like objects in
605+
the :mod:`bz2`, :mod:`lzma`, :mod:`tarfile`, and :mod:`zipfile` modules.
606+
(Contributed by Serhiy Storchaka in :gh:`115961`.)
621607

622608

623609
New Modules
624610
===========
625611

626-
* :mod:`dbm.sqlite3`: SQLite backend for :mod:`dbm`.
612+
* :mod:`dbm.sqlite3`: An SQLite backend for :mod:`dbm`.
627613
(Contributed by Raymond Hettinger and Erlend E. Aasland in :gh:`100414`.)
628614

629615

@@ -748,6 +734,23 @@ base64
748734
See the `Z85 specification <https://rfc.zeromq.org/spec/32/>`_ for more information.
749735
(Contributed by Matan Perelman in :gh:`75299`.)
750736

737+
738+
compileall
739+
----------
740+
741+
* Select the default number of worker threads and processes using
742+
:func:`os.process_cpu_count` instead of :func:`os.cpu_count`.
743+
(Contributed by Victor Stinner in :gh:`109649`.)
744+
745+
746+
concurrent.futures
747+
------------------
748+
749+
* Select the default number of worker threads and processes using
750+
:func:`os.process_cpu_count` instead of :func:`os.cpu_count`.
751+
(Contributed by Victor Stinner in :gh:`109649`.)
752+
753+
751754
copy
752755
----
753756

@@ -953,6 +956,15 @@ mmap
953956
is inaccessible due to file system errors or access violations.
954957
(Contributed by Jannis Weigend in :gh:`118209`.)
955958

959+
960+
multiprocessing
961+
---------------
962+
963+
* Select the default number of worker threads and processes using
964+
:func:`os.process_cpu_count` instead of :func:`os.cpu_count`.
965+
(Contributed by Victor Stinner in :gh:`109649`.)
966+
967+
956968
opcode
957969
------
958970

@@ -1017,10 +1029,15 @@ os.path
10171029
* Add :func:`os.path.isreserved` to check if a path is reserved on the current
10181030
system. This function is only available on Windows.
10191031
(Contributed by Barney Gale in :gh:`88569`.)
1032+
10201033
* On Windows, :func:`os.path.isabs` no longer considers paths starting with
10211034
exactly one (back)slash to be absolute.
10221035
(Contributed by Barney Gale and Jon Foster in :gh:`44626`.)
10231036

1037+
* :func:`os.path.realpath` now resolves MS-DOS style file names even if
1038+
the file is not accessible.
1039+
(Contributed by Moonsik Park in :gh:`82367`.)
1040+
10241041
* Add support of *dir_fd* and *follow_symlinks* keyword arguments in
10251042
:func:`shutil.chown`.
10261043
(Contributed by Berker Peksag and Tahia K in :gh:`62308`)
@@ -1120,6 +1137,26 @@ sqlite3
11201137
for filtering database objects to dump.
11211138
(Contributed by Mariusz Felisiak in :gh:`91602`.)
11221139

1140+
1141+
ssl
1142+
---
1143+
1144+
* The :func:`ssl.create_default_context` API now includes
1145+
:data:`ssl.VERIFY_X509_PARTIAL_CHAIN` and :data:`ssl.VERIFY_X509_STRICT`
1146+
in its default flags.
1147+
1148+
.. note::
1149+
1150+
:data:`ssl.VERIFY_X509_STRICT` may reject pre-:rfc:`5280` or malformed
1151+
certificates that the underlying OpenSSL implementation otherwise would
1152+
accept. While disabling this is not recommended, you can do so using::
1153+
1154+
ctx = ssl.create_default_context()
1155+
ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT
1156+
1157+
(Contributed by William Woodruff in :gh:`112389`.)
1158+
1159+
11231160
statistics
11241161
----------
11251162

@@ -1285,13 +1322,26 @@ warnings
12851322
warning may also be emitted when a decorated function or class is used at runtime.
12861323
See :pep:`702`. (Contributed by Jelle Zijlstra in :gh:`104003`.)
12871324

1288-
xml.etree.ElementTree
1289-
---------------------
1325+
1326+
xml
1327+
---
1328+
1329+
* Allow controlling Expat >=2.6.0 reparse deferral (:cve:`2023-52425`)
1330+
by adding five new methods:
1331+
1332+
* :meth:`xml.etree.ElementTree.XMLParser.flush`
1333+
* :meth:`xml.etree.ElementTree.XMLPullParser.flush`
1334+
* :meth:`xml.parsers.expat.xmlparser.GetReparseDeferralEnabled`
1335+
* :meth:`xml.parsers.expat.xmlparser.SetReparseDeferralEnabled`
1336+
* :meth:`!xml.sax.expatreader.ExpatParser.flush`
1337+
1338+
(Contributed by Sebastian Pipping in :gh:`115623`.)
12901339

12911340
* Add the :meth:`!close` method for the iterator returned by
12921341
:func:`~xml.etree.ElementTree.iterparse` for explicit cleaning up.
12931342
(Contributed by Serhiy Storchaka in :gh:`69893`.)
12941343

1344+
12951345
zipimport
12961346
---------
12971347

@@ -1447,6 +1497,10 @@ PEP 594: dead batteries (and other module removals)
14471497
configparser
14481498
------------
14491499

1500+
* The :class:`configparser.ConfigParser` now accepts unnamed sections
1501+
before named ones if configured to do so.
1502+
(Contributed by Pedro Sousa Lacerda in :gh:`66449`.)
1503+
14501504
* Remove the undocumented :class:`!configparser.LegacyInterpolation` class,
14511505
deprecated in the docstring since Python 3.2,
14521506
and with a deprecation warning since Python 3.11.

0 commit comments

Comments
 (0)