植物 植物
初心者講座:プログラム言語

AOBA's Information Processing Education



1998/04/19

注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してくださるようお願いします)。

注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。


 昔々の大昔(コンピュータが誕生した当初)は、プログラムは機械語で作らなければなりませんでした(機械語は2進数の形態を採るプログラム言語です)。しかし、これではあまりにもプログラミングが面倒だ、ということで、すぐにアセンブラ言語が開発されました(正確に言えば、アセンブラ言語の言語プロセッサ、つまり、アセンブラが開発された)。

(注)機械語については、第9回講座を参照のこと。

 アセンブラ言語とは、機械語の命令部や番地部を、記号(表意コード,ニーモニックコード)で表現したプログラム言語の総称のことをいいます。
 機械語は、人間にとってまったく意味のない2進数(入力する時は16進数)ですが、それがアセンブラ言語だと”ADD”や”SUB”等、なんとなく意味が通じる命令になります。
 ちょっと前まで本講座でCASL言語講座を行っていましたが、知っての通り、CASLもアセンブラ言語の1つですね。

 アセンブラ言語ができたおかげで、プログラムの生産性がそれまでと比べて飛躍的に高くなりましが、これでもまだ問題があります。

 アセンブラ言語は、基本的には機械語と1対1で対応します。つまり、コンピュータのCPUに対する命令(これが機械語)1つと、アセンブラ言語の命令1つが対応するため、CPUが異なればアセンブラ言語(の命令や文法)も変わってしまうのです。
 だから、あるCPU用のアセンブラ言語で記述したプログラムは、別のCPUのコンピュータでは使い物になりません。

 そこで、コンピュータのCPUに依存しないプログラム言語として、FORTANやCOBOL等、各種の高水準言語が考え出されました。

(注1)
 これらの高水準言語で記述したプログラムは、あくまでも原始プログラムです。原始プログラムは(前回説明した)言語プロセッサを通すことによって、実行可能なプログラム(つまり機械語のプログラム)になります。
 だから、いくらFORTRANやCOBOL等の高水準言語でプログラムを作成しても、それだけですべてのCPUに対応できるプログラムになる訳ではありません。実行対象とするCPU用の言語プロセッサがあって、初めてそのプログラムが実行できるです。
(注2)
 これら高水準言語の誕生によって、すべてのプログラムが高水準言語で作成されるようになった訳ではありません。高水準言語にはそれぞれ得意とする問題領域があり(後述)、それ以外の問題に対しては、まだアセンブラ言語で作成しなければなりませんでした。

 さてここで、用語を整理します。

 先の説明で「高水準言語」という用語が何気に出てきましたが、これとは逆の意味を持つ用語に「低水準言語」があります。
 低水準言語(機械向き言語)とは、特定のコンピュータの構造や仕組みに強く依存しているプログラム言語の総称です。低水準言語は、対象とするコンピュータのハードウェア(特にCPU)の知識を要しますが、その分、ハードウェアに密着した細かいレベルの処理が行える、という特徴を有します。機械語とアセンブラ言語は低水準言語に分類されます。
 対する高水準言語(問題向き言語)は、ハードウェアの特性を意識することなく、自然言語(人間が使う言語)に近い形式でプログラミングできるプログラム言語の総称です。(原則として)高水準言語はコンピュータによる文法の違いはありません。

 ここまで、”ハードウェアに依存するかしないか”によってプログラム言語を2つに分類しましたが、”手続き型か非手続き型か”という見方でプログラム言語を分類することもできます。手続き型のプログラム言語を手続き型言語、非手続き型のプログラム言語を非手続き型言語といいます(そのまんま)。

 手続き型言語とは、コンピュータが実行する処理の流れに従って、細かい命令を記述する言語の総称です。アセンブラ言語,COBOL,FORTRAN,C等多くのプログラム言語が手続き型言語に分類されます。
 対する非手続き型言語とは、手続き型言語よりは大まかな命令を記述するプログラム言語の総称です。一部、命令の記述順とコンピュータが実行する処理の順序が関係ないプログラム言語もあります(とは言っても何のことやら分からないと思いますが、これを説明するだけでも多くのページが必要なので省略)。

(注)
 現在のプログラム言語は手続き型言語が主流です。10年位前に人工知能が流行った時に、LispやProlog等の非手続き型言語が流行したことがありました。でも今はそのブームも過ぎ去り、実務で使用するほとんどの(すべてと言ってよい?)システムが、手続き型言語で開発されています。

 以下に、手続き型言語と非手続き型言語の一覧(といっても数あるプログラム言語からの抜粋)を示します。

           表 手続き型言語

言語名開発年代特徴
FORTRAN1950科学技術計算向きの言語
COBOL1950事務処理計算向きの言語
ALGOL1960BNF記法を採用
PL/I1960科学技術計算,事務処理計算どちらも可能。現在はあまり使用されていない
BASIC1960初心者向きの会話型言語(現在では実務のシステムでも利用されている)
Pascal1960プログラム教育用の言語
1970基本的にはOSなどの開発に向くが、現在ではそれ以外にも広く使用される
Ada1970アメリカ国防省が制定した、大型システム作成用の言語

           表 非手続き型言語

言語名開発年代特徴
LISP1960リスト処理用の関数型言語
Prolog1970推論機構を持つ論理型言語
APL1970数学的および論理的な関数の定義が行える関数型言語
RPG報告書を作成することが目的の言語。パラメタを与えると命令を生成する
Smalltalk1970最初のオブジェクト指向型言語
SQL1980関係データベースを構築し、操作するための言語(4GLに分類することもある)

 先週、翻訳プログラムの中の分類、つまりアセンブラとコンパイラとジェネレータについて保留していました。
 これらは、どのプログラム言語を翻訳するかによって、その分類が決まります。

 まず、アセンブラ言語を翻訳する翻訳プログラムはアセンブラです。次に、RPGのように、パラメタを与えると命令を生成する翻訳プログラムはジェネレータです。そしてそれ以外の高水準言語を翻訳する翻訳プログラムがコンパイラです。

(注)
 現在では開発ツールの多様化により、ジェネレータの位置づけがあいまいになっています(これは私見)。したがって、アセンブラ言語を翻訳するのがアセンブラ、高水準言語を翻訳するのをコンパイラ、と覚えておいてよいでしょう。

 以上、様々なプログラム言語を見てきましたが、世に中にはまだまだ多くのプログラム言語が存在します。
 これ以上は説明しませんが、実は、これまで説明したプログラム言語はすべて汎用プログラム言語と呼ばれる言語に分類されるプログラム言語です。汎用プログラム言語以外のプログラム言語として、特殊問題向き言語第4世代言語(4GL)等もあります。

 今週はちょっと説明(文章)が長かったですね。
 ではまた来週。