比較プログラム言語論

比較プログラム言語論
平成16年4月21日
森田 彦
レポート抜粋(4/14) 興味・関心


この講義では、どのような時にどんな言語を用いる
ことが最適であるのか、どの言語はどの言語の発
展系として作られたのか、更にどの言語のどんな欠
点を克服する為にどのような言語が作られることと
なったのか・・・さまざまなことに興味があります。
まずは言語の種類から、その歴史、それぞれの長
所・短所など知ることができればと思います。
いろいろなプログラミング言語の便利な点、優れた
点、欠点などの特徴を知りたい。プログラミング言語
の歴史にも興味がある。プログラミング言語の作ら
れた順番を知りたい。
レポート抜粋(4/14) 疑問Ⅰ




1つの言語を学べば他の言語もすぐに理解できるの
はなぜかということについて興味・関心があるととも
に疑問に思っています。
そのたくさんの種類の言語を一つに統一できないの
か、できないとしたらどんな使い分けをしているのか。
言語によって、プログラミングの入力の仕方や中身
は、全然違いますか?
プログラミング言語はもう完成されたものなのか、そ
れとも常に発達しているもので新しい言語が次々に
できているのか?
http://ext-web.edu.sgu.ac.jp/HIKO/HikakuProgに掲載
レポート抜粋(4/14) 疑問Ⅱ

PHPとJavaスクリプトをほんの少しやったので
すが、Javaと違って関数を呼び出して使うや
り方にとまどいを覚えました。が、関数を用い
てプログラムを行うのはどうやら普通のようで
す。なぜ多くのプログラミング言語は関数を用
い、Javaはクラスを用いるようになったのです
か?オブジェクト指向は必ずJavaのようにク
ラスを作らなければいけないのですか?
オブジェクト指向言語と手続き型言語
<オブジェクト指向言語>
オブジェクト
<手続き型言語>
プログラマが結びつける
プロパティ
変数
メソッド
関数(手続き)
<本日のテーマ>
プログラミング言語発展の歴史
<内容>


言語発展の歴史を概観する。
代表的な言語をその性質により分類してみる。
プログラミング言語発展の歴史
時間
言語以前
低水準言語
機械語
アセンブリ言語
FORTRAN
COBOL
ALGOL
オブジェクト指向
言語
Delphi
高水準言語
C++Builder
JBuilder
PL/1
ビジュアル開発環境
ALGOL68
PASCAL
BASIC
C言語
Ada
Lisp
超高水準言語
参考:河村一樹、斐品正照
Object PASCAL
C++
Java
Prolog
Smalltalk
プログラミング言語以前
最初のコンピュータ(電子計算機)ENIAC





真空管で動作する電子計算機
1946年 ペンシルベニア大学のモークリーとエッ
カートが開発
米国陸軍の弾道計算に利用
巨大(18000本の真空管)で消費電力も膨大
(175kW)
計算の手順(プログラム)
配線の組み替えとスイッチの組み替えで実施→プ
ログラミング言語なし。
プログラミング言語の登場
ノイマン型コンピュータの登場
1949年英国のEDSAC完成
 配線の組み替えとスイッチの切り替え→プロ
グラムとして作成し、記憶装置に記憶させる
プログラム→機械語で記述
 機械語
コンピュータが直接理解できる言語→2進数
で表現

機械語
2進数を1バイトずつ2桁の16進数で表現
 例:188+17の答を求める
9D BC 11
9D:加算命令 BC:188 11:17
 プログラミングは大変

アセンブリ言語


1950年代前半に登場
例:188+17の答を求める
ADD BC 11
ADD→9Dに翻訳する必要がある→アセンブラというソフトが処理(現在
のコンパイラと同じ)

初期のアセンブラ
メモリ内のアドレスの指定をプログラマが担当
MOVE A [+120]: Aレジスタの現在値を120バイト後方のアドレスへコ
ピーする(代入する)

変数名の発明
MOVE A data1 → アドレス計算からプログラマを解放 →翻訳処理ソフ
トが担当
FORTRAN



