このテーマに関するいくつかの資料を読んだ後でも、コンパイルされた言語とインタープリター言語の違いが何であるかはまだわかりません。これはJavaとJavaScriptの違いの1つだと言われました。誰かがそれを理解するのを手伝ってくれませんか?
このテーマに関するいくつかの資料を読んだ後でも、コンパイルされた言語とインタープリター言語の違いが何であるかはまだわかりません。これはJavaとJavaScriptの違いの1つだと言われました。誰かがそれを理解するのを手伝ってくれませんか?
回答:
コンパイル済み言語とインタープリター型言語の違いは何ですか?
違いは言語ではありません。それはである実装。
私のシステムからそれを取り除いたので、ここに答えがあります:
コンパイルされた実装では、元のプログラムはネイティブのマシン命令に変換され、ハードウェアによって直接実行されます。
解釈された実装では、元のプログラムが別のプログラムに翻訳されます。「インタプリタ」と呼ばれる別のプログラムは、「何か他のもの」を検査し、要求されたアクションを実行します。言語とその実装に応じて、「何か他のもの」にはさまざまな形式があります。人気の高いものからそれほど人気のないものまで、「何か他のもの」は
Lua、Python、Ruby、Smalltalk、および他の多くのシステムで行われているように、バイトコードと呼ばれることが多い仮想マシン用のバイナリ命令(このアプローチは、1970年代にUCSD PシステムとUCSD Pascalによって普及しました)
多くのプロトタイプまたは教育通訳者のために行われる、抽象構文木などの元のプログラムのツリーのような表現
Tclに似た、ソースプログラムのトークン化表現
MINTおよびTRACで行われた、ソースプログラムの文字
この問題を複雑にしているのは、バイトコードをネイティブマシン命令に変換(コンパイル)できることです。したがって、正常に解釈された実装は、最終的にコンパイラーを取得する可能性があります。コンパイラーがバックグラウンドで動的に実行される場合、それはしばしばジャストインタイムコンパイラーまたはJITコンパイラーと呼ばれます。JITはJava、JavaScript、Lua向けに開発されており、他の多くの言語にも挑戦しています。その時点で、一部のコードが解釈され、一部のコードがコンパイルされるハイブリッド実装を使用できます。
JavaとJavaScriptはどちらもインタプリタ言語であるため、この違いを示すにはかなり悪い例です。Java (解釈済み)およびC(またはC ++)(コンパイル済み)は、より良い例でした。
なぜ取り消し線付きのテキストですか?この答えは正しく指摘し、インタプリタ/コンパイル言語の具体的な実装について、ではない言語についてです、それ自体が。「Cはコンパイルされた言語です」のようなステートメントは一般的に真実ですが、誰かがC言語インタープリターを書くのを妨げるものは何もありません。実際、Cのインタープリターは存在します。
基本的に、コンパイルされたコードは、コンピューターのCPUによって直接実行できます。つまり、実行可能コードは、CPUの「ネイティブ」言語(アセンブリ言語)で指定されます。
ただし、インタープリター言語のコードは、実行時に任意の形式からCPUマシン命令に変換する必要があります。この翻訳は通訳によって行われます。
言い換えると、解釈された言語は、プログラムの実行中にコードが機械命令に段階的に変換され、コンパイルされた言語はプログラムの実行前にコードが変換されているというものです。
コンパイラー言語とインタープリター言語の基本的な違いは次のとおりです。
コンパイラー言語
通訳言語:
コンパイラーは、一般に、高水準言語のコンピューター・コードを読み取り、それをpコードまたはネイティブ・マシン・コードに変換します。インタープリターは、pコードまたはBasicやLispなどのインタープリターコードから直接実行されます。通常、コンパイルされたコードはより高速に実行され、よりコンパクトであり、すべての構文エラーと多くの不正な参照エラーをすでに検出しています。解釈されたコードは、アプリケーションが影響を受けるコードを解釈しようとした後にのみ、このようなエラーを検出します。解釈されたコードは、1回または多くても2回しか使用されない単純なアプリケーションや、プロトタイピングにさえ適していることがよくあります。コンパイルされたコードは、深刻なアプリケーションに適しています。コンパイラは最初にプログラム全体を取り込み、エラーをチェックしてコンパイルし、次に実行します。一方、インタプリタはこの行を1行ずつ行うため、1行でエラーをチェックします。
さらに情報が必要な場合は、「コンパイラとインタープリタの違い」をGoogleで確認してください。
これは非常にあいまいな違いであり、実際には一般に、言語自体のプロパティではなく、その言語でコードを実行するために使用しているプログラムのプロパティです。
ただし、ほとんどの言語は主にいずれかの形式で使用され、はい、Javaは本質的に常にコンパイルされますが、JavaScriptは本質的に常に解釈されます。
ソースコードをコンパイルすることは、実行時にソースによって定義された動作を持つバイナリの実行可能ファイルを生成するプログラムを実行することです。たとえば、javacは人間が読み取れる.javaファイルを機械可読の.classファイルにコンパイルします。
ソースコードを解釈するには、中間ファイルを生成せずに、定義された動作をすぐに生成するプログラムを実行します。たとえば、Webブラウザーがstackoverflow.comを読み込むと、JavaScriptの束(ページのソースを表示して確認できます)を解釈し、これらのページが持つ多くの素晴らしい効果(賛成投票、小さな通知など)を生成します。上部のバー。
解釈された言語は、シェルスクリプトのような指示に従って実行時に実行され、コンパイルされた言語は、コンパイルされ(アセンブリ言語に変更され、CPUが理解できる)、C ++のように実行されます。
他の人が言ったように、コンパイルおよび解釈はプログラミング言語の実装に固有です。言語固有のものではありません。たとえば、Cインタプリタがあります。
ただし、プログラミング言語は、最も一般的な(場合によっては正規の)実装に基づいて分類できます(実際には分類できます)。たとえば、Cがコンパイルされたとします。
まず、曖昧さのないインタプリタとコンパイラを定義する必要があります。
インタプリタ言語用のXは、任意のプログラムの実行プログラム(またはマシン、または一般に機構のちょうどいくつかの種類)であるP言語で書かれたX、それは効果を行い、仕様で規定されるような結果を評価するようにXを。
コンパイラからXのYは、任意のプログラム変換プログラム(またはマシン、または一般に機構のちょうどいくつかの種類)であるPいくつかの言語からXを意味的に等価なプログラムにP」一部の言語におけるY解釈するようにP 'のためのインタプリタとYと同じ結果をもたらすと解釈と同様の効果を有するであろうPのためのインタプリタとXを。
プログラマーの観点から見ると、CPUはそれぞれのネイティブマシン言語のマシンインタープリターであることに注意してください。
これで、最も一般的な実装に応じて、プログラミング言語を3つのカテゴリに暫定的に分類できます。
時には、ソフトコンパイル言語とハードコンパイル言語は単にコンパイルされたと呼ばれ、C#、Java、C、C ++はコンパイルされたと言われます。
この分類では、JavaScriptは以前はインタプリタ言語でしたが、それは何年も前のことです。今日では、ほとんどの主要なJavaScript実装でネイティブマシン言語にJITコンパイルされているため、ソフトコンパイル言語に分類されます。