PyPy v8.0.0 リリース
PyPy v8.0.0 Release (pypy.org)
要約
Pythonの代替実装であるPyPyが、バージョン8.0.0をリリースしました。このバージョンでは、Python 2.7、Python 3.11、そしてPython 3.12のベータ版がサポートされます。特に、Python 3.12のサポートはCPython 3.12以降のlimited ABI wheelsとの互換性向上を目指しており、Rpythonコード生成の改善やglibc2.28への対応も行われています。
全文翻訳
PyPy v8.0.0 リリース
PyPy v8.0.0: Python 2.7、3.11、および3.12ベータ版のリリース 2026-09-19
PyPyチームは、2026年5月26日の前回リリースから、PyPyバージョン8.0.0をリリースできることを誇りに思います。これはメジャーな新バージョンであるため、8.0.0へのバージョンアップとなりました。Python 3.12の最初のリリースであり、まだいくつかのバグが含まれている可能性があるため、「ベータ」品質と呼んでいます。
なぜ8.0.0への移行なのか
glibc 2.28
Linuxのビルドボット(linux64, linux32, aarch64)を、AlmaLinux 8とglibc 2.28に基づいたmanylinux_2_28イメージを使用するように更新しました。これらは以前使用していたgcc5ではなくgcc14を使用します。そのため、コンパイル済みのtarballは少なくともglibc 2.28を必要としますが、これは現在では普遍的にサポートされているはずです(Ubuntu 24.04はglibc 2.39を使用)。混乱を防ぐため、メジャーバージョンを上げるのが賢明だと判断しました。
cp12-abi3 サポート
PyPyのPython 3.11サポートには、Cレイヤー PyObject の新しいモデルが付属しています。Cオブジェクトを内部のRPythonオブジェクトにリンクするために、オブジェクトに ob_pypy_link という追加フィールドがあります。これは rawrefcount-and-the-gc で詳しく説明されています。以前のバージョンでは、このフィールドは PyObject 構造体をCPythonのものと異なるものにする形で可視的でした。v8.0.0からは、C拡張モジュールに渡すポインタの前に、PyPy専用の拡張機能を「隠す」ようにしました。この作業の目的は、PyPyがCPython 3.12以降用に生成されたcp312-abi3ホイールを、limited ABIを使用して利用できるようにすることです。必要な要素はすべて整いました。
- PyPyのCヘッダー(
PyObjectのような構造体定義を含む)は、Py_LIMITED_API=0x030C0000を定義した場合、CPythonのCヘッダーと互換性があります。 - PyPyは、limited APIからエクスポートされる関数名をマングルしなくなりました。PyPy 3.11以前では、
PyTuple_Newのような関数はPyPyTupleNewとしてエクスポートされていました。
まだ不足しているのは、import機構がabi3.so共有オブジェクトをPyPyで有効なものとして認識するように教えること、そしてより広範なエコシステム(pip, uv)もcp312-abi3ホイールをインストール可能な候補として受け入れるようにすることです。
はい、これは大きな一歩です。CythonとPyO3と協力して、すべてが「うまくいく」ようにしています。これにより、パッケージがPyPyをサポートするのが容易になることを願っています。
RPythonコード生成の新機能
PyPyはRPythonで書かれており、VMのビルドプロセスの一部としてRPythonをCに変換するコード生成機能を持っています。ベースインタープリタの高速化を試みる中で、コード生成にいくつかの改善を加えました。速度向上はそれほど顕著ではありませんでしたが、いくつかの進歩を遂げました。
- 計算されたgoto(computed gotos)を使用し、コードのインライン化をより積極的に行っています。これによりソースコードはよりコンパクトになりますが、期待したほどパフォーマンスは向上しませんでした。
- ソースコードには、ソースコードが生成元のRPythonコードのどこに対応するかを示すコメントが含まれています。これは、何が起こっているかを正確に把握するのに非常に役立ち、さらなる改善を可能にするかもしれません。
HPyの廃止
PyPyの内部HPyバックエンドを廃止しました。HPyプロジェクトのハンドルをポインタの代わりに使うという考え方は良いプロトタイプでしたが、プロジェクトは新しい標準となるほどの支持を集めませんでした。コードは依然としてPyPyのコードベースに残っており、ビルドオプション で有効にすることができます。
ヘッダーとエクスポートされた関数を比較するツールの復活
PyPyのヘッダーファイルをCPythonのヘッダーファイルと比較するために、clangベースのpyhdrdump を復活させました。その仕組みや使い方については、README を参照してください。
インタープリタ
このリリースには、3つの異なるインタープリタが含まれています。
- PyPy2.7: Python 2.7の構文と機能、およびCPython 2.7.18+(
+はバックポートされたセキュリティアップデート用)の標準ライブラリをサポートします。 - PyPy3.11: Python 3.11の構文と機能、およびCPython 3.11.16の標準ライブラリをサポートします。セキュリティ問題がない限り、これが3.11をサポートする最後のリリースとなります。
- PyPy3.12: Python 3.12の構文と機能、およびCPython 3.12.14の標準ライブラリをサポートします。
これらのインタープリタは、ほぼ同じコードベースに基づいているため、トリプルリリースとなっています。
アップデートをお勧めします。リリースへのダウンロードリンクは以下で見つけることができます。
PyPyプロジェクトへの継続的な支援に感謝いたします。もしPyPyがあなたのニーズに十分でない場合、直接コンサルティング の作業も承っております。PyPyが役立っている場合は、ぜひお聞かせください。プルリクエストを通じて、ブログ への投稿を歓迎します。
また、貢献者の皆様にも感謝し、新しい方々のプロジェクトへの参加を奨励します。PyPyには多くのレイヤーがあり、バグ修正、PyPy および RPython のドキュメント改善、あるいはRPythonのJITをさらに良くするための一般的なヘルプ など、あらゆる面で協力が必要です。
もしあなたがPythonライブラリのメンテナーでC拡張を使用している場合、PyPyでパフォーマンスを発揮するライブラリのCFFI バージョンの作成を検討してください。それが難しい場合でも、PyPyはまもなくlimited ABIホイールのためにcp312-abi3タグをサポートする予定です。いずれにせよ、cibuildwheel はPyPy用のホイールのビルドをサポートしています。
PyPyとは?
PyPyはPythonインタープリタであり、CPythonのドロップイン代替です。統合されたトレーシングJITコンパイラにより、高速です(PyPyとCPythonの パフォーマンス比較)。
また、他の動的言語 の開発者にも、RPythonが彼らに何ができるかを見ていただくことを歓迎します。
以下のバイナリビルドを提供しています。
- ほとんどの一般的なオペレーティングシステム(Linux 32/64ビット、Mac OS 64ビット、Windows 64ビット)上のx86マシン。
- Linux (
aarch64) および macOS (macos_arm64) を実行する64ビットARMマシン。
PyPyはWindows 32ビット、Linux PPC64ビッグエンディアン/リトルエンディアン、Linux ARM 32ビット、RISC-V RV64IMAFD Linux、およびs390x Linuxをサポートしていますが、バイナリはリリースしていません。これらのプラットフォーム向けのバイナリリリースをスポンサーしたい場合は、私たちにご連絡ください。Debian、Fedora、conda、OpenBSD、FreeBSD、Gentooなどのバイナリビルドは、ダウンストリームのパッケージャーが提供しています。
その他新機能は?
8.0.0リリースに関する詳細については、完全な変更履歴 を参照してください。
ぜひアップデートして、PyPyをより良くするための私たちの活動を続けてください。
Cheers,
The PyPy Team