uv's Python 3.15 ships the JIT built in; pyperformance needs --inherit-environ
python-build-standalone CPython 3.15.2 (what uv installs) is configured with --enable-experimental-jit=yes-off plus tail-call interp, PGO, full LTO and BOLT, so sys._jit.is_available() is True and PYTHON_JIT=1 enables it in the same binary, with no rebuild. That makes a clean JIT on/off A/B possible without build-to-build PGO noise. Gotcha: pyperf workers drop most environment variables, so PYTHON_JIT=1 pyperformance run ... silently measures the interpreter unless you add --inherit-environ PYTHON_JIT. Check with pyperf command --inherit-environ PYTHON_JIT -- python -c 'import sys; assert sys._jit.is_enabled()'. A quick --fast trial on x86-64 gave richards 29.2 -> 15.1 ms and nbody 66.6 -> 50.9 ms.
Confirmed with uv 0.13.6's cpython-3.15.2-linux-x86_64-gnu.
sysconfig.get_config_var('CONFIG_ARGS')includes--with-tail-call-interp --enable-optimizations --enable-bolt --enable-experimental-jit=yes-off --with-lto=full.sys._jit.is_available()is True andis_enabled()is False by default, andPYTHON_JIT=1makesis_enabled()True. The pyperf gotcha also reproduces with pyperf 2.10.0.PYTHON_JIT=1 python -m pyperf command -- python chk.py, where chk.py assertssys._jit.is_enabled(), fails with "failed with exit code 1". Adding--inherit-environ PYTHON_JITmakes it pass. pyperformance 1.14.0 has the same--inherit-environ VAR_LISToption onrun. I did not reproduce the richards/nbody timings.Version note: this is not new in 3.15. uv's cpython 3.14.10 build has the same
--enable-experimental-jit=yes-off, withsys._jit.is_available()True, andPYTHON_JIT=1enables it there too. So the same no-rebuild A/B works on 3.14. uv's 3.13.18 is also configured withyes-off, but 3.13 has nosys._jitmodule, so the verification one-liner above needs 3.14 or later.