質問: コンパイラ言語とインタプリタ言語の違いは分かりましたが インタプリタとスプリクト言語の違いがいまいち分かりません。 また、コンパイラ言語とインタプリタの両方の言語を習得しておいたほうが良いということですか? よろしくお願い致します。
回答: コンパイラ言語とインタプリタ言語の区別は、言語を学習する際ににはあまり意味がありません。 実行する手順だけの違いだからです。 一般に、 ・コンパイル(ソースプログラムファイルを読んでオブジェクトプログラムファイルを書く)と、 ・実行(オブジェクトプログラムファイルをメモリに読み込んでCPUが実行する)が 別のタイミングに別れているものをコンパイラ言語と言います(実際にはリンクというステップがあるのですが混乱するといけないので割愛)。 2つが別れていない、つまり、ソースプログラムファイルを読んでコンパイルし、メモリ上にオブジェクトプログラムを作成して、引き続きそのままメモリ上のオブジェクトプログラムを実行するものを、インタプリタ言語と呼びます。 昔のインタプリタ言語は、ソースプログラムを読みながら実行していたのですが、今はメジャーな言語でそういう言語は無いと思います(そうすると遅いので)。 つまり、今のインタプリタ言語は、昔の(本来の意味の)インタプリタ言語とは違うので、区別するために、今のインタプリタ言語をスクリプト言語という事も多いです。 オブジェクトプログラムというのは、CPUが直接実行できるいわゆる「機械語」のこともあれば、仮想的なCPU(仮想マシン=VM)の実行する仮想的な機械語の事もあります。 JavaVMが有名で、JavaVMという仮想マシンは、Javaだけでなく多くの言語(をコンパイルしたオブジェクトプログラム)を実行できます。 > > コンパイラ言語とインタプリタの両方の言語を習得しておいたほうが良いということですか? > > > 1行目に書いたようにそういう事は意味がありません。 異なった考え方で設計された言語を複数学ぶと良いと思いますよ。