コンピュータは人間が話す言葉を直接理解できるわけではなく、実際には 非常に細かい命令、たとえば「今ある数字に1を足せ」のような命令を数字に置 き換えたものを解釈実行する。

しかし、このような数字の羅列は人間にとって分かりづらいばかりか、何か の処理を記述する場合には非常に手間がかかる。そこで、ある程度まとまった処 理、たとえば「画面に "Hello" というメッセージを表示せよ」 程度の処理を、人間が読んで分かる表現形式で書くために作られたものが プログラミング言語である。

たとえば上記の処理は、各種プログラミング言語では以下のように表現する。

Fortran
WRITE(*,*) "Hello"
Basic
print "Hello"
Perl
print "Hello";
Ruby言語
print "Hello"

言語処理系

プログラミング言語で書いたもの(ソースプログラムという)を、 実際にコンピュータに理解できる数値の羅列に変換するソフトウェアを コンパイラ(Compiler; 翻訳器)と呼ぶ。 コンパイラがソースプログラムを一括変換するのとは対照的に、 ソースプログラムを読みながら逐一それに必要な処理を呼び出すこ とでプログラムの実行を行うソフトウェアがあり、これをインタプリタ (Interpreter; 通訳器)という。今回利用する Ruby 言語は、インタプリタ 型言語であり、ruby というコマンドが、呼び出されたときに 逐次プログラムを解析しながら書かれた通りのことを実行する。

コンパイラ、インタプリタの種別にかかわらず、あるプログラミング言語で 書かれたソースプログラムを実際に実行させるところまでの処理を行うシステム を言語処理系と呼ぶ。これから利用する Ruby 言語を動かすシステムも 言語処理系の一つである。

コンパイラとインタプリタ

コンパイラを用いてあらかじめ全て機械語に直してしまったものを実行する 場合は、機械の持つ本来の速度で実行することができるが、インタプリタの場合 はプログラム実行時に

  1. ソースプログラムを読み込み
  2. 意味のあるかたまりごとに分解し
  3. それぞれに文法エラーが無いか調べあればそれを警告し
  4. エラーが無ければあらかじめ作っておいた同等の処理を呼び出す

などの処理を同時に行わなければならないので動作速度は非常に遅くなる。 しかし、インタプリタはソースプログラムの全てが文法通りに書かれてていなく ても、とりあえず正しく動く部分だけで実行することができるし、プログラムに 間違いがあった場合もその場で動作を止めて、該当箇所を画面に表示してくれる。 したがってプログラミングに慣れていない人が、間違いを修正しながらプログラ ムを作成していくのに向いている。

これとは逆に、コンパイラ型言語は、最初に機械が直接理解できる機械語に 直してしまうので、コンピュータの持つ本来の能力でプログラムを動かすことが できる。ただし、最初にプログラムの全ての部分を翻訳を完了させなければなら ないので、プログラムに文法的間違いがなくなるまでいっさい実行させることが できない。


(C)2005 OKOMA Lab. koeki-u.ac.jp