比較プログラム言語論 平成16年5月19日 森田 彦 レポート(5/12)総括 < テーマ > 本日の講義で、あなたが最も興味を持った点はどのような点 ですか?講義の全体的な感想と共に、できる限り具体的に、 200字~400字程度で記述して下さい。 <興味を持った点> 翻訳(コンパイル)の過程 最適化処理 D言語 <感想> エスペラント語について <質問> 多数あり <レポートへのコメント> 「プログラミング言語は簡単になって いない」という意見に同意が集まっ ています。→HPを参照して下さい。 興味1-コンパイルの過程- 最も興味を持った点は、プログラムの実行まで には色々なことをやっているところです。 その中でも、コンパイルの過程で字句解析、構 文解析、意味解析では原始プログラムを字句 に分解しその字句が文法的に正しいかをチェッ クしているとか、最適化ではプログラムの時間 効率と領域効率を向上させるためにいろんな 方法がとられていることを初めて知った。 普段は何気なくつかっているけど、プログラム の実行までにこういうことが行われているのは すごいと思った。 興味2-最適化- 今日の講義の中で最も興味を持った点は、最適化についてで す。ただひとこと「最適化」と言っても、演算回数を減らすのに は実に様々な種類があり、一つ一つは時間・領域ともにほんの 少しの節約にしかならなくとも、プログラムの内容が複雑になり ソースが長くなれば長くなるほど効率を上げているのだなと思 いました。(中略)人間が多少効率を悪く書いてしまったプログ ラムを、人間が考えたシステムによって直されるというのは面 白いと思いました。 今まで最適化と言ってもただ簡単にその処理を簡単にすると 言う1つの処理を行っているだけだと思っていたが、最適化の 方法が色々あるのに、少々関心が持てた。たたみこみや共通 式の置き換え、繰り返し文の再編、レジスタの割り付けの再編、 式評価の変更、そしてサブルーチンの組み込みという処理全 てをあわせて最適化なのだということがわかった。 興味3-D言語- 今回の講義で一番興味を引いたのはC言語の続きの D言語なるものがあるという話でした、前回の講義で はまだ開発されていないと言っていたけど探すと意外 に見つかるものなのだと思いました、しかし開発元が 違うみたいなので一般に普及することは無いかなと思 いました。 言語を作ってもこのように世間に知れ渡らないまま多 くの言語が消えたのかと考えると言語開発の会社も 大変だと思いました。そして多くの言語が作られてい ることからプログラム言語で出来ることはこれからど んどん増えていくんだと考えさせられるところでもあり ました。 感想-エスペラント語- 講義の内容と、ちょっと外れたところまでサポートし ていただいて、ありがとうございました。エスペラント については少し調べたことがあるものの、「エスペラ ント博士が開発した」というのと言語本体を少々だけ だったので、今日のお話が聞けてとても面白かった です。 質問の中にエスペラント語という世界共通の言語を 目指した言語があると初めて知り驚きました。そして、 その言語を作る動機として「諸民族の平和と共存」と いう大義を知り、考えさせられました。現状では世界 の共通語として英語が使われていますが、やはりネ イティブに分があるのは否めないと思ったからです。 質問1-コンパイラとインタプリタの融合- コンパイラは翻訳と実行が分かれていて、デバッグに手間が かかるけど、実行速度が速いというメリットがあり、インタプリ タは翻訳と実行が同時にでき、コンパイラとは逆にデバッグ には便利だけど、実行速度が遅いというデメリットがあります。 が、でもどうしてこの二つのメリットの部分だけを組み合わせ た、もっと効率のいい翻訳と実行のプログラミングはないの でしょうか? コンパイラはテバックに手間がかかるが、実行速度が速い。 インプリンタはテバックには便利だが,実行速度は遅い。とい うように、それぞれにメリットとデメリットがあります。テバック に便利で、実行速度が速いというのは不可能なのですか? デバッガ機能を備えたコンパイラシステムが発達 → JBuilderもその一例 Javaのコンパイラ戦略 質問2-最適化- 複雑なプログラムの中で最適化が行われていな かった場合の処理の速度と行われている場合の処 理の速度ではどのくらいの差が出てくるのだろうと 思いました。 人間が回りくどくプログラムしたとき(ソースを打ち込 んだとき)に、その最適化したプログラムを目に見え る形にして表示することはできないのでしょうか?そ うしたら、「あ、ここで最適化が行われたんだ。」とい うのがよくわかり、次からはある程度人間自身が最 適化して書き込むようになって、機械が最適化する 時間が短縮されると思うのですが。 最適化と分かりやすさについて 無駄な処理をなくすことは必要 しかし、一般に最適化を進めるとプログラムの処理 内容が分かりにくくなる。 <例>半径rの円の面積Sと球の体積Vを求める場合 double pi=3.14; S=pi*r*r; V=4*pi*r*r*r/3; double pi=3.14; 最適化 S=pi*r*r; V=4*S*r/3; 原則:プログラムは分かりやすく。後はコンパイラの最適化に任す。 しかし、処理時間のかかるプログラムでは、プログラマによる最適化の 工夫(アルゴリズムの工夫も含む)が必要。 質問3-コンパイラのエラーメッセージ- 私自身はコンパイルの時点でエラーになることが多 いですが、コンパイラはどこまでエラーをだすので しょうか? ひょっとしたら、コンパイルできるエラーも 存在するのではないかと思っています。たぶん、言 語によっては厳しいものも安易なものもあると思い ますが、そこはどうなのでしょうか?? 去年の講義でも思いましたがプログラムを打って実 行する際にエラーが発生して間違っている場所はわ かりましたがこれをどのように修正したらよいかわ かればな、とずっと思っていました。今後このような 機能のついたソフトは登場するのでしょうか? Delphi VS Java 言語によって文法エラーのレベルが異なる。 <Delphi> <Java> var a,b,c: Integer; begin a:=4; b:=2; c:=a/b; ← エラー end; 文法的に厳しい int a,b,c; a=2; b=3; c=a/b; エラーなし! 皆は、どちらを好みますか? JBuilderのエラーメッセージ 内容によっては、修正候補を示してくれている。 <本日のテーマ> 翻訳システム(コンパイラ)の数学理論 <内容> チューリング機械 オートマトン 形式文法とオートマトンの関係 チューリングの考え 1937年 アラン・チューリング(Turing) 計算理論の モデルとしてチューリング機械を提唱 計算とは(チューリングの考え) 紙に書かれた記号を読み、それに基本的な思考操 作を加えて新しい記号を書く。→この操作の繰り返 し チューリング機械 上の“計算”を機械的に実行するモデル→計算過 程をある理想的な機械で表現→計算可能とはどう いうことかを研究した。 チューリング機械 テープ、ヘッド、有限状態制御部 ヘッド 制御部 テープ → 記憶装置 → 入出力装置 → CPU チューリング機械の動作 ①ヘッドが見ている記号を書き換える ②ヘッドを左に動かす ③ヘッドを右に動かす ④計算を終了する コンピュータの 原型モデル チューリング機械の例 記号”0”を記号”1”に置き換える 有限状態制御部の規則(状態遷移関数) (Q1,1)=(Q2,1,R) 1 B B ・・・ (Q2,B)=(Q2,B,L) (Q2,1)=(S,0,R) Q1 Q1,Q2,S:状態 1,0,B:テープの記号 1 B B ・・・ R,L:ヘッドの移動 0 B B ・・・ S Q2 1 B B ・・・ Q2 状態遷移関数で表現→計算可能 オートマトン オートマトン(automaton) 元々は、人や動物のまねをする装置を指す→ ロボット→自動計算機械のモデル→チューリ ング機械がその代表例 情報科学では・・・ 状態遷移関数によって定義された操作を繰り 返す仮想機械を指す。 状態遷移関数の種類によって色々なオートマ トンを定義可能 有限オートマトン テープ、ヘッド、有限状態装置から構成 ヘッドは一方向のみ動く 有限オートマトンMの定義 M=(Q,Σ,δ,q0,F) Q:状態、Σ:入力記号、δ:状態遷移関数 q0:初期状態、F:受理状態 有限オートマトンの例 Q={q1,q2,q3}、Σ={a,b}、F={q2} δ(q0,a)=q1, δ(q0,b)=q0 , 形式文法と似 δ(q1,a)=q1, δ(q1,b)=q2 , ている・・・? δ(q2,a)=q1, δ(q2,b)=q0 入力記号“ab”が受理されるか? 受理! δ(q0,ab)= δ(δ(q0,a),b)=δ(q1,b)=q2 入力記号”ba”は受理されるか? 受理されない! δ(q0,ba)= δ(δ(q0,b),a)=δ(q0,a)=q1 形式言語理論との関係 言語の種類 受理するオートマトン 句構造文法言語 チューリング機械 文脈依存文法言語 線形有界オートマトン 文脈自由文法言語 プッシュダウンオートマトン 正規文法言語 有限オートマトン コンパイラ(+コンピュータ)→オートマトンの一種 ALGOL60プロジェクトの背景 形式文法理論の誕生 チューリング機械に始まるオートマトン理論の 発展 オートマトン理論と形式文法理論の融合 プログラミング言語理論の基礎が確立 ‘60年代はコンパイラ開発の時代 ’70年代はプログラミング方法の研究へ 第5回目レポート < テーマ > 本日の講義で、あなたが最も興味を持った点はどの ような点ですか?講義の全体的な感想と共に、でき る限り具体的に、200字~400字程度で記述して下さ い。 なお、上の記述を行った上で,質問や以前のレポート に対するコメント等を付加しても結構です。 提出先:[email protected] 件名:「学籍番号(半角)+半角空白+氏名」を記 入して下さい。 例) s02xxx 学院太郎 Javaのコンパイラ戦略 Java言語の翻訳は2段階 Java言語プログラム Javaコンパイラ 機械語ではない! コンパイラとインタプリ タの併用 高い互換性(移植 性)を実現 Javaバイトコード(CPUやOSによらず共通) Javaインタプリタ (Windows) Javaインタプリタ (UNIX) プログラムの実行 Javaインタプリタ (MacOS)
© Copyright 2025 ExpyDoc