Download presentation
Presentation is loading. Please wait.
1
比較プログラム言語論 平成16年4月28日 森田 彦
2
レポート(4/21)総括 < テーマ > あなたが最も興味・関心のあるプログラミング言語はどのような言語ですか?どれか一つ挙げて、そう選んだ理由を述べて下さい。 <回答結果> PASCAL <感想> BASIC C++ & C Java <質問> Prolog
3
Java言語派 (前略)私は昨年インターンシップに行ったのですがそこは情報システムに関する部署でした。私が研修させていただいた際にJavaを使った新システムの導入のプレゼンをしていたり、職場の方々にお話を伺ったときには必ずと言っていいほどJavaの有効性や必要性に関しての意見があったのを覚えています。このような経験から私は現在興味関心があるのは「Java」言語です。 自分が特に興味・関心があるのはJava言語です。理由は簡単で,去年自分がはじめて勉強した言語だからです。Java言語はどんな環境下でもJava対応の仮想記憶装置があれば動くので、今後の発展が期待できますし、Javaの敬遠される理由の「遅さ」もいずれ解決できるようになるはずです。最近はライバルにC#言語が出てきたので競走することでより良い言語になると思っています。
4
Prolog派 (前略)この言語はどういったものなのでしょうか。 「人間は死ぬ」「ソクラテスは人間である」→「ソクラテスは死ぬ」ソクラテス=人間=死ぬ、ゆえにソクラテス=死ぬということを、例えば「人間=1」「死ぬ=2」「ソクラテス=3」と代入して計算しているのでしょうか? そうなのであれば以前習ったJavaでもできると思います。 多分違う方法で解答を出していると思うのでそれが知りたいと思い興味が沸きました。 今回の講義で紹介されたプログラミング言語の中で、最も興味関心をもった言語は、Prologでした。理由は、この言語の基本的な特徴が他の言語とまったく違うように感じたからです。論理文を入力して、その文からコンピュータが推論して新しい論理文を作るというシステムが画期的な感じがしてとてもおもしろいと思いました。コンピュータに人間の論理をたくさん記憶させて、人工知能をつくるという考えはおもしろいと思います。
5
C++ & C言語派 私がこの講義を受け始めた現在で興味・関心のある、プログラミング言語を一つだけ選ぶとしたら、そのプログラミング言語は『C++』である。理由としては複雑であるがゆえの高度さである。 複雑・難しいと感じるということは、そのプログラミング言語が、深く濃く作られているということである。そう考えるとこれに習熟することで、簡単に効率よく、複雑な処理ができるのではと思うからである。さらに理由を加えるならば、複雑であるために一つの結果を出すための解がJavaやその他の言語にくらべて、はるかに多くあるように見えるからだ。 「C言語」や「C++」という言葉自体は何度も聞いたことはありましたが、それを元にしてJAVA言語が作られたということを今回初めて知りました。プログラミング言語はJAVAしか触ったことがなかったのですが、「C++」と、それの一部の機能を排除して開発された「JAVA」とは具体的にはどのように違うのかという点に興味を持ちました。
6
BASIC言語派 私が一番興味深かった言語はBASICです。 (中略)初心者向けでインタプリタ型の言語ということで、物事を考える時に、熟考して一から十まで自分の理解速度を守らないと納得が行かない性格の私に合っている気がしました。 また初めての、開発者向けではない、初心者も使える言語という点にも興味があります。元来プログラムはSEが使うもので他の人々が使用することはなかったと思われます。そのプログラムを一般人も使用することになった背景にコンピュータの普及やその後のコンピュータ社会の様子が伺える点が面白いです。 私が一番興味を持った言語はBASICでした。なぜなら、一部の専門家しか使うことの出来なかったプログラミング言語が、一般の人にも比較的易しく扱いやすくなったことで、大いに普及したという点と、今なおこの言語のファンが多くいるという話を先生から伺ったからです。 (中略)それまで手の届かないところにあったプログラミング言語がとっつきやすくなり、パソコンで色々出来ることの楽しさを知るきっかけになった人々がたくさんいたのだろうなぁと思いました。
7
PASCAL(Delphi)派 自分が今回の講義を聞いて興味をもったプログラミング言語はPASCALです。自分はプログラミングを今後も学んでいく上でこれは構造化プログラミング、データ構造系的なプログラミングの教育に最適ということで、プログラミングの基本的なことを学ぶためにある言語だと思ったのでこれに興味をもちました。また言語仕様を広げすぎないように作られ、言語処理の効率もあがり後のC言語の発展のもとになっているという点で、PASCALを初めに学んで理解していくことでプログラミングの大体の構造が初めに理解できると考えたからです。
8
<感想> 1つの言語が1つあるいは2つの目的のためにある。ということは、1つの言語で統一できないほど、コンピュータに人がたくさんのことを要求しているからなのだと思います。今はJAVAをやっていますが、きっとJAVAは万能ではありえないんだろうと思いました。
9
<質問Ⅰ> 先生自身はどの言語が最も興味がありますか?またそれはなぜですか?
先生が見る言語の中でJAVAの次にブレイクしそうな言語ってありますか?もしあればそれは何なのか、どうして次にきそうなのか、JAVAや他の言語とはどう違うのかなんかを聴いてみたいです。 「prolog」言語は人工知能の開発に適しているのでは?といった具合に生まれた言語だが実際は適してなかったという話でしたが、それは論理記述と推論機構で書かれたプログラミングは開発に適していた反面、関数を使ったモノに比べソースが長くなりすぎてサイズが大きすぎて使いづらかったからですか? それとも単にやっぱり関数を使った言語の方が人工知能の開発に適したからですか?そこが少し気になりました。
10
<質問Ⅱ> なぜ、JavaはJavaの実行環境があれば、どのOSや機種でも動作するのに、ほかの言語は、特定のOSや機種が制限されたりしてしまうのですか?プログラミングの言語の仕組みが違うからなのかな、とは思いますが…よくわかりません。 ソース 翻訳 JVM Windows JVM Mac JVM Linux 実行 <Java言語> バイトコード ソース 翻訳 機械語Windows 機械語Mac 機械語Linux 実行 <通常の言語> 機械語はプラットフォーム毎に異なる。
11
プログラミング言語の理論 <本日のテーマ> <内容> 高水準プログラミング言語のルーツは? プログラミング言語はどのように作られたのか?
プログラミング言語の理論的基盤は? (プログラミング言語発展の歴史における)ALGOL60の位置づけとは?
12
ノイマン型コンピュータの登場 ENIACの限界: 処理(計算の種類)毎にスイッチを切り替える→膨大な作業→ハードウェアのみの世界
ノイマン:プログラム内蔵型コンピュータを提唱 1949年 モーリス・ウィルクス(英国ケンブリッジ大) EDSAC完成 世界初のプログラム内蔵型コンピュータ(ノイマン型コンピュータ) ウィルクスの苦悩 機械語プログラミングを実行→“恐ろしい考え”「残りの人生はプログラムのバグ探しで費やされるのでは・・・。」 もっと簡単に(分かりやすく)入力できるプログラミング言語はできないものか? →アセンブリ言語の開発・利用→ まだまだ手間のかかる作業 高水準言語の必要性
13
ウィルクスの苦悩 もっと楽にならないか・・・? <アセンブリ言語プログラム> メモリ LOAD R1,100 LOAD R2,101
ADD R3,R1,R2 STORE R3,110 10 LOAD R1,100 LOAD R1,100 LOAD R1,100 11 LOAD R2,101 LOAD R2,101 LOAD R2,101 命令 12 ADD R3,R1,R2 ADD R3,R1,R2 ADD R3,R1,R2 13 STORE R3,110 STORE R3,110 ・・・ レジスタ 100 10 10 R1 R2 R3 101 25 25 データ 35 35 ・・・ 110
14
最初の高級言語A-0の誕生 アセンブリ言語よりも、もっと人間に近い言語を・・・。例えば のように簡単に計算できるような・・・。
b=25 c=a+b のように簡単に計算できるような・・・。 1952年 グレース・ホッパー(レミントン・ランド社)らがA-0を開発。 ところが・・・ 翻訳されたプログラムの性能は、アセンブリ言語のものの1/5~1/10程度→最適化の不十分さ→実用には向かず。
15
FORTRANの誕生 1953年 ジョン・バッカス(IBM社)が、FORTRAN開発プロジェクトの提案
IBM社(当時は、コンピュータに関しては新興企業)の社運をかけたプロジェクトに発展 1957年FORTRAN(Formula Translation system)完成。 数学的計算(科学技術計算)向けに設計→最初に普及したコンパイラ。 しかし・・・、会計処理などの事業用には不向き。 ホッパーらがCOBOLを開発→広汎に普及。
16
数理言語理論の発展 1956年 チョムスキー(米国の言語学者)が形式文法理論(言語文法の数学的モデル)を発表→言語学の革命
1956年 チョムスキー(米国の言語学者)が形式文法理論(言語文法の数学的モデル)を発表→言語学の革命 形式文法で記述できる形式言語が研究対象→人工言語の研究が進む→プログラミング言語に反映(プログラミング言語の理論的基盤を与える)
17
形式(生成)文法理論 アルファベットの定義 言語の記述に用いる記号を定義する。 英語の場合:{a,b,c,・・・,z} 文法Gの定義
言語の記述に用いる記号を定義する。 英語の場合:{a,b,c,・・・,z} 文法Gの定義 G=(N,T,P,S) N:非終端記号、T:終端記号(単語) P:生成規則の組、S:開始記号 Gによって生成される文の集合→言語
18
Gの例:変数名を規定する文法GN アルファベット(大文字)と数字で変数名を規定する場合 GN=(NN,TN,PN,SN)
TN={A,B,・・・,Z,0,1,・・・,9} PN={<名前>→<名前><文字>, <名前>→<文字>, <名前>→<数字>, <文字>→A,<文字>→B,・・・,<文字>→Z <数字>→0,<数字>→1,・・・,<数字>→9} SN=<名前>
19
文法の種類(チョムスキー階層) 0.句構造文法 1.文脈依存文法 2.文脈自由文法 3.正規文法 プログラミング言語は文脈自由文法が主
生成規則に制約がない 1.文脈依存文法 生成規則:AbC→ABC と表せる文法 A,B,C:終端記号と非終端記号の和 b:非終端記号 ※ 書き換えが前後の記号(文脈)に依存 2.文脈自由文法 a→A a:非終端記号 3.正規文法 a→Ab または a→A プログラミング言語は文脈自由文法が主 構成要素が決まったら文を生成できる。
20
例:文脈依存文法(日本語) G=(N,T,P,S) <文の生成> N={<主部>,<述部>,<名詞>,<動詞>,<助詞>,<文>}
<述部>→<名詞>を<動詞>, <名詞>→私|彼|パン|牛乳, <助詞>→は, <動詞>→食べる|飲む } S=<文> <文>→<主部><述部> →<名詞><助詞><述部> →私<助詞><述部>→私は<述部> →私は<名詞>を<動詞>→私は<名詞>を食べる →私はパンを食べる <文の生成>
21
プログラミング言語の構成 プログラム モジュール 手続きと関数 文 処理の最小単位。「a=b+c;」など。 式
演算子と非演算子からなる。a*b、a>bなど。 語 名前、データ、演算子、予約語(for,ifなど) 文字 英数字、特殊記号等
22
ALGOL60プロジェクト 1960年IFIP(International Hederation for Information Processing)「国際情報処理連盟」により、ALGOL(ALGOrithmic Language)制定 欧米の研究者が共同で開発 形式文法理論による文脈自由文法言語として制定→当時の言語研究の到達点 ホア(プログラミング言語学者)「ALGOL60こそは、偉大な業績であって、それに続く何者も凌駕できないでいる。」 ALGOL68へ展開→言語規模の巨大化
23
その後・・・ ALGOL60の構文規則「文の区切りに;を用いる」、「使用する変数は全て宣言する」などは、PASCALやC言語など後継言語に受け継がれる。 プロジェクトの一部メンバーはプログラミング言語の構文解析の精密化、巨大化よりも、プログラミング手法そのものに関心を移した。→正しい(バグのない)プログラミングとはどういうものか?→プログラミング手法の研究へ発展
24
第3回目レポート < テーマ > 本日の講義で、あなたが最も興味を持った点はどのような点ですか?講義の全体的な感想と共に、できる限り具体的に、200字~400字程度で記述して下さい。 なお、上の記述を行った上で,質問や以前のレポートに対するコメント等を付加しても結構です。 件名:学籍番号(半角)+半角空白+氏名を記入して下さい。 例) s02xxx 学院太郎
25
プログラミング言語発展の歴史 時間 低水準言語 オブジェクト指向言語 高水準言語 超高水準言語 言語以前 機械語 アセンブリ言語
Delphi 高水準言語 C++Builder FORTRAN PL/1 ビジュアル開発環境 COBOL ALGOL ALGOL68 PASCAL Ada Object PASCAL BASIC C言語 C++ Lisp Java 超高水準言語 Prolog Smalltalk 参考:河村一樹、斐品正照
26
ノイマン型コンピュータ CPU(中央処理装置) メモリ プログラム データ レジスタ 制御 演算 RAM(読み書き可能)
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.