Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "比較プログラム言語論 平成16年5月12日 森田 彦."— Presentation transcript:

1 比較プログラム言語論 平成16年5月12日 森田 彦

2 レポート(4/28)総括 < テーマ > <回答結果> 高水準言語発展の歴史(経緯)に最も関心 ALGOL60プロジェクトの位置づけを再認識
 < テーマ >  本日の講義で、あなたが最も興味を持った点はどのような点ですか?講義の全体的な感想と共に、できる限り具体的に、200字~400字程度で記述して下さい。 言語の歴史 ALGOL60 形式文法 その他 <回答結果> 高水準言語発展の歴史(経緯)に最も関心 ALGOL60プロジェクトの位置づけを再認識 形式文法理論に知的興味

3 レポート抜粋ー言語発展の歴史① (前略)プログラミング言語が今日まで発展してきたのは、プログラマーや言語の開発者達が、常にそれに満足していなかったためだろう」ということです。一度その言語に満足してしまえば、そこでプログラミング言語の歴史は終わってしまったかもしれないということを考えると、やはり言語の開発者達やプログラマーは常にシンプルで高性能な言語を求めていたのだろうと考えました。(中略) また、昨年習ったJava言語の文の終わりには「;」という規則は、ALGOLから発展されていると知り、プログラミング言語の歴史というものはただ単に「昔は~であった」というだけでなく、今日にも生かされているのだと改めて知る事が出来ました。

4 レポート抜粋ー言語発展の歴史② 今日の講義で興味・関心を持ったことはコンピュータのプログラムを人間の考えかたに近づけるということです。単純にすごいことだと思った。 もし 本当に人間と同じような考えかたでプログラムできるとしたら、もっと色々なことがコンピュータによって出来るようなきがします。 私個人としては、プログラム言語がもっと簡単になり誰にでも操れるようなプログラム言語がでてくることを期待しています。

5 レポート抜粋ーALGOL60 今日の講義で興味を持ったことは、ALGOL60についてです。このALGOL60によって、PASCALやC言語が継承されていったことは、この言語世界でも歴史がちゃんとあることを感じました。そして今もなお、プログラミング言語のプロジェクトの研究が行われ、さらにハグのない、正しいプログラミングを開発しようとしているのだと思うと、どこまでプログラミング言語が発展していくのか、そして進化していくのか予想がつきません。もっと性能が優れた言語、誰もが使いやすい言語、などが今後作られていけばいいと思いました。ウィルクスの苦悩や、チョムスキーの形式文法論を無駄にしないようにするためにも、今後も発展していくべきだと思います。

6 レポート抜粋ー形式文法理論 今回の講義でプログラミング言語が文法によって構成されているということがおどろきました。しかも文法にも種類があること。 今までプログラミングやアルゴリズム論をやってきてもぜんぜん気づきませんでした。といことは、まったく意味もわからずやってきたということで、意味を理解していてやってたいらもっとわかったのかなとおもいました。もったいなことをしたと思います。プログラミング言語は文脈自由文法が主で構成要素が決まったら文を生成できる。というのは要素を入力すればちゃんと意味の通る文になるということですよね?それをできるように作った人はすごいと思います。

7 レポート抜粋ー質問① (ALGOL60が)形式文法理論による文脈自由文法言語として制定され、当時の言語研究の到達点というのは、その時代の時に研究は止まってしまったということなのですか?なぜ完全に言語研究は到達したといえたのですか? 「エスペラント」っていう世界標準語を目標として作られた言語、あれもこの「形式文法理論」にのっとって開発!?されているのかちょっと疑問に思いました。

8 補足 エスペラント語 エスペラント→ザメンホフのペンネーム 1887年 ポーランドのザメンホフが提唱 世界共通の言語を目指す
補足 エスペラント語 1887年 ポーランドのザメンホフが提唱 世界共通の言語を目指す   より正確に言うと、目指したのは・・・  諸民族の対等な交流の手段としての中立言語 背景には、 「諸民族の平和と共存」 というテーマがある 成立時期は形式文法理論のはるか以前 エスペラント→ザメンホフのペンネーム 「希望しつつあるもの」という意味

9 レポート抜粋ー質問② A-0が上手くいかなかった一方、翌年のFORTRANが成功したようですが、A-0とFORTRANの違いは何だったのですか?  またもうひとつ質問なのですが、ALGOL68は規模が大きくなりすぎて次第に使われなくなっていったとおっしゃっていましたが、Javaはどうなのでしょう? Javaはパッケージがむやみに増えないように配慮されているとのことですが、現状ではあまりに重過ぎます。肥大したプログラム言語と同じように、重たいプログラム言語も淘汰されていくのではないのですか? Javaは現状、マイナーOSユーザに優しく面白くはあっても、快適ではありません。実際、力を入れていたはずの携帯端末方面では、auがBREWを使い始めています。 最適化

10 レポート抜粋ー4/14の質問への補足 1999年12月にDigital Mars社のWalter BrightがD言語を発表。
質問: C言語の次にD言語はリリースされるのでしょうか? 1999年12月にDigital Mars社のWalter BrightがD言語を発表。 C++やJava言語の後継に位置づけられる。 言語理論の完全性よりも、実用性を重視。 現在のコンパイラ理論の蓄積を結集して、とにかく、大きなシステムを効率よく開発できるように工夫。 日本語版(翻訳)サイト 

