CPython
CPython は、Pythonのリファレンス実装である。CPython は C言語で記述されている。CPython 以外に、製品としての品質をもつ Python 実装はJava で記述された Jython、共通言語ランタイム 用に記述された IronPython の2つがあり、またいくつかの実験的な実装もある。Classic Python というバクロニムが、'C' の別の意味として提案されている。 CPython はバイトコードインタプリタである。C を含むいくつかの言語での外部関数インターフェイスを持っており、Python 以外の言語の言語バインディングを明示的に書く場合に使用される。 機能拡張モジュールCPython における 拡張モジュールは Python 言語の仕様ではなく CPython ランタイムの仕様であるため、拡張モジュールは他のランタイムでは一般に機能しない[2]。 Cython は拡張モジュールを活用している代表的なコンパイラである[3]。 サポートされているプラットフォームUNIX / Unix系
デスクトップオペレーティングシステム特殊用途、組み込み
メインフレームなどかつてサポートされていたプラットフォームPEP 11にはPython Software FoundationのCPythonではサポートされていないプラットフォームの一覧がある。これらのプラットフォームは現在でも非公式の移植版でサポートされている。下記参照。 非公式の移植版Python Software Foundationの公式版の CPython に統合されていない移植版が存在する。 移植版には、PSP 用のグラフィックスやサウンド API や S60 用の SMS やカメラ API などのプラットフォーム固有の機能のための拡張モジュールが提供されることが多い。
並列性に関する問題マルチプロセッサのコンピュータで CPython を用いる際の大きな問題は、各 CPython インタプリタのプロセスが持つグローバルインタプリタロック(GIL)であり、これがプロセス内の Python スレッドの並列性を損なってしまう[4]。 マルチプロセッサ環境で完全な並列性を実現するためには別の CPython プロセスを動作させる必要がある。一般的にプロセス間の通信を実現することは困難な作業となるが、CPythonでは標準ライブラリを使い容易に実現させることが可能である[5]。CPython から GIL を取り除くことについては常に議論が行われている[6]。 バイトコードPythonにおけるバイトコード(英: bytecode)はCPythonが内部的に利用する中間表現である[7]。 CPythonではPythonコードをバイトコードへコンパイルし、このバイトコードをインタープリタによって実行する[8]。コードからバイトコードへのコンパイル結果は バイトコードはあくまでCPythonの内部表現/実装詳細であり、CPythonのバージョン間や他Python実行環境との互換性は保証されない[10][11]。 脚注出典
参考文献
関連項目 |