| CPython | |
|---|---|
| 原作者 | グイド・ヴァン・ロッサム |
| 開発者 | Pythonコア開発者とPythonコミュニティ(Pythonソフトウェア財団がサポート) |
| 初回リリース | 1994年1月26日 (1994年1月26日) |
| 安定版リリース | |
| リポジトリ | https://github.com/python/cpython |
| 書かれた | C、Python |
| プラットフォーム | 42のプラットフォーム。§配布を参照 |
| 入手可能な | 英語 |
| タイプ | Python プログラミング言語インタープリタ |
| ライセンス | Pythonソフトウェア財団ライセンス |
| Webサイト | www.python.org |
CPythonは、 Pythonプログラミング言語のリファレンス実装です。CとPythonで記述されたCPythonは、Python言語のデフォルト実装であり、最も広く使用されています。
CPythonは、Pythonコードをバイトコードにコンパイルしてから解釈するため、インタプリタとコンパイラの両方として定義できます。C言語を含む複数の言語との外部関数インターフェースを備えており、 Python以外の言語で 明示的にバインディングを記述する必要があります。
デザイン
CPythonの特徴は、グローバルインタープリタロック(GIL)を使用することです。これにより、各CPythonインタープリタプロセスでは、一度に1つのスレッドのみがバイトコードを処理できます。 [ 2 ]これは、マルチスレッドに意味がないという意味ではありません。最も一般的なマルチスレッドのシナリオでは、スレッドは主に外部プロセスの完了を待機します。
これは、複数のスレッドが別々のクライアントにサービスを提供している場合に発生する可能性があります。あるスレッドがクライアントからの応答を待機し、別のスレッドがデータベースクエリの実行を待機している間に、3つ目のスレッドが実際にPythonコードを処理している可能性があります。
ただし、GIL は、複数のコアに分散される可能性のある Python コードで CPU を集中的に使用するアルゴリズムを実装するプロセスには CPython が適していないことを意味します。
実際のアプリケーションでは、GILが重大なボトルネックとなる状況は非常に稀です。これは、Pythonが本質的に低速な言語であり、CPU負荷の高い処理や時間的制約のある処理には一般的に使用されないためです。Pythonは通常、トップレベルで使用され、ライブラリ内の関数を呼び出して特殊なタスクを実行します。これらのライブラリは通常Pythonで記述されておらず、これらの基盤となるプロセスのいずれかが呼び出されている間に、別のスレッドでPythonコードが実行される場合があります。CPU負荷の高いタスクを実行するために呼び出される非PythonライブラリはGILの影響を受けず、複数のプロセッサ上で多数のスレッドを制限なく同時に実行できます。
Pythonコードの並行処理は、マルチタスクオペレーティングシステムによって管理される個別のCPythonインタープリタプロセスによってのみ実現できます。これにより、同時実行中のPythonプロセス間の通信が複雑になりますが、マルチプロセッシングモジュールによってある程度軽減されます。つまり、Pythonコードの同時実行から真にメリットを享受できるアプリケーションを、オーバーヘッドを最小限に抑えて実装できるということです。
GILの存在により、CPythonの実装が簡素化され、Pythonコードの同時実行のメリットを享受できないマルチスレッドアプリケーションの実装が容易になります。しかし、GILがない場合、マルチプロセスアプリケーションでは、共通コードがスレッドセーフであることを確認する必要があります。
GILを廃止する提案は数多くなされてきたものの、ほとんどの場合、GILの利点が欠点を上回るという一般的なコンセンサスが得られています。GILがボトルネックとなる少数のケースでは、アプリケーションはマルチプロセス構造を中心に構築されるべきです。より多くの並列処理を可能にするため、2023年10月に、単一のPythonプロセス内のサブインタプリタごとに個別のGILを許可する改良版がリリースされました。これは「オプトイン共有機能を備えたスレッド」と表現されています。[ 3 ] [ 4 ]
数回の議論を経て、2023年にPythonのバージョン3.13からGILをオプションにすることを提案するプロジェクトが開始され、[ 5 ] 2024年10月7日にPython 3.13.0でリリースされました。[ 6 ] [ 7 ]
歴史
このセクションは拡張が必要です。不足している情報を追加していただければ幸いです。 (2025年2月) |
2009年に、GoogleがスポンサーとなったUnladen Swallowというブランチが作成され、CPythonにジャストインタイムコンパイラを組み込むことになりました。 [ 8 ] [ 9 ]開発は2011年に終了しましたが、メインの実装には統合されませんでした。 [ 10 ]ただし、cPickleモジュールの改良など、一部のコードは統合されました。[ 11 ] [ 8 ]
2021年には、「特殊化適応型インタープリタ」が提案されました。これは、見かけ上の型安定性を示す一般的に実行される命令をより高速な型固有の命令に特殊化し、必要に応じて命令の特殊化を解除することで、パフォーマンスが10~60%向上すると測定されました。[ 12 ] SAIはPython 3.11で初めて搭載され、「pyperformance」ベンチマークスイートではPython 3.10よりも平均25%高速であることが測定されました。[ 13 ]
2024年、実験的なジャストインタイムコンパイラがCPythonのメイン開発ブランチに統合されました。この初期のJITはLLVM上に構築され、ホットコードパスの高速化を目的としています。統合時点では、このコンパイラはまだCPythonのデフォルトのビルド構成には含まれておらず、SAIとほぼ同等のパフォーマンスを提供していました。完全採用の条件の一つは、少なくとも5%のパフォーマンス向上でした。[ 14 ]デフォルトでは無効になっていますが、ユーザーはこれを有効にして実験し、Pythonが最終的に他のJIT言語に匹敵するようになるかどうかを確認できます。[ 15 ]
分布
公式にサポートされている Tier 1 プラットフォームは、GCC ツールチェーンを使用する 64 ビット Intel 向けLinux 、 64 ビット Intel および ARM 向けmacOS 、 32 ビットおよび 64 ビット Intel 向けMicrosoft Windowsです。公式の Tier 2 サポートは、64 ビット ARM 向け Linux、WASI ランタイム サポート付きの wasm32 ( Web Assembly )、および clang ツールチェーンを使用する 64 ビット Intel 向け Linux に対して存在します。公式にサポートされている Tier 3 システムには、64 ビット ARM Windows、64 ビット iOS、Raspberry Pi OS (ハード フロート付きの armv7 向け Linux)、リトルエンディアン モードの 64 ビット PowerPC 向け Linux、およびs390x向け Linux があります。
他にも多くのプラットフォームで実装が進んでおり、その中には次のようなものがある: [ 16 ]
- Unixライク
- 特殊および埋め込み
- 他の
PEP 11 [ 17 ]には、Python Software FoundationによってCPythonでサポートされていないプラットフォームがリストされています。これらのプラットフォームは、外部ポートによって引き続きサポートできます。これらのポートには以下が含まれます。
- AtheOS (2.6以降はサポートされていません)
- BeOS (2.6以降はサポートされていません)
- DOS (2.0 以降はサポートされていません)
- IRIX 4 (2.3 以降はサポートされていません)
- IRIX 5以降(3.2、3.7以降はサポート対象外)[ 18 ]
- Mac OS 9 (2.4以降はサポートされていません)
- MINIX (2.3以降はサポートされていません)
- OpenVMS (3.3 以降はサポートされていません)
- OS/2 (3.3 以降はサポートされていません)
- RISC OS (3.0 以降はサポートされていません)
- Windows: 一般的に、Windows バージョンは、Microsoft の延長サポート ライフサイクル ポリシーの対象となる限り、完全な Tier 1 サポートを受け続けます。Microsoft の延長サポート期間が終了した古いバージョンの Windows は、Python の次のメジャー リリース (XY0) ではサポートされなくなります。ただし、各リリース ブランチのバグ修正リリース (0.0.Z) では、最初の XY0 リリースでサポートされていたすべてのバージョンの Windows が引き続きサポートされます。組み込みシステムや IoT システムを対象とした Windows のエディションは、Python の公式サポート ポリシーの対象外です。
- Windows 8 (2023 年 1 月 10 日以降、Python のメジャー リリースでは公式サポートされていません)
- Windows 7 (2020 年 1 月 14 日以降、Python のメジャー リリースでは公式サポートされていません)
- Windows Vista (3.9 以降はサポートされていません)
- Windows XP (3.5 以降はサポートされていません)
- Windows 2000 (3.3 以降はサポートされていません)
- Windows 3.x (2.0 以降はサポートされていません)
- Windows 9x (2.6 以降はサポートされていません)
- Windows NT4 (2.6 以降はサポートされていません)
Python Software Foundation の公式 CPython バージョン(メイン開発サイトへのリンク付き)に統合されていない外部ポートには、PSP や SMS 用のグラフィックおよびサウンド API、S60 用のカメラ API など、プラットフォーム固有の機能のための追加モジュールが含まれていることがよくあります。これらのポートには以下が含まれます。
- アミガ:AmigaPython [ 19 ]
- IBM i : iSeriesPython [ 20 ]
- DJGPPを使用したDOS:PythonD [ 21 ]
- MorphOS :Python 2と3 [ 22 ]
- プレイステーション・ポータブル:PSP用スタックレスPython [ 23 ]
- Symbian OS : S60用Python
- Windows CE / Pocket PC : Python Windows CE ポート[ 24 ]
- OpenVMS : Python 3.xの移植版はVSIによってメンテナンスされている[ 25 ]
エンタープライズLinux
これらのPythonのバージョンは、現在サポートされているエンタープライズLinuxディストリビューションで配布されています。[ 26 ]表のPythonのサポート状況は、ディストリビューションのメンテナーからのサポートではなく、Pythonコアチームからのサポートを示しています。
| 配布バージョン | 配布終了 | Pythonバージョン | |
|---|---|---|---|
| Ubuntu 22.04 LTS (Jammy Jellyfish) | 3.10 [1] | ||
| Ubuntu 20.04 LTS (Focal Fossa) | 2030-04 [ 27 ] | [ 28 ] | サポート対象:3.8 [ 29 ] |
| Ubuntu 18.04 LTS (バイオニックビーバー) | 2028-04 [ 30 ] | サポート対象外:2.7 [ 31 ] | サポート対象外:3.6 [ 32 ] |
| Ubuntu 16.04 LTS (Xenial Xerus) | 2021年4月30日[ 33 ] | サポート対象外:2.7 [ 31 ] | サポート対象外:3.5 [ 32 ] |
| デビアン12 | 2028-06 [ 34 ] | サポート対象:3.11 [ 34 ] | |
| デビアン11 | 2026-06 [ 35 ] | サポート対象:3.9 [ 35 ] | |
| デビアン 10 | 2024-06 [ 36 ] | サポート対象外:2.7 [ 37 ] | サポート対象:3.7 [ 38 ] |
| デビアン9 | 2022年6月30日[ 39 ] | サポート対象外:2.7 [ 40 ] | サポート対象外:3.5 [ 41 ] |
| レッドハットエンタープライズLinux8 | 2029 | サポート対象外:2.7 [ 42 ] | サポート対象外:3.6 |
| レッドハットエンタープライズLinux7 | 2024年11月30日[ 43 ] | サポート対象外:2.7 [ 44 ] | |
| セントOS 8 | 2029年5月31日 | サポート対象外:2.7 | サポート対象外:3.6 |
| セントOS 7 | 2024年6月30日 | サポート対象外:2.7 [ 45 ] | |
| SUSE Linux Enterprise Server 15 | 2031年7月31日 | サポート対象外:2.7 [ 46 ] | サポート対象外:3.6 |
| SUSE Linux Enterprise Server 12 | 2027年10月31日 | サポート対象外:2.7 [ 47 ] | |
| SUSE Linux Enterprise Server 11 | 2022年3月31日 | サポート対象外:2.7 [ 47 ] | |
伝説: サポートされていません サポートされている 最新バージョン プレビュー版 将来のバージョン | |||
代替案
CPythonは、 Java仮想マシン(JVM)向けにJavaで記述されたJython 、 RPythonで記述されC言語に翻訳されたPyPy 、そして共通言語基盤向けにC#で記述されたIronPythonなど、いくつかの「製品品質」のPython実装の一つです。また、実験的な実装もいくつか存在します。[ 48 ]
参考文献
- ^ 「リリース 3.14.2」 2025年12月5日. 2025年12月7日閲覧。
- ^ 「初期化、終了、そしてスレッド」 . Python v3.8.3ドキュメント. 2020年6月4日閲覧。
- ^ Jake Edge (2023年8月15日). 「インタープリターごとのGIL」 . LWN . 2024年1月13日閲覧。
- ^ "PEP 684 – インタプリタごとのGIL | peps.python.org" . 2024年1月13日閲覧。
- ^ "PEP 703 – CPythonでグローバルインタープリタロックをオプションにする | peps.python.org" . peps.python.org . 2023年9月17日閲覧。
- ^ "PEP 719 – Python 3.13 リリーススケジュール | peps.python.org" . peps.python.org . 2023年9月17日閲覧。
- ^ 「PythonリリースPython 3.13.0」 . Python.org . 2025年3月28日閲覧。
- ^ a b Winter, Collin; Yasskin, Jeffrey; Kleckner, Reid (2010-03-17). 「PEP 3146 - Unladen Swallow を CPython に統合」 . Python.org.
- ^ "Unladen Swallow 2009Q1" . unladen-swallow, Pythonの高速実装. 2012年10月19日閲覧。
- ^ Kleckner, Reid (2011年3月26日). 「Unladen Swallow Retrospective」 . QINSBはソフトウェアブログではありません (qinsb.blogspot.com) .
- ^ 「問題9410: Unladen Swallowの最適化をPython 3のpickleに追加する。 - Pythonトラッカー」。bugs.python.org 。 2019年8月8日閲覧。
- ^ Mark Shannon (2021年4月13日). 「PEP 659 – 適応型インタープリターの特化」 .
- ^ Pablo Galindo Salgado. 「Python 3.11の新機能 § PEP 659: 適応型インタープリタの特化」 .
- ^ Brandt Bucher、Savannah Ostrowski (2024年4月11日). 「PEP 744 – JIT コンパイル」 . 2025年2月5日閲覧。
- ^ 「Python 3.13.3と今後の3.14の新機能 - 初心者向けガイド」 。 2025年4月25日閲覧。
- ^ "PythonImplementations" . 2012年7月19日閲覧。
- ^ 「PEP 11 -- あまり使用されていないプラットフォームのサポートの削除」 . Python.org . 2019年8月8日閲覧。
- ^ 「Irixはまだサポートされていますか?」 2009年2月14日。
- ^ 「AmigaPythonホームページ」www.monkeyhouse.eclipse.co.uk . 2025年2月20日閲覧。
- ^ "I | シリーズ | Python" . I | シリーズ | Python . 2025年2月20日閲覧。
- ^ 「PythonD 32bit Python for DOS and Windows」www.caddit.net . 2025年2月20日閲覧。
- ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 および 3
- ^ 「Google Code アーカイブ - Google Code プロジェクト ホスティング用の長期ストレージ」 . code.google.com . 2025年2月20日閲覧。
- ^ 「Python Windows CE ポート」 . SourceForge . 2018年1月22日. 2025年2月20日閲覧。
- ^ 「パイソン」 . VSI 。2021年8月31日閲覧。
- ^ 「エンタープライズLinuxディストリビューションのサポートライフサイクル」 。 2022年8月30日時点のオリジナルよりアーカイブ。2017年10月15日閲覧。
- ^ 「Ubuntuリリースサイクル」 . Ubuntu . 2021年1月18日閲覧。
- ^ 「Python 2のサポート終了に伴い、Ubuntu 20.04 LTSもPython 2の削除に合わせて移行 - Phoronix」phoronix.com . 2020年4月1日閲覧。
- ^ 「 Ubuntu FOCAL のバイナリ パッケージ「python3」」Launchpad.net。
- ^ 「Ubuntu 18.04のサポート期間が2028年に延長」 ServerWatch.com、2018年11月15日。 2019年9月9日閲覧。
- ^ a b「python-defaults パッケージ: Ubuntu」 . Canonical Ltd. 2018年6月8日. 2018年6月8日閲覧。
- ^ a b「python3-defaults パッケージ: Ubuntu」 . Canonical Ltd. 2018年6月8日. 2018年6月8日閲覧。
- ^ Science、カーネギーメロン大学コンピュータースクール。「Ubuntu 16.04 - 2021年にサポート終了 - SCSコンピューティング施設 - カーネギーメロン大学」。computing.cs.cmu.edu。2021年2月15日閲覧。
- ^ a b「Debian 12 bookworm がリリースされました」。debian.org 。
- ^ a b「Debian -- ニュース -- Debian 11 "bullseye" リリース」。debian.org 。2021年8月14日時点のオリジナルよりアーカイブ。 2022年1月4日閲覧。
- ^ 「LTS - Debian Wiki」 . wiki.debian.org . 2021年2月15日閲覧。
- ^ 「Debian -- busterのパッケージpythonの詳細」 . packages.debian.org . 2019年9月13日閲覧。
- ^ 「Debian -- ニュース -- Debian 10 "buster" リリース」 . debian.org . 2021年10月22日時点のオリジナルよりアーカイブ。 2019年8月9日閲覧。
- ^ 「Debian -- ニュース -- Debian 8 長期サポートが終了」 debian.org . 2021年2月15日閲覧。
- ^ 「DistroWatch.com: Debian」 . DistroWatch.com. 2017年10月15日. 2017年10月15日閲覧。
- ^ 「Debian -- stretchのパッケージpython3の詳細」 。 2017年12月19日閲覧。
- ^ 「RHEL 8 の Python」 . Red Hat 開発者ブログ. 2018年11月14日. 2019年5月10日時点のオリジナルよりアーカイブ。 2019年5月10日閲覧。
- ^ 「Red Hat Enterprise Linux ライフサイクル」 . Red Hat カスタマーポータル. 2020年4月1日閲覧。
- ^ 「DistroWatch.com: Red Hat Enterprise Linux」 . DistroWatch.com. 2017年9月7日. 2017年10月15日閲覧。
- ^ 「DistroWatch.com: CentOS」 . DistroWatch.com. 2017年9月14日. 2017年10月15日閲覧。
- ^ 「リリースノート | SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA」 . suse.com . 2019年8月8日閲覧。
- ^ a b「DistroWatch.com: openSUSE」 . DistroWatch.com. 2017年10月14日. 2017年10月15日閲覧。
- ^アレックス・マルテッリ(2006). Python in a Nutshell (第2版). O'Reilly . pp. 5– 7. ISBN 978-0-596-10046-9。
さらに読む
- Shaw, Anthony (2021). CPython Internals: Your Guide to the Python 3 Interpreter . Real Python. ISBN 9781775093343。