1957年 IBM社の汎用大型コンピュータのプ
ログラム処理言語として実装
FORmula TRANslation Systemの略
その後大いに発展
FORTRANⅡ(’58)副プログラム→FORTRANⅣ(’62)型宣言
→FORTRAN66(’66)→FORTRAN77(’77)文字列
→FORTRAN90(’91)組み込み関数追加

科学技術計算に適している
COBOL
COmmon Business Oriented Language
1959年開発
 事務処理に適している
データ処理(ファイルアクセス)に優れている
英文を書くようにプログラミングできる。
 最も広汎に使われたプログラミング言語
 ’80年代までは→COBOLができなければSE
になれない!

PL/1
Programming Language 1



プログラミング言語の用途が分化
科学技術計算 FORTRAN
事務処理計算 COBOL
両者を包含した言語は可能か?→IBMと
SHARE(IBMのユーザ団体)が開発→1964年
に開発
汎用的な利用が可能 言語処理系が巨大化
ALGOL
ALGOrithmic Language
1958年開発(ALGOL58)
 科学技術計算向けの言語
 厳密な構文規約を採用
プログラミング言語の構造として優れている
 1960年 ALGOL60制定
他のプログラミング言語(CやPASCALなど)に大きな
影響を与える。
 1968年 ALGOL68発表→言語規模の巨大化

BASIC
Beginner’s All-purpose Symbolic Instruction
Code



1964年 米国ダートマス大学で開発
初心者のための教育用言語
言語仕様が簡単
コンパイラではなくインタプリタを使用
当初は汎用コンピュータ→パソコンに移植→
大いに普及
PASCAL





1971年 Wirth(ヴィルト)により発表
ALGOL60の後継言語
特徴
構造化プログラミングの実現、適切なデータ構造
系統的なプログラミング教育に最適
→ 既存の言語とは異なる視点で開発
言語仕様の範囲を広げ過ぎない→言語処理系の効
率化→ALGOL68の反省
C言語などに影響
C言語
1973年 米国AT&Tのベル研究所のRitchie(リッチー)が
UNIX開発用に設計
 1967年 Richards(リチャーズ)がBCPLを開発→Thompson
(トンプソン)がUNIX記述用に更新・開発→B言語 その次の
言語→C言語
 特徴
システム記述言語でもある(それまではアセンブリ言語が主
流)→システム記述から一般の処理まで広汎にカバー →自
由度の高い汎用的な言語

90年代→Cが分からないシステムエンジニアはいらない。
Ada



1980年米国の国防総省の軍規格となる
軍で使用している各種コンピュータシステム
の管理が煩雑→言語仕様が数百種類にも及
ぶ→統一的に管理できないか?
軍独自の仕様に基づいた新しいプログラミン
グ言語を → 公募によりフランスのIchbiah
(イシビア)らが開発した言語を採択
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を発表
クラス階層と継承を実装→最も純粋なオブ
ジェクト指向言語

既存言語のオブジェクト指向化
C言語→C++言語
1980年からAT&T社のStroustrup(ストロー
ストープ)が開発→1991年にはVersion3に
 PASCAL→Object PASCAL
 ビジュアル環境化
C++ → C++Builder、Viasual C++など
Object PASCAL → Delphi

Java言語
1995年 米国サンマイクロシステムズ社が発表
 開発の考え
C++のオブジェクト指向機能を純化
C++の一部機能(難解な部分)を排除
 特徴
Javaの実行環境があれば、どのOSや機種でも動作
する。→携帯端末や家電製品も想定 →急速に注
目・普及
2000年代→ Java言語の分かるシステムエンジニアが
必要!

第2回目レポート
< テーマ >
 あなたが最も興味・関心のあるプログラミング言語
はどのような言語ですか?どれか一つ挙げて、そう
選んだ理由を述べて下さい。
 できる限り具体的に記述して下さい。200字~400字
程度。なお、上の記述を行った上で,質問等を付加し
ても結構です。
 提出先:[email protected]
 学籍番号(s02XXXなど)と氏名を明記して下さい。