
現在開発中のPython 3.15で、Windows x86-64向けCPythonインタプリタが大幅に高速化する可能性が見えてきました。鍵となるのは、MSVC(Visual Studio 2026)に新しく導入された tail-call(末尾呼び出し)最適化を強制できる仕組みです。
CPythonコア開発者のKen Jin 氏による最新の検証では、Windows版CPythonが平均15〜16%、ケースによっては40%近い高速化を達成したとのこと。これはPythonの歴史の中でもかなり大きな改善といえます。
なぜ tail-call で速くなるのか?
従来のCPythonインタプリタは巨大なswitch-caseループ(約12、000行)で構成されており、コンパイラが最適化しづらい構造でした。
特に問題だったのが インライン展開がほぼ行われないことです。小さな関数でも「巨大な関数にさらにコードを足すのは危険」と判断され、最適化が抑制されてしまっていたのです。
これに対し、Tail-callインタープリターは次のような特徴を持ちます。
- 各バイトコード処理を関数として分離
- 次の命令へはtail-call(スタックを増やさない関数呼び出し)
- 関数が分割されることでコンパイラの最適化が正常に働く
- 結果としてインライン展開が復活し、処理が高速化
MSVCの新しい[[msvc::musttail]] 属性により、tail-call が確実に適用されるようになったことが今回のブレイクスルーにつながっています。
実験のベンチマーク結果
Ken Jin 氏の検証では、以下のような改善が確認されています:
-
spectralnorm:1.48×
-
nbody:1.35×
-
Django template:1.18×
-
xDSL:1.14×
特に小さなループを大量に回す処理で効果が大きく、Python の日常的なスクリプトでも体感できる可能性があります。
まだ実験的だが、未来は明るい
MSVCのtail-call機能はまだ実験的で、将来変更される可能性があります。しかし、PythonコアチームはすでにWindows版CPython 3.15での採用を視野に入れており、macOS版でも同様のtail-callインタープリターが導入されつつあります。現時点で試すには、Visual Studio 2026を使ってCPythonをソースからビルドする必要がありますが、将来的には公式バイナリにも組み込まれる見込みです。
Hacker Newsでもこの話題に関する議論が行われており、Ken Jin氏本人が登場して質問に答えています。Pythonの高速化に興味のある方は参照してみてはいかがでしょうか。
