10

CPythonのコンテキストでは、「バイトコードインタープリター」の概念は実際にはわかりません。誰かが全体像に光を当てることができますか?

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

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

私はまだPythonに慣れていないので、ばかげた質問をしても許してください...どうもありがとうございました!

4

3 に答える 3

15

CPythonは、CでのPythonの実装です。これは最初の実装であり、Pythonについて話すときに人々が意味する主要な実装です。.pyファイルを.pycファイルにコンパイルします。.pycファイルにはバイトコードが含まれています。CPython実装は、これらのバイトコードも解釈します。CPythonはC++で記述されておらず、Cです。

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

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

于 2009-10-29T15:57:51.757 に答える
13

まず、CPythonがバイトコードインタープリターであるという事実は、Pythonのユーザーとしては重要ではありません。先に進んでコードを書いてください。それがどのように実行されるかについて心配する必要はありません。

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

Jythonは前半にすぎません。Pythonソースを読み取り、Javaバイトコードを出力します。JavaバイトコードはJVMによって解釈されます。これはCPythonと同じアーキテクチャですが、2つの注目すべき違いがあります。1つはJavaバイトコードが標準化されて文書化されているのに対し、CPythonバイトコードはPythonの内部と見なされ、いつでも変更できます。2:JVMはCPythonインタープリターよりもはるかに複雑です。JVMには世界で最も先進的なJITエンジンの1つがありますが、CPythonインタープリターは非常にシンプルです。

于 2011-07-26T12:43:49.267 に答える
8

CPythonは、バイトコードコンパイラであり、インタプリタ(仮想マシン)でもあります。

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

于 2009-10-29T15:42:45.387 に答える