| 初回リリース | 2007年半ば |
|---|---|
| 安定版リリース | 7.3.17 [1] (2024年8月28日)
|
| リポジトリ |
|
| 書かれた | RPython |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | Pythonインタープリタおよびコンパイラツールチェーン |
| ライセンス | マサチューセッツ工科大学 |
| Webサイト | pypy.org |
PyPy ( / ˈ p aɪ p aɪ / ) は、プログラミング言語Python の実装です。[2] PyPy はジャストインタイムコンパイラを使用するため、標準実装のCPythonよりも高速に実行されることがよくあります。[3] CPython 拡張機能に依存するコードを除いて、ほとんどの Python コードは PyPy で適切に実行されます。CPython 拡張機能に依存するコードは PyPy で実行しても動作しないか、オーバーヘッドが発生します。
PyPy 自体は、メタ トレースと呼ばれる手法を使用して構築されています。これは、インタープリタを入力として受け取り、トレースするジャストインタイム コンパイラを出力として生成する、ほぼ自動の変換です。インタープリタは通常、コンパイラよりも記述が簡単ですが、実行速度が遅いため、この手法を使用すると、プログラミング言語の効率的な実装を簡単に作成できます。PyPy のメタ トレースツールチェーンは、RPython と呼ばれます。
PyPyはPython 3.7と3.10を公式にサポートしており[4]、CPythonと比較して実装に若干の違いがあります。[5]
詳細と動機
PyPyは、言語仕様と実装の側面を明確に分離することに重点を置き、動的言語の実装を作成するための共通の翻訳およびサポートフレームワークを提供することを目指しています。また、上記のフレームワークを使用して、低レベルの詳細をエンコードすることなく、新しい高度な機能を有効にするために、Pythonプログラミング言語の準拠した柔軟で高速な実装を提供することも目的としています。[6] [7]
RPython
PyPyインタープリタ自体は、RPython(Restricted Python)と呼ばれるPythonの制限されたサブセットで書かれています。[8] RPythonはPython言語にいくつかの制約を課し、変数の型をコンパイル時に推論できるようにします。[9]
PyPy プロジェクトは、 RPython コードを解析してバイトコード形式に変換するツールチェーンを開発しました。バイトコードはCに降格できます。以前はCに加えて他のバックエンド( Java、C#、JavaScript )もありましたが、ビット腐食に悩まされたため削除されました。したがって、 RPython は Python インタープリターによって変換されるため、 PyPy の再帰ロゴは蛇が自分自身を飲み込んでいるようなものです。コードはテストと解析のために未翻訳で実行することもでき、動的言語の研究のための優れたテストベッドを提供します。
プラグ可能なガベージコレクターが可能で、オプションでスタックレスPython機能を有効にすることもできます。最後に、インタープリタのソースコードにいくつかの注釈を付けると、インタープリタにジャストインタイムコンパイラを構築するジャストインタイム(JIT)ジェネレーターが含まれています。生成されたJITコンパイラはトレースJITです。[10]
RPythonは現在、PixieなどのPython以外の言語実装を書くのにも使用されています。[11]
プロジェクトのステータス
PyPyバージョン7.3.17は、2つのCPythonバージョン2.7と3.10と互換性があります。[12] [13] CPython v3と互換性のある最初のPyPyバージョンはPyPy v2.3.1(2014)です。[14] CPython v3と互換性のあるPyPyインタープリタはPyPy3とも呼ばれます。
PyPyは、32ビット/64ビットx86および32ビット/64ビットARMプロセッサでのJITコンパイルをサポートしています。 [15] Windows、Linux、OpenBSD、Mac OS Xで夜間テストされています。PyPyは、実装固有の機能に依存しない純粋なPythonソフトウェアを実行できます。[16]
CPython C API 拡張機能には CPyExt と呼ばれる互換性レイヤーがありますが、これは不完全で実験的なものです。C共有ライブラリとのインターフェイスには、組み込みの C外部関数インターフェイス(CFFI) またはctypesライブラリを使用することをお勧めします。
歴史
PyPy は、2002 年から 2010 年にかけて Armin Rigo によって開発された Python 用のジャストインタイム特化コンパイラであるPsycoプロジェクトのフォローアップです。PyPy の目的は、スコープ付きのジャストインタイム特化コンパイラを実現することですが、これは Psyco では利用できませんでした。 [説明が必要]当初、RPython はJava バイトコード、CIL、JavaScriptにもコンパイルできましたが、これらのバックエンドは関心が薄れたため削除されました。
PyPy は当初、研究開発指向のプロジェクトでした。開発が成熟し、2007 年半ばに公式 1.0 がリリースされた後、次の焦点は、CPython との互換性を高めた製品版のリリースに移りました。PyPy の変更の多くは、コーディング スプリント中に行われました。
- 2008年8月、PyPyはPylons [17] 、Pyglet [18] 、Nevow [19]、Django [20]などの人気のあるPythonライブラリを実行できるようになりました。
- 2010年3月12日、速度に重点を置いたPyPy 1.2がリリースされました。これには、まだ安定していないものの、動作するジャストインタイムコンパイラが含まれていました。[21]
- 2011年4月30日にPyPyバージョン1.5がリリースされ、CPython 2.7との互換性が達成されました。[22]
- 2013年5月9日にはPyPy 2.0がリリースされ、ARMv6およびARMv7 JITでのJITコンパイルのアルファ品質サポートが導入され、CFFIが標準ライブラリに含まれました。[23] [24]
- 2014年6月20日、PyPy3は安定版と宣言され[14]、より新しいPython 3との互換性が導入されました。PyPy 2.3.1と同時にリリースされ、同じバージョン番号が付けられています。
- 2017年3月21日、PyPyプロジェクトはPyPyとPyPy3の両方のバージョン5.7をリリースし、後者はPython 3.5のベータ品質のサポートを導入しました。[25]
- 2018年4月26日にバージョン6.0がリリースされ、Python 2.7と3.5(Windowsではまだベータ品質)がサポートされました。[26]
- 2019年2月11日にバージョン7.0がリリースされ、Python 2.7と3.5がサポートされました。[27]
- 2019年10月14日にバージョン7.2がリリースされ、Python 3.6.9がサポートされました。[28]
- 2019年12月24日にバージョン7.3がリリースされ、Python 3.6.9がサポートされました。[29]
- 2020年2月16日、PyPyチームは、CFFI(C Foreign Function Interface )プロジェクトのリポジトリを使用して、ソースコードのホスティングをBitbucketからheptapod.netに移行することを発表しました。新しいロゴとウェブサイトのデザインも公開されています。ただし、新しいロゴの作者とライセンスは不明です。[30]
- 2023年12月29日、PyPyはホスティングがGitHubに移行し、開発はgitで追跡されることを発表しました。[31]
資金調達
PyPyは、2004年12月から2007年3月まで、特定対象研究プロジェクト[32]として欧州連合から資金提供を受けていました。2008年6月、PyPyはGoogleオープンソースプログラムの一部として資金提供を発表し、 CPythonとの互換性を高めることに注力することに同意しました。2009年、中小企業に特化した欧州連合の資金提供機関であるEurostars [33]は、PyPyプロジェクトメンバーからの「PYJIT – PyPyに基づく動的プログラミング言語用の高速で柔軟なツールキット」という提案を受け入れました。Eurostarsの資金提供は2011年8月まで続きました。[34] PyCon US 2011 では、 Python Software FoundationがPyPyに1万ドルの助成金を提供し、パフォーマンスと言語の新しいバージョンとの互換性に関する作業を継続しました。[35] ARMアーキテクチャへの移植は、Raspberry Pi Foundation によって部分的に支援されました。[23]
PyPyプロジェクトは、ステータスブログページを通じて寄付も受け付けています。[36] 2013年時点では、Python 3バージョンの互換性、数値計算のための最適化されたNumPyサポートの組み込み、より優れた並列処理を可能にするソフトウェアトランザクションメモリサポートなど、さまざまなサブプロジェクトに資金が投入されています。 [23]
参照
注記
- ^ 「PyPy v7.3.17 リリース」 。 2024年9月20日閲覧。
- ^ “Maciej Fijalkowski PyPy にインタビュー”. 2015 年 11 月 29 日。
- ^ 「PyPy Speed」. speed.pypy.org . 2019年12月1日閲覧。
- ^ “PyPy”. 2024年12月30日.
- ^ "PyPy と CPython の違い — PyPy ドキュメント". 2024 年 12 月 30 日。
- ^ Samuele Pedroni (2007 年 3 月)。「PyPy – 目標とアーキテクチャの概要」。2012 年 6 月 14 日時点のオリジナルよりアーカイブ。
- ^ 「PyPy – 目標とアーキテクチャの概要 – ミッションステートメント」 。2013年10 月 11 日閲覧。
- ^ ランタイムインタープリターは「RPython」です。コーディングガイド – PyPyドキュメント
- ^ 「これは Python の適切なサブセットであり、簡単な分析と効率的なコード生成を可能にする方法で制限されています」、Ancona 他、2007 年。
- ^ Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin.メタレベルのトレース: PyPy のトレース JIT コンパイラ。ICOOOLPS '09。doi : 10.1145/1565824.1565827。
- ^ ティモシー・バルリッジのインタビュー。
- ^ 「PyPy – Python 互換性」pypy.org . 2019 年 12 月 28 日. 2020 年 12 月 15 日閲覧。
- ^ 「PyPy v7.3.7: 3.7、3.8 のバグ修正リリース」。pypy.org . 2021 年 10 月 25 日。2021 年 11 月 10 日閲覧。
- ^ ab PyPy チーム (2014 年 6 月 20 日)。 「PyPy3 2.3.1 – 支点」。ピピブログ。
- ^ 「PyPy v7.2.0: 2.7 および 3.6 のリリース」。pypy.org。2019年 10 月 16 日。
- ^ 「PyPy – Python 互換性」。2019 年 12 月 28 日。
- ^ 「PyPy 上で Pylon を実行する」2008 年 6 月 10 日。
- ^ 「PyPy 上で Pyglet を実行する」2008 年 2 月 20 日。
- ^ 「PyPy 上で Nevow を実行する」 2008 年 6 月 20 日。
- ^ 「PyPy は変更されていない Django 1.0 ベータ版を実行します」。2008 年 8 月 19 日。
- ^ 「PyPy 1.2 リリースの紹介」 2011 年 4 月 30 日。
- ^ 「PyPy 1.5 リリース: キャッチアップ」 2010 年 3 月 12 日。
- ^ abc Jake Edge (2013 年 5 月 15 日). 「PyPy 2.0 リリースの概要」. LWN.net .
- ^ “PyPy 2.0 – アインシュタインサンドイッチ”. 2013 年 5 月 9 日。
- ^ 「PyPy2.7 と PyPy3.5 v5.7 – 2 つを 1 つのリリースに」2017 年 3 月 21 日。
- ^ 「PyPy2.7 と PyPy3.5 v6.0 のデュアルリリース」。2018 年 4 月 26 日。
- ^ クニ、アントニオ (2019-02-11). 「PyPy ステータス ブログ: PyPy v7.0.0: 2.7、3.5、および 3.6-alpha のトリプル リリース」。PyPy ステータス ブログ。2020年8月17日に取得。
- ^ マティップ (2019-10-14). 「PyPy ステータス ブログ: PyPy v7.2 リリース」。PyPy ステータス ブログ。2020年8月17日に取得。
- ^ マティップ (2019-12-24). 「PyPy ステータス ブログ: PyPy v7.3.0 リリース」。PyPy ステータス ブログ。
- ^ 「PyPyとCFFIはHeptapodに移行しました」。2020年2月16日。
- ^ 「PyPyはGit、GitHubに移行しました」。2023年12月29日。
- ^ 「EU共同体研究開発情報サービスエントリ」。
- ^ 「ユーロスターズ – より高い目標を」。
- ^ 「Eureka Network のプロジェクト ページ」。2012 年 4 月 3 日時点のオリジナルよりアーカイブ。2011 年 10 月 17 日閲覧。
- ^ 「PSFへの感謝」2011年3月22日。
- ^ 「PyPy ステータス ブログ: ああ、ところで: PyPy は「Eurostars」を通じて資金提供を受ける」。2010 年 12 月 10 日。
参考文献
- Davide Ancona、Massimo Ancona、Antonio Cuni、Nicholas D. Matsakis、2007 年。「RPython: 動的型付けと静的型付けの OO 言語の調和に向けた第一歩」。Proc. Dynamic Language Symposium (DLS)、2007 年。ACM Press。
- Carl Friedrich Bolz、Antonio Cuni、Maciej Fijalkowski、2009 年。「メタレベルのトレース: PyPy のトレース JIT コンパイラ」。Proc. ICOOOLPS、2009 年。ACM Press。
- Corbet, Jonathan (2011 年 5 月 11 日)。「PyPy を使った簡単な実験」。LWN.net。
- von Eitzen, Chris (2011 年 11 月 21 日)。「PyPy 1.7 はパフォーマンスの「スイート スポット」を拡大します」。H . Heinz Heise .
- Rose, John (2011 年 12 月 2 日)。「PyPy のある一日」。Oracle開発者ブログ。
- 「マチェイ・フィヤルコウスキー・ピピにインタビュー」。意思決定統計ブログ。 2015 年 11 月 29 日。
外部リンク
- 公式サイト