11 プログラミング言語は分かりにくい!? 自分が気づいた点はプログラム言語の種類はたくさんありますがどれも簡単にはプログラムできないということです。それぞれの用途や適応により数多くの言語が生み出されたことは解りますし、簡単になってきていることも理解できます。しかし、簡単にプログラムできるほど手軽にはなっていないと思います。自分が理解できていないというのもあるかもしれませんが、関数がたくさんあることで似たような式も多く、どれを使えばいいのかわからないことも多々あります。計算式を自動的に検出してくれるなどの機能があれば楽になると思いますが、それだと逆にプログラミングの楽しみがなくなるのかなとも思いました。

12 プログラミング言語翻訳の仕組み <本日のテーマ> <内容> アセンブラとコンパイラ コンパイラとインタプリタ プログラム実行までの流れ
コンパイルの過程   ① 字句解析、構文解析、意味解析   ② 最適化   ③ コード生成

13 アセンブラとコンパイラ 高水準プログラミング言語を実行するには 機械語への翻訳(変換)が必要 翻訳システムの名称
 機械語への翻訳(変換)が必要 翻訳システムの名称  アセンブリ言語→機械語:アセンブラ  高水準言語→機械語:コンパイラ

14 コンパイラとインタプリタ コンパイラ インタプリタ 高水準言語プログラム 翻訳 翻訳・実行 デバッグに手間がかかる。 実行
実行速度が速い。 実行 デバッグには便利。 実行速度は遅い。 実行結果

15 プログラム実行までの流れ 原始プログラム 翻訳(コンパイル) 目的プログラム リンケージエディト 複数のモジュールをリンク 実行結果 実行
実行可能プログラム 第4回目レポートへ

16 コンパイルの過程 字句解析、構文解析、意味解析 最適化 コード生成 原始プログラム 中間言語1 中間言語2 目的プログラム
プログラム実行までの流れへ

17 字句(・意味)解析 原始プログラムを字句に分解する。 字句:名前、定数、予約語、区切り記号 ・・・ int a,b; a=4;
 ・・・  int 予約語 a 名前 , 区切り b 名前 ; 区切り a 名前 = 予約語 4 定数 ; 区切り b 名前 = 予約語 ( 区切り記号 a 名前 + 予約語 2 定数 ) 区切り記号 * 予約語 3 定数 ; 区切り

18 構文(・意味)解析 字句の並びが、文法的に正しいかどうかをチェックする。→ 文脈自由文法に沿って構文解析 構文解析結果を中間言語に表現
コンパイル過程へ 字句の並びが、文法的に正しいかどうかをチェックする。→ 文脈自由文法に沿って構文解析 構文解析結果を中間言語に表現 ポーランド記法、三つ組み、四つ組などの記法がある。 四つ組の場合:(演算子,被演算子1,被演算子2,結果)と表す。 例: b=(a+2)*3; の場合    (+,a,2,R1)    (*,R1,3,R2)    (=,R2,φ,b) R1,R2:レジスタ φ:空値(対応項目なし)

19 最適化 コンパイル過程へ 構造解析により生成された中間言語プログラム→冗長な部分を省き、プログラムの時間効率と領域効率を向上させる。→次のような方法(種類)がある。  ① たたみ込み  ② 共通式の置換  ③ 繰り返し文の再編  ④ レジスタ割り付けの再編  ⑤ 式評価の変更  ⑥ サブルーチンの組み込み

20 たたみこみ 演算結果の置き換え→事前に計算可能な変数については、その計算結果で置き換える。 a=3; b=a+8; b=11;

21 共通式の置換 複数回現れるが、その演算結果が同じとなる式→共通式 2度目以降に現れた共通式→最初の式に置換 x=3; x=3;
y=2*x+4; ・・・ z=3*(2*x+4); x=3; y=2*x+4; ・・・ z=3*y;

22 繰り返し文の再編 繰り返し文の中で値が変化しない演算式があった場合は、それを繰り返し処理の前に移動する。
for (int i=1; i<=100; i++) { c=2; y[i]=c*i+2; } c=2; for (int i=1; i<=100; i++) { y[i]=c*i+2; }

23 頻繁に参照あるいは演算される変数の値をレジスタに格納しておく。 式評価の変更 演算順序の入れ換えにより、演算の回数を減らす。
レジスタ割付の再編  頻繁に参照あるいは演算される変数の値をレジスタに格納しておく。 式評価の変更  演算順序の入れ換えにより、演算の回数を減らす。 c:=a*x+a*y; c:=a*(x+y); 乗算の回数が1回減少

24 サブルーチンの組み込み 手続きや関数(Javaではメソッドに対応)を呼び出す箇所で、直接その処理を組み込む。 ・・・
double Heikin(int x, int y) { return (x+y)/2.0; } ・・・ z=Heikin(x,y); 呼び出し命令ではなく、直接、関数の処理を書き込む。

25 コード生成 最適化された中間言語プログラムから目的プログラム(機械語)を生成。 レジスタ 中間言語 ADD R3,R1,R2 アセンブリ言語
コンパイルの過程へ 最適化された中間言語プログラムから目的プログラム(機械語)を生成。 中間言語 ADD R3,R1,R2 アセンブリ言語 (+,a,2,R3) aの値 2 (a+2)の値 R1 R2 R3 レジスタ

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


Download ppt "比較プログラム言語論 平成16年5月12日 森田 彦."

Similar presentations


Ads by Google