CPython JIT 開発が一時停止 — Copy-and-Patch JIT のこれまでと PEP 化要求の真意

はじめに

2026年6月、Python Steering Council が CPython 本体に統合されている JIT (Just-In-Time) コンパイラの 新規開発を一時停止する と正式に発表した。30か月以上にわたって少人数の中核開発者が育ててきた Copy-and-Patch JIT は、Python 3.15 alpha で目標を超える 11〜12% の高速化を達成した直後のタイミングでの「いったん止めよう」である。本記事では、Tier-2 IR と Copy-and-Patch JIT の技術的な仕組みを整理しながら、なぜいま PEP 化が要求されたのか、Python ユーザーにどんな影響があるのかを解説する。

ニュースの詳細 — Steering Council の判断

発表は Pablo Galindo Salgado による Steering Council 名義の投稿で行われた。要点は次のとおり。

  • 現在の JIT は PEP 744 という「情報提供のみ (Informational)」の PEP で main ブランチに入っていただけで、Standards Track の承認は経ていない。
  • 過去に複数回アーキテクチャを刷新しており、長期サポートの責務が明確でない。
  • 今後は Standards Track の PEP を起こし、コミュニティ議論と Steering Council の承認を経るまで JIT への新規機能開発は main にマージしない(バグ修正と CVE 対応は継続)。
  • PEP の起草は Diego Russo が調整役を担い、目安として6か月以内での決着を目指す。

PEP が答えるべき項目として明示されたのは、(1) 長期メンテナンスの持続可能性、(2) free-threading・プロファイラ・デバッガとの互換性、(3) 測定可能な成功基準とプラットフォームカバレッジ、(4) CinderX や Numba など第三者 JIT との関係、(5) アーキテクチャが今後も大きく変わるのか、の5点である。タイミングは Python 3.15 のベータカットオフ後で、3.14 までは安定運用が保証される形 だ。

技術的な背景 — Tier-2 IR と Copy-and-Patch JIT

CPython の JIT は、まず Tier-1 の従来バイトコードを実行しつつ、ホットパスを検出すると Tier-2 IR に変換する。Tier-2 IR はバイトコードよりも粒度が細かい中間表現で、スーパーインストラクション融合・参照カウントの最適化・分岐反転といった最適化を施しやすい構造になっている。Tier-2 IR は (a) Tier-2 インタプリタで実行する経路と、(b) Copy-and-Patch JIT でマシンコードに変換する経路の両方を持つ。

Copy-and-Patch JIT は Brandt Bucher が主導する、2021年の論文をベースにした実装手法だ。各 IR 命令ごとに事前コンパイル済みの「テンプレート (stencil)」を用意し、ランタイムにメモリへコピーして空き穴をパッチするだけで JIT コードが完成する。LLVM をランタイム依存にしないため起動コストが小さく、ビルドパイプラインも比較的軽量という利点がある。一方で命令単位の局所最適化に向きやすく、ループ全体の再構成のようなグローバル最適化は苦手である。

直近の改善も着実で、Python 3.15 alpha では macOS AArch64 で 11〜12%、Linux x86-64 で 5〜6% の高速化を達成。レジスタアロケーション/top-of-stack キャッシング、incref/decref ペアの除去など、まだ伸びしろを持っている段階だった。

エンジニアへの影響

短期的な影響は限定的だ。Python 3.13 / 3.14 の JIT は PYTHON_JIT=1(あるいは --enable-experimental-jit ビルド)でオプトイン提供されており、本体でデフォルト有効化されない方針は今回の決定で変わらない。プロダクションで JIT 有効化を検討していたチームは、PEP 通過まで様子見の姿勢が現実的 になる。

注視すべきは次の3点である。

  1. 3.15 のリリース内容: ベータカット後の決定なので、3.15 自体には現状の JIT が同梱される見込み。だがその後の改良はストップするため、性能向上の伸びしろは当面凍結される。
  2. 互換性確約: free-threading (PEP 703) と JIT の同時最適化は3.15世代の最大の懸案。PEP の中で free-threading との両立条件が明文化されるかが鍵。
  3. 代替 JIT との位置づけ: Meta の CinderX、Numba、PyPy など外部 JIT との棲み分けが PEP に書かれることで、エンタープライズが採用しやすくなる可能性がある。

現場の意思決定としては、JIT を前提にした最適化(プロファイル取り直し、ベンチマーク基準の更新)は一段保留 でよい。一方で、PyPy や Numba のような既存解は依然として有効であり、CPU バウンドなワークロードはこちらで前倒し対応するのが安全策となる。

まとめ

CPython の Copy-and-Patch JIT は性能面では順調に成果を出してきたが、Steering Council は「PEP に基づく正式な承認」というガバナンス整備を優先した。Tier-2 IR の汎用性、Copy-and-Patch のビルド軽量さは依然として競争力を持ち、PEP が承認されれば 3.16 以降で再加速する余地は十分にある。Python の言語処理系がガバナンスと技術の両輪で成熟しつつあることを示す象徴的な出来事と言えるだろう。

今日のその他のニュース

  • Microsoft が pg_durable を OSS 公開: PostgreSQL 内で Durable Execution を実現する拡張。Temporal/Restate の代替候補として注目を集めている (HN 451pt)。
  • Zig 言語が AI 生成コードを禁止方針に: GitHub からの離脱と合わせて発表。ライセンスと品質懸念が背景で、OSS コミュニティの AI 受容温度差を象徴する話題。
  • Google が AI エージェント向け「Android CLI」を正式公開: adb/gradle ラッパーで Claude Code・Gemini CLI などから Android アプリビルドとエミュレータ操作を自動化できる。

ソース