CPython
作者 グイド・ヴァンロッサム
開発元 Python Software Foundation
初版 1991年4月 (35年前) (1991-04)
最新版
3.13.3 / 2025年4月8日 (14か月前) (2025-04-08)
最新評価版
3.14.0a7 / 2025年4月8日 (14か月前) (2025-04-08)
リポジトリ ウィキデータを編集
プログラミング
言語
C言語
プラットフォーム 42のプラットフォーム 本文参照
種別 Python Programming Language Interpreter
ライセンス Python Software Foundation License
公式サイト www.python.org ウィキデータを編集
テンプレートを表示

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

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

機能

編集

拡張モジュール

編集

CPython における拡張モジュールかくちょうモジュール: extension module)は Python インタプリタに組み込みオブジェクト・Cライブラリコール・システムコールを追加する機能である[1]

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

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

サポートされているプラットフォーム

編集

UNIX / Unix系

編集

デスクトップオペレーティングシステム

編集

特殊用途、組み込み

編集

メインフレームなど

編集

かつてサポートされていたプラットフォーム

編集

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 などのプラットフォーム固有の機能のための拡張モジュールが提供されることが多い。

並列性に関する問題

編集

マルチプロセッサのコンピュータで CPython を用いる際の大きな問題は、各 CPython インタプリタのプロセスが持つグローバルインタプリタロック(GIL)であり、これがプロセス内の Python スレッドの並列性を損なってしまう[4]

マルチプロセッサ環境で完全な並列性を実現するためには別の CPython プロセスを動作させる必要がある。一般的にプロセス間の通信を実現することは困難な作業となるが、CPythonでは標準ライブラリを使い容易に実現させることが可能である[5]。CPython から GIL を取り除くことについては常に議論が行われている[6]

バイトコード

編集

Pythonにおけるバイトコード: bytecode)はCPythonが内部的に利用する中間表現である[7]

CPythonではPythonコードをバイトコードへコンパイルし、このバイトコードをインタープリタによって実行する[8]。コードからバイトコードへのコンパイル結果は .pyc ファイルとしてキャッシュされ、二度目以降の実行時にはリコンパイル無しにバイトコードが実行される[9]

バイトコードはあくまでCPythonの内部表現/実装詳細であり、CPythonのバージョン間や他Python実行環境との互換性は保証されない[10][11]

脚注

編集

出典

編集
  1. ^ 拡張モジュール (extension module) を使うと ... 新しい組み込みオブジェクトの実装、そして全ての C ライブラリ関数とシステムコールに対する呼び出し、ができるようになります。1. C や C++ による Python の拡張”. Python 3.13.4 documentation. 2025年6月11日閲覧。
  2. ^ C 拡張のインターフェイスは CPython に固有のものであり、これによる拡張モジュールはほかの Python 実装では動作しません。1. C や C++ による Python の拡張”. Python 3.13.4 documentation. 2025年6月11日閲覧。
  3. ^ [Cython] is a programming language that makes writing C extensions for the Python languageCython - an overview”. Cython 3.1.2 documentation. 2025年6月11日閲覧。
  4. ^ Python/C API Reference Manual: Thread State and the Global Interpreter Lock
  5. ^ PEP 371 -- Addition of the multiprocessing package to the standard library
  6. ^ Python Library and Extension FAQ: Can't we get rid of the Global Interpreter Lock?
  7. ^ "bytecode ... the internal representation of a Python program in the CPython interpreter." Python. bytecode - Glossary. Python 3.11.5 Documentation. 2023-09-01閲覧.
  8. ^ "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閲覧.
  9. ^ "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閲覧.
  10. ^ "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閲覧.
  11. ^ "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 

関連項目

編集

📚 Artikel Terkait di Wikipedia

WebAssembly

のプログラミング言語ソフトウェア賞を受賞した。World Wide Web Consortium (W3C) が技術標準を管理しており、有名な大企業なども加盟する非営利団体「Bytecode Alliance」が貢献している。 WebAssembly という命名は、1950年代にまで遡る「アセンブリ言語」の概念を想起させるためのも

Javaバイトコード

Java仮想マシン 共通中間言語 (CIL) ^ Understanding bytecode makes you a better programmer[リンク切れ] ^ Java bytecode: Understanding bytecode makes you a better programmer |

バイトコード

バイトコード(英: bytecode / byte code)とは、プログラムを仮想マシンが実行できる形に変換した中間命令列である。ソースコードと機械語の中間に位置づけられ、異なる計算機環境間でのプログラムの移植性確保や実行処理の効率化を目的として用いられる。一般に命令はバイト単位で構成され、解釈実

オペコード

Beginners - Introduction ^ IBMのドキュメント, opcodes in assembler ^ Assembly Language Opcodes ^ Intel 80x86 Assembly Language OpCodes ^ bytecode Definition

Vulkan (API)

Vulkan has to be specified in a bytecode format as opposed to human-readable syntax like GLSL and HLSL. This bytecode format is called SPIR-V" 以下より引用。Khronos

中間表現

8でプログラマブルシェーダーが導入された当初はアセンブリ言語を利用してシェーダープログラムを記述していたが、このときすでにDXBC(DirectX Bytecode)と呼ばれるGPUベンダー非依存の中間表現を採用していた。まずDirect3Dランタイムがシェーダーコードのバリデーションを実行し、妥当性や有

Parrot

yなどがあるため、Pythonコミュニティは見守る様子を見せている。 Parrot のコードには3つの形態がある。バイトコード(Parrot Bytecode, PBC)はネイティブでParrotに解釈される機械語であり、ほかの2つのコードはIMCC(旧バージョン)またはPIRC(新バージョン)によ

HipHop Virtual Machine

Guys Rebuilt the Foundation of Facebook”. Wired. 2014年9月28日閲覧。 ^ “HipHop Bytecode v1 revision 18”. github.com. Facebook (2014年7月31日). 2013年5月24日閲覧。 ^ “facebook/hhvm”