Pythonは他のインタプリタ言語とどう違うのでしょうか?
それは髪の分裂を含みます。インタプリタ言語とC#のような「マネージコード」言語や仮想マシン言語(Javaのような)は奇妙な連続体を形成します。機械語でさえ、すべての言語が「解釈されている」と言う人がいます。結局のところ、CPUの電子回路は機械語を「解釈」します。
あなたができる最善のことは、「解釈された」とは、アプリケーションのバイトコードを解釈するソフトウェアの目に見える層があることを意味すると言うことです。「解釈されない」とは、ソフトウェアが(多かれ少なかれ)基盤となるハードウェアによって直接実行されることを意味します。「マネージコード」の人々は、この髪を自由に分割し続けることができます。
Pythonのコンテキストで、「遅延バインディング」の意味を教えてください。
変数は型を持つように宣言されていません。変数は、実際のオブジェクトの割り当てにより、可能な限り遅く型にバインドされます。
Javaはインタプリタ/コンパイルされた言語ですか?
はい。バイトコードにコンパイルされます。バイトコードが解釈されます。私はそれを通訳と呼ぶことを好みます。
しかし、人々は(本当にあいまいな理由で)反対します。あらゆる種類の「コンパイル」ステップの存在は、たとえ最小限であっても、常に人々を混乱させます。バイトコードへの変換は、実行時のプログラムの実際の動作とはほとんど関係がありません。一部の人々は、前処理の「コンパイル」の汚染がまったくない言語だけが解釈できると言いたいです。多くの言語が人間にわかりやすいテキストからインタプリタにわかりやすいバイトコードに翻訳されているため、この例はもう多くありません。Applesoft Basic(80年代に遡る)でさえ、コードを入力したときにこの種の翻訳パスが実行されていました。
一部のJVMはJITを実行します。しない人もいます。いくつかは混合物です。JVMがJITバイトコード変換のみを行うと言うのは正しくありません。一部のJVMはそうします。しない人もいます。
コンパイル/実行の点でPythonとどう違うのですか?
全くない。JavaVMはPythonを実行できます。[簡単に混乱するために、この文脈での「python」という単語は、おそらく「pythonsource」を意味することはできません。Pythonバイトコードを意味する必要があります。]
Javaには「遅延バインディング」がないと言われています。これは、JavaプログラムがPythonよりもわずかに高速であることと関係がありますか?
多分。実行時にJavaバイトコードをマシンコードに変換するJITコンパイラがあるため、Javaプログラムは多くの場合高速です。
静的(「初期」)バインディングは、Javaにとって、CやC ++のような真にコンパイルされた言語で得られるのと同じ種類の利点はありません。この場合、実行時チェックはほとんどありません。Javaはまだ配列境界チェックのようなことをしますが、Cは生の速度のためにそれを省略します。
実際には、「遅延」バインディングに対するペナルティはほとんどありません。Pythonの属性とメソッドは、単純な辞書検索を使用して解決されます。辞書はハッシュです。パフォーマンスはかなり良いです。名前のハッシュは、ハッシュの計算コストを償却する「インターン」文字列リテラルプールに入れることができます。
本当の楽しみのために、PyPyとRPythonを見てください。これは、JITコンパイルを実行できるPythonインタープリターです。あなたは2層のインタプリタに行き着きます。あなたのコードはPyPyによって解釈されます。PyPyはRPythonによって解釈されます。 http://alexgaynor.net/2010/may/15/pypy-future-python/