本実験及演習の目的は,プログラミング言語 ML のサブセットの処理系(インタプリタおよび型推論機構)の実 装を通じて,プログラムの実行前にエラーを検出する技術の基本的な仕組みを 理解することにある. また,二次的な目的としては,プログラムを対象とする議論における基本的な 用語を理解・習得することも挙げられる.
実験では,まず,前半(3週程度)で,処理系を実装するための言語として,ML の方言である Objective Caml の演習を,実験時に配布するテキスト「Objective Caml入門」 を使って行う.ここでの Objective Camlの習得を通じ,MLプログラムの挙動,型推 論に関する直感的理解を得る.そののち,インタプリタ・型推論器の作成を行 う.MLは後に述べるように静的に強く型付けされた言語だが,まずは, (Schemeのように)静的な型のない言語としてインタプリタを実装し,それに型 推論機構を加えていく.
実験スケジュールは以下を予定している.解説は主に木曜日に行う予定である.
第1週〜第3週 | 「Objective Caml入門」第2〜7章の演習 |
第4週〜第5週 | インタプリタの実装 |
第5週〜第6週 | 型推論機構の実装 |
前半の Objective Caml 演習(40点満点)はテキスト中の練習問題を解きレポートにす る.後半のインタプリタ・型推論機構実装実験(各30点満点)も,本指導書の練習問題を解きレポートにする.
必修問題とマーク(または授業中にアナウンス)したものについては,レポート の提出がない場合,大幅に減点する.必修問題が満足な出来であれば,よい成 績が期待できる.その他の問題も加点の対象であるので,できるだけ解いてほ しい.
レポートは,プログラムを書く場合は,なぜそのようなプログラムに至ったか の説明を加えること.これがなければ,ほとんど評価されないので注意するこ と.(きれいな解答を思いつけばつくほど,短く,似たようなプログラムにな る傾向がある.) また,インタプリタ作成においては,ソースコードを与えた 上で,「インタプリタをテストせよ」という課題があるが,この場合,テスト に用いるプログラムも評価対象である.導入された機能をきちんとテストする にはどうすればいいかを考えること.
授業の web ページの URL は http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/ である. ここで本稿の完全版や「Objective Caml入門」のテキストが利用可能になる. また,Objective Caml のマニュアル [] (英語)も http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/ocamlman/ よりオンライン利用が可能なようにしてある. その他,http://caml.inria.fr/ から,FAQ などの文書, Objective Caml を使ったソフトウェアなどが利用できる.Objective Caml は,Caml とい う言語を拡張して,オブジェクト指向プログラミングの機能などを加えたもの であるが,本実験ではオブジェクト指向プログラミング機能をとくに必要としない ため,本来の Caml の教科書[]も参考になる. また,フランス語の Objective Caml の本が O'Reilly から出版されているが,現在, 英訳プロジェクトが進行中で,オンラインで http://caml.inria.fr/oreilly-book/ より利用可能になっている.
後半のインタプリタ作成に関しては,[, 第3章] を参考にしている. (この本では Scheme 自身で Scheme インタプリタを作成している.)