日時:2005年 2月23日(水) 18:30 から ※日程が変更されました※
場所:東京農工大学 工学部情報コミュニケーション工学科 7号棟 3階3K室
JR中央線東小金井駅南口から,西へ向かって徒歩8分程度です. 農工大の東門に建物の配置図があります. http://www.cs.tuat.ac.jp/access.html に案内図があります. 食事: ありません.東小金井駅近辺のモスバーガー,途中のピーコック (マク ドナルドあり)などをご利用ください.
話者:
三浦義之(東京農工大学大学院工学府)
話題:
プログラム実行原理学習のための計算機シミュレータ
概要:
現在,計算機の実行原理を学習するために,シミュレータが広く用い られている.しかしながら現在提案されているものは,ハードウェアの 実行原理を扱ったものがほとんどである.そこで,我々はハードウェア だけではなく,ソフトウェア―高水準プログラミング言語で記述された プログラム―の実行原理についても学習できるシミュレータED21を開発 した.ED21は,専用に開発したプログラミング言語EL21用のコンパイラ, およびその実行を観察可能なコンパイルブラウザを備えたシミュレータ である. 本発表では,このシミュレータの設計方針や開発の経緯,評価につい て紹介する.
出席者:17名
和田英一(IIJ),伊知地宏(ラムダ数教研),丸山一貴,鈴木信吾(電気通信大), 石畑清(明治大),久保田稔(千葉工業大),山口文彦(東京理科大), 金子敬一,笹田耕一,並木美太郎(東京農工大),吉田経彦(埼玉大), 鎌田敏之(愛知教育大),飯島浩光(つかひやすさ考房),金子知適,副田俊介, 田中哲朗,筧 一彦(東京大)
発表の概要
現在,計算機の実行原理を学習するために,シミュレータが広く用い られている.しかしながら現在提案されているものは,ハードウェアの 実行原理を扱ったものがほとんどである.そこで,我々はハードウェア だけではなく,ソフトウェア―高水準プログラミング言語で記述された プログラム―の実行原理についても学習できるシミュレータED21を開発 した.ED21は,専用に開発したプログラミング言語EL21用のコンパイラ, およびその実行を観察可能なコンパイルブラウザを備えたシミュレータ である. 本発表では,このシミュレータの設計方針や開発の経緯,評価につい て紹介する.
- 先行研究での仮想マシンはどのようなものを仮定しているか. A:3つ示した先行研究のうち,2つはオペランドにメモリのアドレスを 指定するタイプのアセンブリ命令を使うマシン.スタックマシンではない. もう1つは不明. - 成績の悪い学生の方が伸びが大きい,というのは平均に近付こうとする 回帰効果によるものではないか. A:回帰効果については認識していなかった.回帰効果によるものか, 今後調べていく. - コンパイラは構文エラーに弱いのではないか. A:エラーメッセージの種類とその内容など,他のコンパイラを 参考にしながら,今後直していく. - どのようなパーサジェネレータを使ったのか. A:琉球大学の河野先生の,コンパイラ構成論のWebページを参考に, スクラッチから書いた.JavaのParserクラスや,YACCなどは後で知った. - 自己書き換え可能なものに見えるが,もっとモダンなコンパイラにしても 良かったのではないか. A:分かりやすさを第一にしたため,このような形になった. 自己書き換えは,命令とデータの等価性を理解させたいため,可能にした. - 大学ではEDSACを最初に学び,そこでは自己書き換えをやった.なので,自己 書き換え可能なもの,というのも良いかも知れない. A:命令も数値で表されることが分かったり,サブルーチンコールが無くても, 自己書き換えを使ってそれと同等の働きをするアセンブラプログラムを 書いた学生がいたりするなど,実際に使ってやはり良い点はあった. - 現在では基本アーキテクチャ,アセンブリ,コンパイラが実装されているが, 何をどこまでやることを目指しているのか.どんどん色々な機能を入れたく なってくる. A:コンパイラについては,ソースプログラムはコンパイラによって アセンブリプログラムに変換されること,その形になってから実行されること, といった基本的な事柄を理解させることを目指している. しかし拡張の余地も多く,構想も色々あり,もっと複雑なことまで 学べるようにするかもしれない.そうなったとしても,いくつかのバージョンを 用意するなどして,何を学ぶかをはっきりさせるようにしたい. - どのような学生を対象としてこのシステムは作成されているのか. A:情報系の大学一年生程度を対象としている. - 計算原理を理解させるのであれば,ハードウェアを組ませる方が望ましいのでは ないか(シミュレータでは悪いこともあったりするので). A:それが理想ではあるが,いきなりハードウェアを組ませるよりも, 初心者にはシミュレータの方が良いと考えた. - レジスタの幅はいくらか. A:アキュムレータは32bit. - スタックやヒープといったことを教えるための方法について何か先行研究は あるか. A:こちらで調べた限りでは,そういった先行研究は無かった. 情報教育の研究は,初心者に対するものが多いように思うので, あっても少ないと思われる. - このシステムの授業での実績は.その中での面白いプログラム例にはどのような ものがあるか. A:EL21のプログラムでは,開平法を用いて平方根を計算するというものがあった. 他にはアセンブリプログラムで,特定番地の命令を逆アセンブルするプログラムや, 三角関数のsinの値を計算するというものもあった. - このシステムでプログラムを書くことを面白くさせる方法を入れると良いのでは ないか.例えば「自己消去プログラム」とか. A:プログラミングに興味を持たせる方法として,グラフィックを簡単に 描画するといった方法をよく見かける.そういうものも視野に入れていきたい. 自己消去プログラムは,現在の命令セットでは作れなかった. - キャッシュ,スーパースカラーといったことについて学ぶ方法を含める予定は あるか. A:対象は初心者では無くなるだろうが,検討している.ただ,一命令ずつ実行していく 様子を見る,という今の形ではなく,抽象度を高くするなどして見せ方は変えるだろう. - LOADとLOADIの差は. A:LOAD n は「n番地の内容をアキュムレータに読み込む」という命令なのに対し, LOADI n は即値命令で「nをアキュムレータに読み込む」という命令. - 配列を取り扱う機能は含まれているのか. A:含まれていない.しかし,インデックスレジスタがあるのだから, 配列もあった方が良いと考えている.実装する予定. - オーバーフローを見るための命令はあるのか. A:ない.そのため,条件コードフラグレジスタのうち,オーバーフローフラグは 不要かも知れない.だがオーバーフローが起こったことを知らせる必要もあると 考えているため,この部分については今後検討していく. - 画面に描画されている「バス」の意味はどれくらい理解してもらえているか. バス上を流れているものがどのようなものか示しても良いと思う. A:バスについては,それほど詳しく教えていないため,単に光が流れる道, 程度の理解である可能性が高い.バスを表示している以上,何が流れてるのか 学習者も疑問に感じることが考えられるため,何らかの形でフォローしていきたい.