2011-02-05 7 views
1

私のモジュールのいくつかの場所で呼び出される関数を持っている場合、仮想マシンは最初に関数が実行され、他の呼び出しでキャッシュされたコードを使うよりも、ネイティブコードにコンパイルしますか? (.NETのjitコンパイラのような)Pythonのvmは毎回メソッドをコンパイルしますか?

+0

Pythonは関数をマシンコードにコンパイルしません。実行可能な透明なJITはまだありません。 ([Psyco](http://psyco.sourceforge.net/)を見ても、時々不思議に思うかもしれません) – 9000

+0

@ 9000:IronPython、Jython、PyPy? – delnan

+0

@denlan:IronPythonとJythonは、JVMとCLRの基になるJITを使用します。 AFAIK、JythonとJVMのJITは、一般的なCPythonと同じくらい速く動作します。 PyPyはプロダクションの準備ができていますか? – 9000

答えて

9

Pythonモジュールが初めてインポートされるとき、CPython(標準的なPython実装)では、バイトコードにコンパイルされ、.pycファイルに格納されます。その後、必要に応じて.pycファイルが読み込まれ、VMによって解釈されます。 .pycがメモリに読み込まれると、バイトコードはメモリに格納され、関数が呼び出されるとVMによって解釈されます。

CPythonはPythonコードをネイティブの実行可能コードにコンパイルしません。

+0

そして、JITコンパイル(IronPython/.NET、Jython/JVM、PyPy)を行う実装は、結果を捨てるほど愚かではありません。 – delnan

+0

@ ned-batchelderだから私は単純なスクリプトを実行するたびにpycファイルが作成されますか? –

+0

@Ohad:いいえ。彼が言っているように、 '.pyc'ファイルは、ファイルが最初に実行されたとき(または、最新の変更後に最初に実行されたとき)に作成され、後で再利用されます。 – delnan

関連する問題