コンピュータは人間が話す言葉を直接理解できるわけではなく、実際には 非常に細かい命令、たとえば「今ある数字に1を足せ」のような命令を数字に置 き換えたものを解釈実行する。
しかし、このような数字の羅列は人間にとって分かりづらいばかりか、何か
の処理を記述する場合には非常に手間がかかる。そこで、ある程度まとまった処
理、たとえば「画面に "Hello"
というメッセージを表示せよ」
程度の処理を、人間が読んで分かる表現形式で書くために作られたものが
プログラミング言語である。
たとえば上記の処理は、各種プログラミング言語では以下のように表現する。
WRITE(*,*) "Hello"
printf("Hello");
System.out.println("Hello");
print "Hello"
プログラミング言語で書いたもの(ソースプログラムという)を、
実際にコンピュータに理解できる数値の羅列に変換するソフトウェアを
コンパイラ(Compiler; 翻訳器)と呼ぶ。
コンパイラがソースプログラムを一括変換するのとは対照的に、
ソースプログラムを読みながら逐一それに必要な処理を呼び出すこ
とでプログラムの実行を行うソフトウェアがあり、これをインタプリタ
(Interpreter; 通訳器)という。2年次に習った Ruby 言語は、インタプリタ
型言語であり、ruby
というコマンドが、呼び出されたときに
逐次プログラムを解析しながら書かれたとおりのことを実行する。
コンパイラ、インタプリタの種別にかかわらず、あるプログラミング言語で 書かれたソースプログラムを実際に実行させるところまでの処理を行うシステム を言語処理系と呼ぶ。我々がC言語の学習に用いる言語処理系は GCC (GNU Compiler Collection)といい、Free Software Foundation という 世界規模の団体が十数年前から開発を続けて無料で世界中に配付している。
コンパイラを用いてあらかじめ全て機械語に直してしまったものを実行する 場合は、機械の持つ本来の速度で実行することができるが、インタプリタの場合 はプログラム実行時に
これとは逆に、コンパイラ型言語は、最初に機械が直接理解できる機械語に 直してしまうので、コンピュータの持つ本来の能力でプログラムを動かすことが できる。ただし、最初にプログラムの全ての部分を翻訳を完了させなければなら ないので、プログラムに文法的間違いがなくなるまでいっさい実行させることが できない。