比較プログラム言語論 平成16年4月28日 森田 彦.

Slides:



Advertisements
Similar presentations
プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
Advertisements

自然言語処理 平成 24 年 11 月 5 日 (No5)- 東京工科大学 コンピュータサイエンス学部 亀田弘之.
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
情報処理基礎 A ・ B 第 5 回 プログラミング入門 操作の自動化を実現する仕組み. 2004/11/16 ・ 17 情報処理基礎 A ・ B 2 本日の内容 処理の自動化~プログラムの概念 ハードウェアとソフトウェア プログラミング言語 Excel における処理の自動化 入力支援の機能 分析ツール.
オブジェクト指向 言語 論 知能情報学部 新田直也. 講義概要  私の研究室: 13 号館 2 階 (13-206)  講義資料について :  参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」,
和田俊和 資料保存場所 /2/26 文法と言語 ー正規表現とオートマトンー 和田俊和 資料保存場所
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
プログラミングとは Q.プログラムとは何か? A.コンピュータを制御するための,コンピュータに対する命令(指示)の集まり.
比較プログラム言語論 平成17年5月18日 森田 彦.
コンピュータプラクティス I 再現性 水野嘉明
コンパイラ 2011年10月17日
Java I 第2回 (4/18)
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
比較プログラム言語論 平成16年4月21日 森田 彦.
言語体系とコンピュータ 第6回.
プログラミング 平成24年10月23日 森田 彦.
オブジェクト指向言語論 知能情報学部 新田直也.
プログラミングとは Q.プログラムとは何か? A.コンピュータを制御するための,コンピュータに対する命令(指示)の集まり.
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
情報科学1(G1) 2016年度.
計算機システム ハードウェア編(第3回) ~ ノイマン型コンピュータ ~.
言語処理系(5) 金子敬一.
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
心理学情報処理法Ⅰ コンピュータ言語の歴史.
コンパイラ 2012年10月15日
コンパイラ 2012年10月22日
コンパイラ 2011年10月24日
比較プログラム言語論 平成16年5月19日 森田 彦.
コンピュータの原理 1E17M053-9 奈良 皐佑 1E17M070-7 師尾 直希        1E17M078-6 渡邊 惇.
比較プログラム言語論 平成17年4月20日 森田 彦.
プログラミング言語論 第3回 BNF記法について(演習付き)
プログラミング言語入門.
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
東京工科大学 コンピュータサイエンス学部 亀田弘之
比較プログラム言語論 平成17年5月11日 森田 彦.
Fortranについて 高エネルギー加速器研究機構 平山 英夫.
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
オブジェクト指向言語論 第十四回 知能情報学部 新田直也.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
コンパイラ 2011年10月20日
コンパイラ 2012年10月1日
文法と言語 ー文脈自由文法とLR構文解析ー
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
2013年度 プログラミングⅠ ~ 内部構造と動作の仕組み(2) ~.
ガイダンス 電子計算機 電気工学科 山本昌志 1E
東京工科大学 コンピュータサイエンス学部 亀田弘之
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1.
香川大学工学部 富永浩之 知識工学1 第1-1章 人工知能と知識工学 香川大学工学部 富永浩之
アルゴリズムとデータ構造1 2009年6月15日
第6回放送授業.
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
アルゴリズムとデータ構造 2010年6月17日
比較プログラム言語論 平成16年5月12日 森田 彦.
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
C#プログラミング実習 第1回.
プログラミング入門 -「計算」に注目して考える-
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

比較プログラム言語論 平成16年4月28日 森田 彦

レポート(4/21)総括  < テーマ >  あなたが最も興味・関心のあるプログラミング言語はどのような言語ですか?どれか一つ挙げて、そう選んだ理由を述べて下さい。 <回答結果> PASCAL <感想> BASIC C++ & C Java <質問> Prolog

