Python 3.15 arrives with a JIT that's 11–12% faster on macOS

Python 3.15.0

Python 3.15.0 is out, with 5,643 commits from 1,012 contributors. Highlights include an upgraded experimental JIT compiler (7–8% faster on x86-64 Linux, 11–12% on AArch64 macOS), UTF-8 as the default encoding, new sentinel and frozendict built-in types, explicit lazy imports, a dedicated profiling package with the Tachyon sampling profiler, and typing improvements like TypedDict with typed extra items. Windows 64-bit binaries now use the tail-calling interpreter, and macOS binaries install free-threading by default.

You wake up in the Startup Foyer, somewhere inside the interpreter, and work your way to the Release Gate. Along the way there are eighteen puzzles, and every one of them is a real 3.15 feature you have to actually use.
  1. simonw

    As a maintainer of a whole bunch of open source Python libraries, my favorite thing about a new Python release is that it signifies the end of support for an older one. In this case that's Python 3.10... which means that my libraries that aim to support every current Python version can finally start embracing features from Python 3.11!

    Here's the "what's new in Python 3.11" document: https://docs.python.org/3/whatsnew/3.11.html

  2. ngoldbaum

    My headline feature is the new “abi3t” stable ABI for the free-threaded build. While Petr Viktorin did most of the CPython implementation, I’ve been trying to make sure ecosystem support is ready. It’s been a rewarding but quite challenging project to make sure everything is working. There were some late nights leading up to the beta1 release when we found a Windows-specific issue that needed a fix.

    I’m particularly proud that the cryptography project is already shipping a single abi3.abi3t wheel for each platform on Python 3.15 or newer. The GIL-enabled build and free-threaded build can both use the same wheel now, because PyObject is opaque.

    If you want to learn more about this, I gave a talk at EuroPython this year on Python’s ABI and the road to building and releasing abi3t today. See https://youtu.be/An8lO29SxXE.

  3. zahlman

    The XZ-compressed source tarball is about half again as large as the one for 3.14. What happened?

    Edit: Digging in a bit, a lot of things are slightly bigger overall as you'd expect; but notably the documentation folder has gained two animated GIFs totaling over 10MB (which presumably don't compress too much further even with XZ) demonstrating "tachyon" (which presumably refers to the new sampling profiler, https://docs.python.org/3.15/library/profiling.sampling.html ). These seem to be screen captures from terminal sessions, which work well enough to illustrate what a TUI looks like, but are probably not all that informative about how to use it. I would have much preferred SVG diagrams based around static screenshots.

  4. wg0

    This might irk many but going forward, I see only following languages surviving:

    1. Typescript + Javascript

    2. Rust.

    3. Python - because of data science and interactive apps.

    Basically, everything that can be rewritten in Rust with or without AI will be rewritten in Rust with or without AI in coming decade.

    Famous cases:

    1. Some backends at 37 signals from Ruby to Rust.

    2. Bun from Zig to Rust.

    3. Git in transition.

    4. Mold linker from C to Rust.

    5. Biome

    6. TailwindCSS CLI

    And much much more. Even Python interpreter is in process of using Rust as the main language if I am not wrong.

    [0]. https://github.com/kevincouton/awesome-rust-migrations#1

  5. kbumsik

    > PEP 810: Explicit lazy imports for faster startup times

    Yes lazy import! Finally!

More from this day

2026-10-09