プログラミング言語の発展は,コンピュータの動作に依存した言語から人間の発想に近い言語への発展であるといえます。
第1世代言語 機械語(0と1の羅列)
第2世代言語 アセンブラ(機械語を記号化)
第3世代言語 コンパイラ:手続き型言語,高水準言語(COBOL,Cなど)
第4世代言語 非手続き型言語(SQLなど)
最近の動向 オブジェクト指向言語(C++,Javaなど)
スクリプト言語(JavaScriptなど)
機械語
たとえば,メモリのA4番地にあるデータの値(X=13)とA5番地にあるデータの値(Y=27)を,演算装置のアキュムレータAとBに入れて加算し,その結果をメモリのA6番地(Z)に入れるプログラムは次のような数字(16進表示)の羅列になります。これを機械語といいます。
11A412A5410221A630A70D1B00
区切りをつければ,
9F 11,A4 メモリA4番地の値→アキュムレータA
A0 12,A5 メモリA5番地の値→アキュムレータB
A1 41,02 A+B→A
A2 21,A6 Aの値→メモリA6番地
A3 30,A7 次の命令はA7番地から
A4 0D 10進数13の16進数
A5 1B 10進数27の16進数
A6 00 結果を入れる場所を確保
A7 --
アセンブラ
機械語を覚えるのは大変です。それで,たとえばメモリからアキュムレータに入れる命令をLD,アキュムレータ間での加算命令41をADというように記号化すれば,かなりわかりやすくなります。このような言語をアセンブラといいます。
LD A,X メモリX番地の値→アキュムレータA
LD B,Y メモリX番地の値→アキュムレータA
AD A,B A+B→A
SV A,Z A→メモリZ番地
J P 次にフラグPの命令を行う
X DT 13 Xの値を13とする(10進数表示)
Y DT 27 Y←27
Z DT 0
P ---
高水準言語
もっと人間に理解しやすくすることが求められます。その要求に応えて,
Z=X+Y (FORTRAN)
ADD Y TO X GIVING Z. (COBOL)
のように,数学的な表現や英語表現で記述できる言語が多数出現しました。これらを高水準言語といいます。高水準言語とは,広義には機械語・アセンブラ以外の言語の総称ですが,狭義には第3世代言語だけを指すこともあります。
高水準言語では,機械語やアセンブラと異なりコンピュータの機種に依存しない形式になりますので,言語文法のレベルでは多くの機種で共通に用いることができます。また,共通にするために,いくつかの言語では文法仕様の標準規格化も進みました。
第4世代言語
- 非手続き型言語
- 第3世代言語では,「どのように処理をするかの手順」を記述します。たとえばファイルから府県が東京であるレコードだけを選択して抽出するには,
READ 入力ファイル.
WHILE (EOF=0)
IF 府県="東京" THEN WRITE 出力ファイル
READ 入力ファイル
END
というような記述をします。このような言語を手続き型言語といいます。
それに対して第4世代言語は非手続き型言語であり,
SELECT *
FROM 入力ファイル
INTO 出力ファイル
WHERE 府県="東京";
というように,「何をするか」だけを記述して手順は記述しないのです。このような記述は人間の思考により合致しています。
- SQL
- 以前は多様な第4世代言語がありましたが,SQLがRDB(リレーショナル・データベース)の国際標準言語になってからは,SQLの独壇場です。DB/2,Oracle,AccessなどほとんどのRDB言語はこれを用いています。SQLに関しては別シリーズ「データベース」で詳述します。
- スクリプト言語
- オブジェクト指向言語のような部品やGUI環境が整備されると,エンドユーザでも簡単にプログラムを作成することができます。それをスクリプト言語といいます。それにはこのようなビジュアルな環境で構築できるVisualBasicや,Webページの言語であるHTMLに組み込んで記述できるJavascriptなどがあります。
- Java
- ○Javaの特徴
・コンパイラ言語,手続き型言語
・オブジェクト指向言語(特にインターネット環境に適す)
・移植性が高い(機種やOSに関係なく互換性あり)
ほとんどのOSがJavaをサポート
バイトコード(中間言語)はOSに無関係
・開発環境が整備されている
○Java関連
・Javaアプレット:Javaの小さなプログラム。ブラウザで実行
・Javaサーブレット:Javaの小さなプログラム。サーバで実行
・J2EE:Javaのシステム開発環境
・JavaScript:HTML内に記述できる。Javaとは異なる言語