これは、インタプリタおよびコンパイル済みの言語について読んでいたときに私が思っただけです。
Rubyは、ソースコードが実行時にインタプリタによって処理されるため、間違いなくインタプリタ言語です。
逆に[〜#〜] c [〜#〜]は、ソースコードをコンパイルする必要があるため、コンパイルされた言語です最初にマシンに従って、次に実行します。この結果、実行がはるかに高速になります。
今Pythonに来ています:
これらは、pythonコードが新しいプロセスにインポートされるたびにコンパイルされ、直接実行されたときに解釈されながら.pycを作成することを示唆しています。
それで、私はそれをどの言語と見なす必要がありますか?解釈済みまたはコンパイル済み?そして、その効率はインタプリタやコンパイルされた言語と比べてどうですか?
Wikiの Interpreted Languages ページによると、それは仮想マシンコードにコンパイルされた言語としてリストされていますが、それはどういう意味ですか?
languagesは解釈またはコンパイルされず、むしろ言語実装コードを解釈またはコンパイルします。 Rubyは「解釈された言語」ですが、Rubyàla MacRuby はコンパイルできるため、alwaysインタプリタ言語。
ほぼすべてのPython実装は、コンパイラではなくインタープリタで構成されています。表示される.pyc
ファイルは、Python virtual machine(Javaの.class
ファイルに似ています)。これらは、ネイティブマシンアーキテクチャ用にCコンパイラによって生成されたマシンコードと同じではありません。ただし、一部のPython実装は、 Pythonバイトコードをネイティブマシンコードにコンパイルするジャストインタイムコンパイラの例).
(私はPythonのネイティブマシンコンパイラーを知らないので、「ほとんどすべて」と言いますが、どこにも存在しないと主張したくありません。)
Pythonは解釈されたバイトコードに該当します。 .py
ソースコードは最初に.pyc
としてバイトコードにコンパイルされます。このバイトコードは、解釈(公式CPython)、またはJITコンパイル(PyPy)できます。 Pythonソースコード(.py
)は、IronPython(.Net)やJython(JVM)のように別のバイトコードにコンパイルできます。Python言語。公式のものはバイトコードが解釈されたものであり、バイトコードのJITコンパイルされた実装もあります。
言語のさまざまな実装の速度を比較するには、 ここ を試してください。
コンパイルされたものと解釈されたものは、状況によっては役立つ場合がありますが、技術的な意味で適用すると、誤った二分法になります。
コンパイラー(最も広い意味で)はtranslatorです。プログラムAをプログラムBに変換し、将来の実行のためにマシンMを使用してそれを実行します。
(最も広い意味で)インタープリターはexecutorです。これは、プログラムAを実行するマシンMです。通常、この定義から物理マシン(または物理マシンのように動作する非物理マシン)を除外します。しかし、理論的な観点からは、その区別はやや恣意的です。
たとえば、 re.compile
。正規表現を中間形式に「コンパイル」し、その中間形式が解釈/評価/実行されます。
結局のところ、それはあなたが話している抽象化のレベルとあなたが気にかけていることに依存します。人々はプロセスの最も興味深い部分の広い説明として「コンパイルされた」または「解釈された」と言いますが、実際、ほとんどすべてのプログラムは何らかの方法でコンパイル(翻訳)され、解釈(実行)されます。
CPython(Python言語の最も一般的な実装)は、コードを実行するために最も興味深いものです。したがって、CPythonは通常、解釈されたものとして記述されます。これは緩いラベルですが。
仮想マシンコードは、元のソースコード(バイトコード)のよりコンパクトなバージョンです。それはマシンコードではないため、仮想マシンで解釈する必要があります。ただし、人間が書いた元のコードよりも解析が簡単で高速です。
一部の仮想マシンは、仮想マシンコードを初めて解釈するときにマシンコードを生成します(ジャストインコンパイル-JIT)。次の呼び出しでは、このマシンコードを直接使用するため、実行が高速になります。
私が知る限り、Ruby> = 1.9はPythonのような仮想マシンを使用します。
Pythonランタイムは、仮想マシンでカスタムオブジェクトコード(バイトコード)を実行します。
コンパイルプロセスは、ソースコードをオブジェクトコードに変換します。
処理を高速化するために、オブジェクトコード(または、必要に応じてバイトコード)がディスクに保存されるため、次にプログラムを実行するときに再利用できます。