r/Python Oct 07 '24

News Python 3.13 released

https://www.python.org/downloads/release/python-3130/

This is the stable release of Python 3.13.0

Python 3.13.0 is the newest major release of the Python programming language, and it contains many new features and optimizations compared to Python 3.12. (Compared to the last release candidate, 3.13.0rc3, 3.13.0 contains two small bug and some documentation and testing changes.)

Major new features of the 3.13 series, compared to 3.12

Some of the new major new features and changes in Python 3.13 are:

New features

  • A new and improved interactive interpreter, based on PyPy's, featuring multi-line editing and color support, as well as colorized exception tracebacks.
  • An experimental free-threaded build mode, which disables the Global Interpreter Lock, allowing threads to run more concurrently. The build mode is available as an experimental feature in the Windows and macOS installers as well.
  • A preliminary, experimental JIT, providing the ground work for significant performance improvements.
  • The locals() builtin function (and its C equivalent) now has well-defined semantics when mutating the returned mapping, which allows debuggers to operate more consistently.
  • A modified version of mimalloc is now included, optional but enabled by default if supported by the platform, and required for the free-threaded build mode.
  • Docstrings now have their leading indentation stripped, reducing memory use and the size of .pyc files. (Most tools handling docstrings already strip leading indentation.)
  • The dbm module has a new dbm.sqlite3 backend that is used by default when creating new files.
  • The minimum supported macOS version was changed from 10.9 to 10.13 (High Sierra). Older macOS versions will not be supported going forward.
  • WASI is now a Tier 2 supported platform. Emscripten is no longer an officially supported platform (but Pyodide continues to support Emscripten).
  • iOS is now a Tier 3 supported platform.
  • Android is now a Tier 3 supported platform.

Typing

  • Support for type defaults in type parameters.
  • A new type narrowing annotation, typing.TypeIs.
  • A new annotation for read-only items in TypeDicts.
  • A new annotation for marking deprecations in the type system.

Removals and new deprecations

  • PEP 594 (Removing dead batteries from the standard library) scheduled removals of many deprecated modules: aifc, audioop, chunk, cgi, cgitb, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu, xdrlib, lib2to3.
  • Many other removals of deprecated classes, functions and methods in various standard library modules.
  • C API removals and deprecations. (Some removals present in alpha 1 were reverted in alpha 2, as the removals were deemed too disruptive at this time.)
  • New deprecations, most of which are scheduled for removal from Python 3.15 or 3.16.

More details at https://docs.python.org/3.13/whatsnew/3.13.html

620 Upvotes

97 comments sorted by

View all comments

16

u/spidLL Oct 07 '24

Is there a list of the libraries supporting the no GIL mode? Or for the moment it’s safe to assume none does.

17

u/james_pic Oct 07 '24 edited Oct 07 '24

It's unlikely there are any with official support, and last I heard the packaging authority hadn't yet agreed a way for libraries to signal support on PyPI.

In terms of what will happen if you just install them and run them with a free threaded interpreters anyway:

Pure Python modules will run in no-GIL mode and in theory they should Just Work. The GIL offered few usable guarantees to pure Python code. The only usable guarantee it offered was linearizability (which it still does guarantee), so any pure Python code that breaks in no-GIL mode probably has a bug without it too (albeit a bug that would be triggered much less frequently, or that might not be triggerable on Python 3.10 or above due changes to which opcodes are GIL release points). In practice, it's experimental and there will be teething issues even with pure Python code. 

Libraries with native code will run in "with GIL" mode unless their binaries flag that they're no-GIL compatible. Native code was able to rely on the GIL more strongly than pure Python code, so it's required to explicitly opt out of the GIL.