2009-10-29 6 views
9

私は実際にCPythonの文脈で "バイトコードインタプリタ"の概念を得ていません。誰かが全体の画像にいくつかの光を当てることができますか?CPythonはバイトコードインタープリタですか?

CPythonがpycファイル(バイトコードファイル?)をコンパイルして実行することを意味しますか?それではpyファイルをpycファイルにコンパイルするのですか?また、JythonはCPythonとどう違うのですか(異なる言語で実装されている点を除きます)。

私はPythonがC++の解釈であるとも読んでいます。これは正しいです?それはどういう意味ですか?

私はまだPythonの新機能ですので、私がダムの質問をしたら私を許してください... ありがとうございました!

答えて

12

CPythonはCでPythonを実装したものです。これは最初の実装であり、依然として人々がPythonについて話すときの主なものです。 .pyファイルを.pycファイルにコンパイルします。 .pycファイルにはバイトコードが含まれます。 CPythonの実装は、これらのバイトコードも解釈します。 CPythonはC++で書かれていませんが、Cです。

.pyから.pycへのコンパイルは、必要に応じて透過的に行われます。 .pyファイルを実行すると、必要に応じて.pycファイルにコンパイルされ、.pycファイルが解釈されます。

Jythonは(CではなくJavaで実装されていることに加えて).pyファイルを.classファイルにコンパイルしてJVMで実行できるため、Jythonは異なります。

+0

JythonはPythonコードをJavaに変換してから、Javeバイトコードにコンパイルしますか? – Nope

+0

Javaを中間形式として生成するかどうかわかりません。 –

+3

AFAIK Jythonは要求された場合に中間形式としてJavaを生成できますが、通常はJavaバイトコードを生成します。 – MAK

7

CPythonは、バイトコードコンパイラとインタープリタ(仮想マシン)の両方です。

既存のプリコンパイラファイル(.pyc)が存在しないかどうかを自動的に検出し、コードをコンパイルして保存します。

10

最初に:CPythonがバイトコードインタープリタであるという事実は、Pythonのユーザーとしてあなたにとって重要ではありません。コードを書いて、それがどのように行動に変わったのか心配しないでください。

あなたの質問に答えて好奇心を満たすために、CPythonはPythonのソースコードを読み込み、.pycファイルに格納されているPythonバイトコードにコンパイルします。次に、バイトコードインタプリタを使用してそのコードを実行します。この設計では、Pythonの解析と実行の分離が行われ、インタプリタの両方の部分がよりシンプルになります。

JythonはPythonソースを読み込み、Javaバイトコードを出力します。このバイトコードはJVMによって解釈されます。一つは、Javaのバイトコードが標準化され、文書化されているのに対して、CPythonのバイトコードはPythonの内部であると考えられており、いつでも変更することができます。 2つ目は、JVMはCPythonインタプリタよりずっと複雑です。 JVMは、世界で最も高度なJITエンジンの1つを持っていますが、CPythonインタープリタはかなりシンプルです。

+1

後半ですが、これは非常に詳細な説明です。ありがとうございました! – huy

関連する問題