Java言語派 (前略)私は昨年インターンシップに行ったのですがそこは情報システムに関する部署でした。私が研修させていただいた際にJavaを使った新システムの導入のプレゼンをしていたり、職場の方々にお話を伺ったときには必ずと言っていいほどJavaの有効性や必要性に関しての意見があったのを覚えています。このような経験から私は現在興味関心があるのは「Java」言語です。 自分が特に興味・関心があるのはJava言語です。理由は簡単で,去年自分がはじめて勉強した言語だからです。Java言語はどんな環境下でもJava対応の仮想記憶装置があれば動くので、今後の発展が期待できますし、Javaの敬遠される理由の「遅さ」もいずれ解決できるようになるはずです。最近はライバルにC#言語が出てきたので競走することでより良い言語になると思っています。

Prolog派 (前略)この言語はどういったものなのでしょうか。 「人間は死ぬ」「ソクラテスは人間である」→「ソクラテスは死ぬ」ソクラテス=人間=死ぬ、ゆえにソクラテス=死ぬということを、例えば「人間=1」「死ぬ=2」「ソクラテス=3」と代入して計算しているのでしょうか? そうなのであれば以前習ったJavaでもできると思います。 多分違う方法で解答を出していると思うのでそれが知りたいと思い興味が沸きました。 今回の講義で紹介されたプログラミング言語の中で、最も興味関心をもった言語は、Prologでした。理由は、この言語の基本的な特徴が他の言語とまったく違うように感じたからです。論理文を入力して、その文からコンピュータが推論して新しい論理文を作るというシステムが画期的な感じがしてとてもおもしろいと思いました。コンピュータに人間の論理をたくさん記憶させて、人工知能をつくるという考えはおもしろいと思います。

C++ & C言語派 私がこの講義を受け始めた現在で興味・関心のある、プログラミング言語を一つだけ選ぶとしたら、そのプログラミング言語は『C++』である。理由としては複雑であるがゆえの高度さである。 複雑・難しいと感じるということは、そのプログラミング言語が、深く濃く作られているということである。そう考えるとこれに習熟することで、簡単に効率よく、複雑な処理ができるのではと思うからである。さらに理由を加えるならば、複雑であるために一つの結果を出すための解がJavaやその他の言語にくらべて、はるかに多くあるように見えるからだ。 「C言語」や「C++」という言葉自体は何度も聞いたことはありましたが、それを元にしてJAVA言語が作られたということを今回初めて知りました。プログラミング言語はJAVAしか触ったことがなかったのですが、「C++」と、それの一部の機能を排除して開発された「JAVA」とは具体的にはどのように違うのかという点に興味を持ちました。

BASIC言語派 私が一番興味深かった言語はBASICです。 (中略)初心者向けでインタプリタ型の言語ということで、物事を考える時に、熟考して一から十まで自分の理解速度を守らないと納得が行かない性格の私に合っている気がしました。 また初めての、開発者向けではない、初心者も使える言語という点にも興味があります。元来プログラムはSEが使うもので他の人々が使用することはなかったと思われます。そのプログラムを一般人も使用することになった背景にコンピュータの普及やその後のコンピュータ社会の様子が伺える点が面白いです。 私が一番興味を持った言語はBASICでした。なぜなら、一部の専門家しか使うことの出来なかったプログラミング言語が、一般の人にも比較的易しく扱いやすくなったことで、大いに普及したという点と、今なおこの言語のファンが多くいるという話を先生から伺ったからです。 (中略)それまで手の届かないところにあったプログラミング言語がとっつきやすくなり、パソコンで色々出来ることの楽しさを知るきっかけになった人々がたくさんいたのだろうなぁと思いました。

PASCAL(Delphi)派 自分が今回の講義を聞いて興味をもったプログラミング言語はPASCALです。自分はプログラミングを今後も学んでいく上でこれは構造化プログラミング、データ構造系的なプログラミングの教育に最適ということで、プログラミングの基本的なことを学ぶためにある言語だと思ったのでこれに興味をもちました。また言語仕様を広げすぎないように作られ、言語処理の効率もあがり後のC言語の発展のもとになっているという点で、PASCALを初めに学んで理解していくことでプログラミングの大体の構造が初めに理解できると考えたからです。

