CPython

CPython は、Pythonのリファレンス実装である。CPython は C言語で記述されている。CPython 以外に、製品としての品質をもつ Python 実装はJava で記述された Jython、共通言語ランタイム 用に記述された IronPython の2つがあり、またいくつかの実験的な実装もある。Classic Python というバクロニムが、'C' の別の意味として提案されている。

CPython はバイトコードインタプリタである。C を含むいくつかの言語での外部関数インターフェイスを持っており、Python 以外の言語の言語バインディングを明示的に書く場合に使用される。

 機能 

 拡張モジュール 
CPython におけるは Python インタプリタに組み込みオブジェクト・Cライブラリコール・システムコールを追加する機能である。

拡張モジュールは Python 言語の仕様ではなく CPython ランタイムの仕様であるため、拡張モジュールは他のランタイムでは一般に機能しない。

Cython は拡張モジュールを活用している代表的なコンパイラである。

 サポートされているプラットフォーム 
 UNIX / Unix系 
 AIX
 BSD
 Darwin
 macOS
 FreeBSD
 HP-UX
 IRIX 5 以上
 Plan 9 from Bell Labs
 NetBSD
 Linux
 OpenBSD
 Solaris
 Tru64 UNIX
 その他の Unix

 デスクトップオペレーティングシステム 
 AROS
 AtheOS
 BeOS
 Windows
 Windows NT
 OS/2
 RISC OS

 特殊用途、組み込み 
 GP2X 
 iPodLinux
 ニンテンドーDS
 ニンテンドー ゲームキューブ
 Nokia 770 Internet Tablet
 Nokia N800
 Nokia N810
 Palm OS 
 PlayStation 2
 PlayStation 3 (Linux)
 PSION
 QNX
 Sharp ザウルス
 Xbox/Xbmc
 VxWorks

 メインフレームなど 
 OS/390
 VMS
 z/OS

 かつてサポートされていたプラットフォーム 
PEP 11にはPython Software FoundationのCPythonではサポートされていないプラットフォームの一覧がある。これらのプラットフォームは現在でも非公式の移植版でサポートされている。下記参照。
 DOS (2.0以降非サポート)
 IRIX 4 (2.3以降非サポート)
 Mac OS 9 (2.4以降非サポート)
 MINIX (2.3以降非サポート)

 非公式の移植版 
Python Software Foundationの公式版の CPython に統合されていない移植版が存在する。

移植版には、PSP 用のグラフィックスやサウンド API や S60 用の SMS やカメラ API などのプラットフォーム固有の機能のための拡張モジュールが提供されることが多い。

 Amiga 
 AS/400 
 DOS (DJGPPを使用) 
 PlayStation Portable 
 Symbian OS 
 Windows CE/Pocket PC 

 並列性に関する問題 
マルチプロセッサのコンピュータで CPython を用いる際の大きな問題は、各 CPython インタプリタのプロセスが持つグローバルインタプリタロック（GIL）であり、これがプロセス内の Python スレッドの並列性を損なってしまうPython/C API Reference Manual: Thread State and the Global Interpreter Lock。

マルチプロセッサ環境で完全な並列性を実現するためには別の CPython プロセスを動作させる必要がある。一般的にプロセス間の通信を実現することは困難な作業となるが、CPythonでは標準ライブラリを使い容易に実現させることが可能であるPEP 371 -- Addition of the multiprocessing package to the standard library。CPython から GIL を取り除くことについては常に議論が行われているPython Library and Extension FAQ: Can't we get rid of the Global Interpreter Lock?。

 バイトコード 
Pythonにおけるバイトコード（）はCPythonが内部的に利用する中間表現である"bytecode ... the internal representation of a Python program in the CPython interpreter." Python. bytecode - Glossary. Python 3.11.5 Documentation. 2023-09-01閲覧.。

CPythonではPythonコードをバイトコードへコンパイルし、このバイトコードをインタープリタによって実行する"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閲覧.。コードからバイトコードへのコンパイル結果は .pyc ファイルとしてキャッシュされ、二度目以降の実行時にはリコンパイル無しにバイトコードが実行される"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閲覧.。

バイトコードはあくまでCPythonの内部表現/実装詳細であり、CPythonのバージョン間や他Python実行環境との互換性は保証されない"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閲覧.。

 脚注 

 出典 

 参考文献 


 関連項目 

 Python
 Cython

*
Category:Pythonの実装
CPYTHON
Category:オープンソースソフトウェア
Category:Cでプログラムされた自由ソフトウェア