The Python programming language expected the new version 3.15.0a8 to come with this changelog and release date: XXXX-XX-XX.
Major features and changes
1. Interpreter and JIT optimizations
- Much improved JIT with optimizations for int, float, list, and tuple operations.
- Reduces redundant reference counting and adds new specializations (for example for enum.Enum and concatenations).
- Supports unwinding JIT frames in GDB and GNU backtrace, and sets frame pointers for better profiling.
- Free-threading improvements remove bottlenecks in sys.intern(), PyObject_SetAttr(), PyMutex, and PyDict_Watch(), improving multi-thread scaling.
- Garbage collector returns to generational GC as the default and exposes new APIs for external GC monitoring.
- Runtime optimizations reduce stack usage and fix O(N²) behavior in constant folding, and speed up yield from, bytes.replace(), and memoryview.cast().
2. Security hardening
- Updates bundled cryptography libraries (for example newer OpenSSL versions in some builds).
- Fixes path traversal issues in shutil.unpack_archive().
- Hardens remote debugging related code paths.
- Addresses crashes and recursion issues in xml.parsers.expat.
- Adds stricter validation in http.cookies, webbrowser, configparser, and related modules.
- Introduces tighter limits for TOML keys and canonical Base64 handling.
3. Standard library enhancements
- Command-line tools like argparse, pdb, regrtest, pickletools, tokenize, calendar, timeit, and http.server gain extended colorized output.
- The inspect command-line interface is significantly improved.
- timeit adds a --target-time option for more predictable benchmarking.
- Typing gains support for features such as disjoint base decorators and richer TypeVarTuple options (bound, covariant, contravariant).
- ForwardRef representations become clearer and easier to read.
- Regular expression APIs move toward re.prefixmatch() instead of re.match().
- array and memoryview support complex number formats like Zf and Zd.
- frozendict is better integrated with dataclasses, plistlib, and dictionary merging.
- UserDict.popitem() now behaves in a predictable, ordered way.
- json adds an array_hook for more flexible decoding.
- email, IDNA, and importlib.metadata receive fixes for Unicode handling and corrupted metadata.
- asyncio adds TaskGroup.cancel(), improves debugging, shutdown behavior, and event loop performance.
- The profiling.sampling module gains dump snapshots, --jsonl output, and --diff-flamegraph for visual comparisons.
4. C API and extension changes
- Implements a unified slot system for types, simplifying extension type definitions.
- Adds a stable ABI variant for free-threaded builds (abi3t).
- Introduces new, safer functions for garbage collector traversal.
- Makes PyCriticalSection part of the Stable ABI.
- Provides hooks like PyInterpreterState_SetEvalFrameAllowSpecialization for controlling specialization behavior.
5. Build system and platforms
- Windows builds adopt a new layout and support free-threaded configurations.
- Updates to toolchains such as WASI SDK and modern compilers.
- Improves performance on AArch64 and x86_64 architectures.
- Fixes issues with PGO, Clang, and LLVM-based builds.
- Adds options like --enable-static-libpython-for-interpreter for more flexible embedding.
6. Developer experience and ergonomics
- More extensive colorization in command-line tools and error messages.
- Better suggestions and messages for AttributeError and similar exceptions.
- More robust REPL behavior and nicer pretty-printing, including support for new string forms.
- Smarter import-related completions and diagnostics for everyday workflows.