<感想> 1つの言語が1つあるいは2つの目的のためにある。ということは、1つの言語で統一できないほど、コンピュータに人がたくさんのことを要求しているからなのだと思います。今はJAVAをやっていますが、きっとJAVAは万能ではありえないんだろうと思いました。

<質問Ⅰ> 先生自身はどの言語が最も興味がありますか?またそれはなぜですか? 先生が見る言語の中でJAVAの次にブレイクしそうな言語ってありますか?もしあればそれは何なのか、どうして次にきそうなのか、JAVAや他の言語とはどう違うのかなんかを聴いてみたいです。 「prolog」言語は人工知能の開発に適しているのでは?といった具合に生まれた言語だが実際は適してなかったという話でしたが、それは論理記述と推論機構で書かれたプログラミングは開発に適していた反面、関数を使ったモノに比べソースが長くなりすぎてサイズが大きすぎて使いづらかったからですか? それとも単にやっぱり関数を使った言語の方が人工知能の開発に適したからですか?そこが少し気になりました。

<質問Ⅱ> なぜ、JavaはJavaの実行環境があれば、どのOSや機種でも動作するのに、ほかの言語は、特定のOSや機種が制限されたりしてしまうのですか?プログラミングの言語の仕組みが違うからなのかな、とは思いますが…よくわかりません。 ソース 翻訳 JVM Windows JVM Mac JVM Linux 実行 <Java言語> バイトコード ソース 翻訳 機械語Windows 機械語Mac 機械語Linux 実行 <通常の言語> 機械語はプラットフォーム毎に異なる。

プログラミング言語の理論 <本日のテーマ> <内容> 高水準プログラミング言語のルーツは? プログラミング言語はどのように作られたのか? プログラミング言語の理論的基盤は? (プログラミング言語発展の歴史における)ALGOL60の位置づけとは?

ノイマン型コンピュータの登場 ENIACの限界: 処理(計算の種類)毎にスイッチを切り替える→膨大な作業→ハードウェアのみの世界 ノイマン:プログラム内蔵型コンピュータを提唱  1949年 モーリス・ウィルクス(英国ケンブリッジ大) EDSAC完成 世界初のプログラム内蔵型コンピュータ(ノイマン型コンピュータ)  ウィルクスの苦悩    機械語プログラミングを実行→“恐ろしい考え”「残りの人生はプログラムのバグ探しで費やされるのでは・・・。」 もっと簡単に(分かりやすく)入力できるプログラミング言語はできないものか? →アセンブリ言語の開発・利用→ まだまだ手間のかかる作業 高水準言語の必要性

ウィルクスの苦悩 もっと楽にならないか・・・? <アセンブリ言語プログラム> メモリ 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

最初の高級言語A-0の誕生 アセンブリ言語よりも、もっと人間に近い言語を・・・。例えば のように簡単に計算できるような・・・。     b=25     c=a+b  のように簡単に計算できるような・・・。 1952年 グレース・ホッパー(レミントン・ランド社)らがA-0を開発。 ところが・・・ 翻訳されたプログラムの性能は、アセンブリ言語のものの1/5~1/10程度→最適化の不十分さ→実用には向かず。

FORTRANの誕生 1953年 ジョン・バッカス(IBM社)が、FORTRAN開発プロジェクトの提案 IBM社(当時は、コンピュータに関しては新興企業)の社運をかけたプロジェクトに発展 1957年FORTRAN(Formula Translation system)完成。 数学的計算(科学技術計算)向けに設計→最初に普及したコンパイラ。 しかし・・・、会計処理などの事業用には不向き。 ホッパーらがCOBOLを開発→広汎に普及。

数理言語理論の発展 1956年 チョムスキー(米国の言語学者)が形式文法理論(言語文法の数学的モデル)を発表→言語学の革命 1956年 チョムスキー(米国の言語学者)が形式文法理論(言語文法の数学的モデル)を発表→言語学の革命 形式文法で記述できる形式言語が研究対象→人工言語の研究が進む→プログラミング言語に反映(プログラミング言語の理論的基盤を与える)

