比較プログラム言語論

比較プログラム言語論
平成17年4月27日
森田 彦
レポート(4/20)総括
< テーマ >
あなたが最も興味・関心のあるプログラミング言語はどのよ
うな言語ですか?どれか一つ挙げて、そう選んだ理由を述べ
て下さい。
<回答結果>
アセンブリ
<質問>
Prolog
ALGOL
BASIC
C++ & C
Java
Java
C++ & C
BASIC
ALGOL
Prolog
アセンブリ
PASCAL
COBOL
LGP
機械語
Java言語派
僕が最も興味・関心がある言語はJAVA言語です。それは
今もっとも注目されている言語だからです。JAVA言語の
特徴であるOSに依存しないという点が重要であると思い
ます。JAVA言語を習得出来ればWindows、Linuxなどパ
ソコン用のプログラムの作成はもちろんのこと、携帯電話
などアプリケーションや家電製品のプログラムまでも作成
できてしまいます。・・・(中略)JAVAプログラミングにさらな
る関心を持ちました。
私の使っている携帯電話はドコモですが、iアプリを起動し
たときに、Javaと出てきます。知らないうちに日常の中で
プログラム言語が出てきているんだなと驚きました。なの
で、Java言語という言葉は良く聞くが、きっと色々な用途、
意味があるのだろうと思いました。一体どのようなときに
使われ、どんな意味を持つか、どんな役割をするのか、
もっと詳しく知りたいと思いました。
Java言語で作成できるプログラム
通常のアプリケーション
Javaアプリケーション
ブラウザ上で動作するプログラム
アプレット
サーバ上で動作するプログラム
サーブレット、JSP(Java Server Pages)
携帯端末上で動作するプログラム
Java ME(Micro Edition)
C++ & C言語派
自分が最も興味関心のあるプログラミング言語はC言語で
す。1973年からそれまで主流だったアセンブリ言語を押し
のけるほどの汎用性。そして90年代、Cがわからないエン
ジニアはいらないとまでいわれるほどのものであったこと。
そして、自分がこの学校に入ってなんども耳にしてとても気
になっていました。Java言語を勉強しているときに先輩か
らC言語のことを聞いてわかっていたほうが良いのではな
いかなどと考えていました。 C言語はプログラミング言語
の歴史上、とてもすごい物だったのではないでしょうか。
(前略)C++は、よく聞くプログラミング言語であるということ
から、かなりメジャーであるのは明らかですが、一体どのよ
うな理由からここまでメジャーなものになったのか、という
のが興味を持った一番大きな理由です。またその他にもC
言語の派生であるC++とはC言語とどのような違いを持っ
ているのか、またC言語とC++の互換性はどのようなもの
なのかといったような疑問があります。
BASIC言語派
僕が、一番興味を持ったプログラミング言語はBASICです。
これは、どこかの大学が作った言語でコンピュータは専門
家しか扱わなかった時代に、あえて将来パソコンの時代を
見据えて初心者用の言語を作った。目の付け所がよいと
思う。
わたしが今日の講義で一番関心を持ったのは、PASCAL
やBASICといった初心者向け教育用のプログラミング言語
でした。 今までは科学技術計算向けや事務処理計算など、
専門の分野でのプログラミング言語を中心に発展していっ
たのだと思っていましたが、その一方で一般個人を対象に
した易しいプログラミング言語も開発されていたということ
に驚きましたし、また、未来を見据えて初心者用プログラミ
ング言語を開発した人のその着眼点もなかなか容易には
出来ないことだと思いすばらしいものだと感じました。
PASCAL派も同様の意見
PASCAL派
今回の講義で興味を持った言語は
PASCALです。それまでの実用的なプログ
ラム言語と違い、プログラミング教育に適
したこの言語がなぜ開発されたのか、また
この言語が後の言語にどのように影響して
いるのかを詳しく知りたいと思いました。こ
の言語の元になっているALGOLやこの後
に出てくるC言語やJAVAの関連を学ぶこと
で現在使用している言語の背景を理解しこ
の先の学習に役立てたいと思います。
ALGOL派
ALGOrithmic Languageに興味を持ちました。なぜなら、
現在学んでいるJavaはC言語から C言語はALGOLに、
と影響をうけて出来た言語だからです。その土台となるプ
ログラム言語を理解することでどのような特性を受け継
いだのか、つまりどの部分が必要で、どの部分が不必要
だったのかを知りたいです。 厳密な構文規約が採用さ
れ、後のプログラミング言語に大きな影響を与えた歴史
がありますが、なぜ「厳密な構文規約」が広く普及したの
でしょうか。とっつきにくい・わかりにくいなどの理由から、
もし自分だったら敬遠してしまうかもしれないです。構造
として優れているという点が専門家には使いやすかった
のでは、と推測しています。
Prolog派
私はプログラム言語の中でprologという言語に
興味を持ちました。この言語は、おおまかに言う
と、ある命題を提示するとその命題に対して推論
をし、答えを導きだすものだという説明を受けま
した。私がこのprologという言語に興味を持った
理由は、本当にコンピュータが人間のように推論
ができるのか、その推論した結果、導き出された
答えはどれほど信用できるのかということが知り
たいと思ったからです。また、この言語はどのよ
うなときに使われて、どんな成果をあげていたの
かということも気になりました。これは私の想像な
のですが、天気予報や占いなどの結果を出すた
めに利用できるのではないかと思いました。
<質問>
森田先生はどの言語が一番興味がありますか。
FORTRANですか。ぜひ教えてください。
森田先生は今まで使ってきた言語の中で一番使
いやすい言語と一番使いにくい言語はなんです
か??
プログラミング言語というのは、ほとんどがアル
ファベットの並びですがとても難しく見えます。日
本語の言語というのはないのでしょうか?
参考 日本語プログラミング言語「なでしこ」
http://nadesi.com/
<本日のテーマ>
プログラミング言語の理論
<内容>
高水準プログラミング言語のルーツは?
プログラミング言語はどのように作られたのか?
プログラミング言語の理論的基盤は?
(プログラミング言語発展の歴史における)
ALGOL60の位置づけとは?
ノイマン型コンピュータの登場
ENIACの限界: 処理(計算の種類)毎にスイッチを切り
替える→膨大な作業→ハードウェアのみの世界
ノイマン:プログラム内蔵型コンピュータを提唱
1949年 モーリス・ウィルクス(英国ケンブリッジ大)
EDSAC完成 世界初のプログラム内蔵型コンピュータ
(ノイマン型コンピュータ)
ウィルクスの苦悩
機械語プログラミングを実行→“恐ろしい考え”「残りの人
生はプログラムのバグ探しで費やされるのでは・・・。」
もっと簡単に(分かりやすく)入力できるプログラミング言
語はできないものか? →アセンブリ言語の開発・利用
→ まだまだ手間のかかる作業
高水準言語の必要性
ウィルクスの苦悩
もっと楽にならないか・・・?
<アセンブリ言語プログラム>
LOAD R1,100
LOAD R2,101
ADD R3,R1,R2
STORE R3,110
メモリ
10
LOAD R1,100
11
LOAD R2,101
12
ADD R3,R1,R2
13
STORE R3,110
命令
・・・
レジスタ
R1
R2
100
R3
101
35
・・・
110
10
25
データ
最初の高級言語A-0の誕生
アセンブリ言語よりも、もっと人間に近い言語
を・・・。例えば
a=10
b=25
c=a+b
のように簡単に計算できるような・・・。
1952年 グレース・ホッパー(レミントン・ランド
社)らがA-0を開発。 ところが・・・
翻訳されたプログラムの性能は、アセンブリ言語
のものの1/5~1/10程度→最適化の不十分さ→
実用には向かず。
FORTRANの誕生
1953年 ジョン・バッカス(IBM社)が、
FORTRAN開発プロジェクトの提案
IBM社(当時は、コンピュータに関しては新興企
業)の社運をかけたプロジェクトに発展
1957年FORTRAN(Formula Translation
system)完成。
数学的計算(科学技術計算)向けに設計→最初
に普及したコンパイラ。 しかし・・・、会計処理な
どの事業用には不向き。
ホッパーらがCOBOLを開発→広汎に普及。
数理言語理論の発展
1956年 チョムスキー(米国の言語学者)が
形式文法理論(言語文法の数学的モデル)
を発表→言語学の革命
形式文法で記述できる形式言語が研究対
象→人工言語の研究が進む→プログラミン
グ言語に反映(プログラミング言語の理論的
基盤を与える)
形式(生成)文法理論
アルファベットの定義
言語の記述に用いる記号を定義する。
英語の場合:{a,b,c,・・・,z}
文法Gの定義
G=(N,T,P,S)
N:非終端記号、T:終端記号(単語)
P:生成規則の組、S:開始記号
Gによって生成される文の集合→言語
Gの例:変数名を規定する文法GN
アルファベット(大文字)と数字で変数名を規定す
る場合
GN=(NN,TN,PN,SN)
NN={<名前>,<文字>,<数字>}∪TN
TN={A,B,・・・,Z,0,1,・・・,9}
PN={<名前>→<名前><文字>,
<名前>→<文字>,
<名前>→<数字>,
<文字>→A,<文字>→B,・・・,<文字>→Z
<数字>→0,<数字>→1,・・・,<数字>→9}
SN=<名前>
文法の種類(チョムスキー階層)
0.句構造文法
生成規則に制約がない
1.文脈依存文法
生成規則:AbC→ABC と表せる文法
A,B,C:終端記号と非終端記号の和
b:非終端記号
※ 書き換えが前後の記号(文脈)に依存
2.文脈自由文法
a→A a:非終端記号
3.正規文法
a→Ab または a→A
プログラミング言語は文脈自由文法が主
構成要素が決まったら文を生成できる。
例:文脈依存文法(日本語)
G=(N,T,P,S)
N={<主部>,<述部>,<名詞>,<動詞>,<助詞>,<文>}
T={私,彼,食べる,飲む,パン,牛乳,は}
P={ <文>→<主部><述部>, <主部>→<名詞><助詞>
<述部>→<名詞>を<動詞>,
<名詞>→私|彼|パン|牛乳, <助詞>→は,
<動詞>→食べる|飲む }
S=<文>
<文の生成>
<文>→<主部><述部> →<名詞><助詞><述部>
→私<助詞><述部>→私は<述部>
→私は<名詞>を<動詞>→私は<名詞>を食べる
→私はパンを食べる
プログラミング言語の構成
プログラム
モジュール
手続きと関数
文
式
語
文字
処理の最小単位。「a=b+c;」など。
演算子と非演算子からなる。a*b、a>bなど。
名前、データ、演算子、予約語(for,ifなど)
英数字、特殊記号等
ALGOL60プロジェクト
1960年IFIP(International Federation for
Information Processing)「国際情報処理連盟」
により、ALGOL(ALGOrithmic Language)制定
欧米の研究者が共同で開発
形式文法理論による文脈自由文法言語として制
定→当時の言語研究の到達点
ホア(プログラミング言語学者)「ALGOL60こそ
は、偉大な業績であって、それに続く何者も凌駕
できないでいる。」
ALGOL68へ展開→言語規模の巨大化
その後・・・
ALGOL60の構文規則「文の区切りに;を
用いる」、「使用する変数は全て宣言する」
などは、PASCALやC言語など後継言語に
受け継がれる。
プロジェクトの一部メンバーはプログラミン
グ言語の構文解析の精密化、巨大化より
も、プログラミング手法そのものに関心を
移した。→正しい(バグのない)プログラミ
ングとはどういうものか?→プログラミング
手法の研究へ発展
第3回目レポート
< テーマ >
本日の講義で、あなたが最も興味を持った点はどの
ような点ですか?講義の全体的な感想と共に、でき
る限り具体的に、200字~400字程度で記述して下
さい。
なお、上の記述を行った上で,質問や以前のレポー
トに対するコメント等を付加しても結構です。
提出先:[email protected]
件名:「学籍番号(半角)+半角空白+氏名」を記入
して下さい。
例) s03xxxx 学院太郎
プログラミング言語発展の歴史
時間
言語以前
低水準言語
機械語
アセンブリ言語
FORTRAN
COBOL
ALGOL
オブジェクト指向
言語
Delphi
高水準言語
C++Builder
PL/1
ビジュアル開発環境
ALGOL68
PASCAL
BASIC
C言語
Ada
Lisp
超高水準言語
参考:河村一樹、斐品正照
Object PASCAL
C++
Java
Prolog
Smalltalk
ノイマン型コンピュータ
CPU(中央処理装置)
メモリ
プログラム
レジスタ
データ
制御
演算
RAM(読み書き可能)