比較プログラム言語論 平成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(読み書き可能)
© Copyright 2024 ExpyDoc