形式(生成)文法理論 アルファベットの定義 言語の記述に用いる記号を定義する。 英語の場合:{a,b,c,・・・,z} 文法Gの定義  言語の記述に用いる記号を定義する。  英語の場合:{a,b,c,・・・,z} 文法Gの定義  G=(N,T,P,S)  N:非終端記号、T:終端記号(単語)  P:生成規則の組、S:開始記号 Gによって生成される文の集合→言語

Gの例:変数名を規定する文法GN アルファベット(大文字)と数字で変数名を規定する場合 GN=(NN,TN,PN,SN)    TN={A,B,・・・,Z,0,1,・・・,9}    PN={<名前>→<名前><文字>,       <名前>→<文字>,       <名前>→<数字>,       <文字>→A,<文字>→B,・・・,<文字>→Z       <数字>→0,<数字>→1,・・・,<数字>→9}    SN=<名前>

文法の種類(チョムスキー階層) 0.句構造文法 1.文脈依存文法 2.文脈自由文法 3.正規文法 プログラミング言語は文脈自由文法が主  生成規則に制約がない 1.文脈依存文法  生成規則:AbC→ABC と表せる文法  A,B,C:終端記号と非終端記号の和  b:非終端記号  ※ 書き換えが前後の記号(文脈)に依存  2.文脈自由文法  a→A a:非終端記号 3.正規文法  a→Ab または a→A プログラミング言語は文脈自由文法が主 構成要素が決まったら文を生成できる。

例:文脈依存文法(日本語) G=(N,T,P,S) <文の生成> N={<主部>,<述部>,<名詞>,<動詞>,<助詞>,<文>}      <述部>→<名詞>を<動詞>,      <名詞>→私|彼|パン|牛乳, <助詞>→は,      <動詞>→食べる|飲む } S=<文> <文>→<主部><述部> →<名詞><助詞><述部>     →私<助詞><述部>→私は<述部> →私は<名詞>を<動詞>→私は<名詞>を食べる →私はパンを食べる <文の生成>

プログラミング言語の構成 プログラム モジュール 手続きと関数 文 処理の最小単位。「a=b+c;」など。 式 演算子と非演算子からなる。a*b、a>bなど。 語 名前、データ、演算子、予約語(for,ifなど) 文字 英数字、特殊記号等

ALGOL60プロジェクト 1960年IFIP(International Hederation for Information Processing)「国際情報処理連盟」により、ALGOL(ALGOrithmic Language)制定  欧米の研究者が共同で開発 形式文法理論による文脈自由文法言語として制定→当時の言語研究の到達点 ホア(プログラミング言語学者)「ALGOL60こそは、偉大な業績であって、それに続く何者も凌駕できないでいる。」  ALGOL68へ展開→言語規模の巨大化

その後・・・ ALGOL60の構文規則「文の区切りに;を用いる」、「使用する変数は全て宣言する」などは、PASCALやC言語など後継言語に受け継がれる。 プロジェクトの一部メンバーはプログラミング言語の構文解析の精密化、巨大化よりも、プログラミング手法そのものに関心を移した。→正しい(バグのない)プログラミングとはどういうものか?→プログラミング手法の研究へ発展

第3回目レポート  < テーマ >  本日の講義で、あなたが最も興味を持った点はどのような点ですか?講義の全体的な感想と共に、できる限り具体的に、200字~400字程度で記述して下さい。 なお、上の記述を行った上で,質問や以前のレポートに対するコメント等を付加しても結構です。 提出先:hiko@edu.sgu.ac.jp  件名:学籍番号(半角)+半角空白+氏名を記入して下さい。    例) s02xxx 学院太郎

プログラミング言語発展の歴史 時間 低水準言語 オブジェクト指向言語 高水準言語 超高水準言語 言語以前 機械語 アセンブリ言語 Delphi 高水準言語 C++Builder FORTRAN PL/1 ビジュアル開発環境 COBOL ALGOL ALGOL68 PASCAL Ada Object PASCAL BASIC C言語 C++ Lisp Java 超高水準言語 Prolog Smalltalk 参考:河村一樹、斐品正照

ノイマン型コンピュータ CPU(中央処理装置) メモリ プログラム データ レジスタ 制御 演算 RAM(読み書き可能)