CPython
作者 | グイド・ヴァンロッサム |
---|---|
開発元 | Python Software Foundation |
初版 | 1991年4月 |
最新版 |
3.12.3
/ 2024年4月9日 |
最新評価版 |
3.13.0a6
/ 2024年4月9日 |
リポジトリ | |
プログラミング 言語 | C言語 |
プラットフォーム | 42のプラットフォーム 本文参照 |
種別 | Python Programming Language Interpreter |
ライセンス | Python Software Foundation License |
公式サイト |
www |
CPython は、Pythonのリファレンス実装である。CPython は C言語で記述されている。CPython 以外に、製品としての品質をもつ Python 実装はJava で記述された Jython、共通言語ランタイム 用に記述された IronPython の2つがあり、またいくつかの実験的な実装もある。Classic Python というバクロニムが、'C' の別の意味として提案されている。
CPython はバイトコードインタプリタである。C を含むいくつかの言語での外部関数インターフェイスを持っており、Python 以外の言語の言語バインディングを明示的に書く場合に使用される。
サポートされているプラットフォーム
[編集]UNIX / Unix系
[編集]- AIX
- BSD
- Darwin
- FreeBSD
- HP-UX
- IRIX 5 以上
- Plan 9 from Bell Labs
- NetBSD
- Linux
- OpenBSD
- Solaris
- Tru64 UNIX
- その他の Unix
デスクトップオペレーティングシステム
[編集]特殊用途、組み込み
[編集]- GP2X
- iPodLinux
- ニンテンドーDS
- ニンテンドーゲームキューブ
- Nokia 770 Internet Tablet
- Nokia N800
- Nokia N810
- Palm OS
- PlayStation 2
- PlayStation 3 (Linux)
- PSION
- QNX
- Sharp ザウルス
- Xbox/Xbmc
- VxWorks
メインフレームなど
[編集]かつてサポートされていたプラットフォーム
[編集]PEP 11にはPython Software FoundationのCPythonではサポートされていないプラットフォームの一覧がある。これらのプラットフォームは現在でも非公式の移植版でサポートされている。下記参照。
非公式の移植版
[編集]Python Software Foundationの公式版の CPython に統合されていない移植版が存在する。
移植版には、PSP 用のグラフィックスやサウンド API や S60 用の SMS やカメラ API などのプラットフォーム固有の機能のための拡張モジュールが提供されることが多い。
- Amiga [1]
- AS/400 [2]
- DOS (DJGPPを使用) [3]
- PlayStation Portable [4]
- Symbian OS [5]
- Windows CE/Pocket PC [6]
並列性に関する問題
[編集]マルチプロセッサのコンピュータで CPython を用いる際の大きな問題は、各 CPython インタプリタのプロセスが持つグローバルインタプリタロック(GIL)であり、これがプロセス内の Python スレッドの並列性を損なってしまう[1]。
マルチプロセッサ環境で完全な並列性を実現するためには別の CPython プロセスを動作させる必要がある。一般的にプロセス間の通信を実現することは困難な作業となるが、CPythonでは標準ライブラリを使い容易に実現させることが可能である[2]。CPython から GIL を取り除くことについては常に議論が行われている[3]。
バイトコード
[編集]Pythonにおけるバイトコード(英: bytecode)はCPythonが内部的に利用する中間表現である[4]。
CPythonではPythonコードをバイトコードへコンパイルし、このバイトコードをインタープリタによって実行する[5]。コードからバイトコードへのコンパイル結果は .pyc
ファイルとしてキャッシュされ、二度目以降の実行時にはリコンパイル無しにバイトコードが実行される[6]。
バイトコードはあくまでCPythonの内部表現/実装詳細であり、CPythonのバージョン間や他Python実行環境との互換性は保証されない[7][8]。
脚注
[編集]- ^ Python/C API Reference Manual: Thread State and the Global Interpreter Lock
- ^ PEP 371 -- Addition of the multiprocessing package to the standard library
- ^ Python Library and Extension FAQ: Can't we get rid of the Global Interpreter Lock?
- ^ "bytecode ... the internal representation of a Python program in the CPython interpreter." Python. bytecode - Glossary. Python 3.11.5 Documentation. 2023-09-01閲覧.
- ^ "Python source code is compiled into bytecode ... This 'intermediate language' is said to run on a virtual machine" Python. bytecode - Glossary. Python 3.11.5 Documentation. 2023-09-01閲覧.
- ^ "The bytecode is also cached in
.pyc
files so that executing the same file is faster the second time (recompilation from source to bytecode can be avoided)." Python. bytecode - Glossary. Python 3.11.5 Documentation. 2023-09-01閲覧. - ^ "Do note that bytecodes are not expected to work between different Python virtual machines, nor to be stable between Python releases." Python. bytecode - Glossary. Python 3.11.5 Documentation. 2023-09-01閲覧.
- ^ "CPython implementation detail: Bytecode is an implementation detail of the CPython interpreter." Python.
dis
— Disassembler for Python bytecode. Python 3.11.5 Documentation. 2023-09-01閲覧.
参考文献
[編集]- Martelli, Alex (2006). Python in a Nutshell (2nd edition ed.). O'Reilly. pp. 5?7. ISBN 0-596-10046-9