計算機は人間が話す言葉を直接理解できるわけではなく、実際には
非常に細かい命令、たとえば「今ある数字に1を足せ」のような命令を数字に置
き換えたものを解釈実行する。
機械語の例:
0000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
0000020 01 00 03 00 01 00 00 00 00 00 00 00 00 00 00 00
0000040 88 00 00 00 00 00 00 00 34 00 00 00 00 00 28 00
0000060 08 00 05 00 55 89 e5 b8 99 99 00 00 40 c9 c3 00
:
:
右下付近にある40というのが「1足せ」という意
味をもつ機械語だが、周囲も含めてちっとも想像がつかない。プログラムを作る
場合このような数字の羅列は人間には分かりづらいので、記述する場合に非常に
手間がかかる。そこで、ある程度まとまった処理、たとえば「画面に
"Hello"
というメッセージを表示せよ」程度の処理を、人間が読ん
で分かる表現形式で書くために作られたものがプログラミング言語であ
る。
たとえば上記の処理は、各種プログラミング言語では以下のように表現する。
WRITE(*,*) "Hello"
print "Hello"
print "Hello";
print "Hello"
機械語と違い、単語を見ればなんとなく指令している内容が分かるだろう。
プログラミング言語の文法に則って書かれたプログラムを ソースプログラムという。 これを実際に計算機に理解できる数値の羅列(機械語)に変換するソフトウェアを コンパイラ(Compiler; 翻訳器)という。 コンパイラはソースプログラムを機械語に一括変換するので、 プログラムを作るときは最初に文法的に完全に正しいものを書く必要がある。
いっぽう、ソースプログラムを読みながら逐一それに必要な処理を呼び出すこ
とでプログラムの実行を行なうソフトウェアがあり、これをインタプリタ
(Interpreter; 通訳器)という。これから習う Ruby 言語は、インタプリタ
型言語であり、ruby
というコマンドが、呼び出されたときに
逐一プログラムを解析しながら書かれたとおりのことを実行する。
コンパイラ、インタプリタの種別にかかわらず、あるプログラミング言語で 書かれたソースプログラムを実際に実行させるところまでの処理を行なうシステム を言語処理系という。これから利用する Ruby 言語を動かすシステムも 言語処理系の一つである。
コンパイラを用いてあらかじめ全て機械語に直してしまったものを実行する 場合は、機械の持つ本来の速度で実行することができるが、インタプリタは それよりも遅い。インタプリタでは、プログラムを実行時に
などの処理を同時に行わなければならないので動作速度が非常に遅くなる。 反面、インタプリタはソースプログラムのどこかに書き間違いがあっても、 とりあえず正しく動く部分だけで実行することができるし、プログラムに 間違いがあった場合はその場で動作を止めて該当箇所を画面に表示してくれる。 したがってプログラミングに慣れていない人が、間違いを修正しながらプログラ ムを作成していくのに向いている。
これとは逆に、コンパイラ型言語はあらかじめ全てを機械語に 直してから実行するので、計算機の持つ本来の能力でプログラムを動かすことが できる。ただし、最初にプログラムの全ての部分の翻訳を完了させなければなら ないので、プログラムのほんの一部分に間違いがあるだけでも いっさい実行させることができない。
以上のような特徴があるが、現在の計算機の速度はインタプリタの遅さを実 感させない程度に向上している。インタプリタ型言語は、初心者の練習だけでな く本格的な用途にまで幅広く対応できる。