プログラミング言語発展の歴史 プログラミング言語 以前

プログラミング言語発展の歴史
時間
言語以前
オブジェクト指向
機械語
アセンブリ言語
プログラミング言語の歴史(ごく短く)
Delphi
C++Builder
FORTRAN
高水準
櫻井彰人
慶應義塾大学
(higher
level)
関数型
JBuilder
PL/1
COBOL
ビジュアル開発環境
ALGOL ALGOL68
PASCAL
BASIC
C言語
Lisp
Ada
Object PASCAL
C++
ML
Java
Prolog
論理型
Smalltalk
プログラミング言語
以前
最初(?)の電子計算機 ENIAC
真空管で動作する電子計算機
Wikipediaより
„ 1946年 ペンシルベニア大学のモークリーとエッ
カートが開発
„ 米国陸軍の弾道ミサイルの計算に利用
„ 巨大(18000本の真空管)で消費電力も膨大
(175kW)、重量30t
„ 計算の手順(プログラム)
配線の組み替えとスイッチの組み替えで実施
→プログラミング言語なし。
プログラミング言語
の登場
ノイマン型(プログラム内蔵)
コンピュータの登場
1949年英国のEDSAC完成
(配線の組み替えとスイッチの切り替えではなく)
2進数字の列(データ!)として、記憶装置に記憶
言語である
これを機械語と呼ぼう
„ 機械語
コンピュータが直接理解できる言語
→2進数で表現
„
„
例: 機械語
„
命令をすべて2進数で表現。
„
„
„
ただし、2進数で表現すると桁数が多いので
2進数を1バイトずつ2桁の16進数や3ビットずつの8
進数で表現する
例:188+17の答を求める
9D BC 11
アセンブリ言語
„
„
ADD BC 11
ADD→9Dに翻訳する必要がある
アセンブラというソフトウェアが処理
„
初期のアセンブラ
メモリ内のアドレスの指定をプログラマが担当
MOVE A [+120]
Aレジスタの現在値を120バイト後方のアドレスへコピーする(代入する)
9D:加算命令 BC:整数188 11:整数17
„
1950年代前半に登場
例:188+17の答を求める
プログラミングは大変
„
変数名の発明
MOVE A data1
アドレス計算からプログラマを解放 →翻訳処理ソフトが担当
1
FORTRAN
機械語とアセンブラ語の例(本物)
„
„
7C
$6030番地 (60 30) の中身を1だけ増やし
60
(7C)、プログラムを終了する (3F)
Uをシステムスタックにpush, stackの実効アド 30
レスをユーザスタックにload, stackの先頭から 3F
8バイト下の実効アドレスをシステムスタックに
„
PSHS
LEAU
LEAS
U
,S
-8,S
„
„
0x4,%o1
st
%o1,[%fp+-0x8]
.seg "data"
ld
[%fp+-0x4],%o2
.seg "text"
ld
[%fp+-0x8],%o3
.proc 04
add
%o2,%o3,%o4
.global _main
st
%o4,[%fp+-0xc]
_main:
LE12:
!#PROLOGUE# 0
ret
sethi %hi(LF12),%g1
restore
add
%g1,%lo(LF12),%g1
LF12 = -80
save %sp,%g1,%sp
LP12 = 64
!#PROLOGUE# 1
LST12 = 64
mov
0x10,%o0
LT12 = 64
st
%o0,[%fp+-0x4]
.seg "data"
LL0:
0000000
0000020
0000040
0000060
0000100
0000120
0000140
0000160
0000200
0000220
8103 010b 0000 2000 0000 2000 0000 0000
0000 006c 0000 2020 0000 0000 0000 0000
bc10 2000 d003 a040 9203 a044 952a 2002
9402 a004 9402 400a 1700 0010 d422 e090
0300 0008 c200 6208 8090 0001 0280 0004
0100 0000 4000 000a 0100 0000 4000 0804
0100 0000 4000 008b 9c23 a020 4000 0803
0100 0000 4000 0804 0100 0000 9de3 bf68
2f00 0008 ae15 e228 1100 0008 9012 220c
4000 004b 9210 2000 ac10 0008 9203 a05c
mov
1957年 IBM社の汎用大型コンピュータのプ
ログラム処理言語として実装
FORmula TRANslatorの略
その後大いに発展
FORTRANⅡ(’58)副プログラム→FORTRANⅣ(’62)型宣言
→FORTRAN66(’66)→FORTRAN77(’77)文字列
→FORTRAN90(’91)組み込み関数追加
„
„
科学技術計算によく使われる。実装が多い。
並列化手法がよく研究されている。
COBOL
ALGOL
ALGOrithmic Language
COmmon Business Oriented Language
1959年開発
事務処理に適している
データ処理(ファイルアクセス)に優れている英文を
書くようにプログラミングできる。
„ 最も広汎に使われたプログラミング言語
„ ’80年代までは→COBOLができなければSEになれ
ない!
„
„
1958年開発(ALGOL58)
„ 科学技術計算向けの言語
„ 厳密な構文規約を採用
プログラミング言語の構造として優れている
„ 1960年 ALGOL60制定
他のプログラミング言語(CやPASCALなど)に大きな
影響を与える。
„ 1968年 ALGOL68発表→言語規模の巨大化
„
PL/1
Programming Language 1
„
„
„
プログラミング言語の用途が分化
科学技術計算 FORTRAN
科学技術計算 ALGOL (欧州、構造化)
事務処理計算 COBOL
3者を包含した言語は可能か?
IBMとSHARE(IBMのユーザ団体)が開発. 1964年
汎用的な利用が可能 言語処理系が巨大化
BASIC
Beginner’s All-purpose Symbolic Instruction
Code
„
„
„
1964年 米国ダートマス大学で開発
初心者のための教育用言語
言語仕様が簡単
コンパイラではなくインタプリタを使用
当初は汎用コンピュータ
パソコンに移植され、大いに普及
2
PASCAL
„
„
„
„
„
1971年 Wirth(ヴィルト)により発表
ALGOL60の後継言語との位置づけ
特徴
構造化プログラミングの実現、適切なデータ構造
系統的なプログラミング教育に用いることを目指す
i.e. 既存の言語とは異なる視点で開発
言語仕様の範囲を広げ過ぎなかった
ALGOL68の反省にたって言語処理系の効率化
C言語などに影響
C言語
1973年 米国AT&Tのベル研究所のRitchie(リッチー)が
UNIX開発用に設計
„ 1967年 Richards(リチャーズ)がBCPLを開発
Thompson(トンプソン)がUNIX記述用に更新・開発
B言語 その次の言語として
C言語
„ 特徴
システム記述言語でもある(アセンブリ言語が主流であった)
システム記述から一般の処理まで広汎にカバー
自由度の高い汎用的な言語
何でも書けてしまって危険
„
90年代:Cが分からないシステムエンジニアはいらない。
Ada
„
„
„
„
1980年米国の国防総省の軍規格となる
軍で使用している各種コンピュータシステムの管理が煩雑
言語仕様が数百種類にも及ぶ
統一的に管理できないか?
軍独自の仕様に基づいた新しいプログラミング言語を
公募によりフランスのIchbiah(イシビア)らが開発した言語
を採択
特徴:
ソフトウェア工学を意識
PL/I以上に巨大
Lisp
LISt Processor
1950年代末~’60年代 米国マサチューセッツ工科
大学のMcCarthy(マッカーシー)が関数型言語とし
て開発
„ 関数型言語
関数の合成にによってプログラミングを行う
f(x)、g(x1,x2,・・・)
„
Prolog
PRogramming in LOGic
„ 1972年 フランス、マルセイユ大学の
Colmerauer(コルメラウァー)らによって開発
„ 論理型言語
1階述語論理による論理記述とその推論機構
が基本
例:「人間は死ぬ」、「ソクラテスは人間である」
→ 「ソクラテスは死ぬ」
オブジェクト指向言語
1968年 米国のDahl(ダール)とNygaard(ニガー
ド)によってSimula67開発
Algol60を拡張したシミュレーション言語
„ 1972年 ゼロックス社のAlan Key(アラン・ケイ)らが
Smalltalk-72を開発
次世代コンピュータDynabook用のプログラミング言
語
„ 1980年 Smalltalk-80を発表
クラス階層と継承を実装
最も純粋なオブジェクト指向言語
„
3
Java言語
既存言語のオブジェクト指向化
C言語→C++言語
1980年からAT&T社のStroustrup(スト
ローストープ)が開発
1991年にはVersion3に
„ PASCAL→Object PASCAL
„ ビジュアル環境化
C++ → C++Builder、Viasual C++など
Object PASCAL → Delphi
„
1995年 米国サンマイクロシステムズ社が発表
開発の考え
C++のオブジェクト指向機能を純化
C++の一部機能(難解な部分)を排除
„ 特徴
どのOSや機種でも動作する。
携帯端末や家電製品も想定
インターネットの発達とともに、急速に注目・普及
2000年代: Java言語の分かるシステムエンジニアが
必要(か?)!
„
„
4