1.1 関数型言語 ML と Objective Camlについて
プログラミング言語 ML は元々,Edinburgh LCF という,計算機による証明記
述システムのために開発されてきた.証明記述システムでは,証明そのものを
記述する言語と,証明を操作する(証明をどのような手順で行なうか
などを制御する)ための言語が使われている.前者を対象言語—object
language—と呼び,後者をメタ言語—meta language—と呼ぶ.ML はこの
証明操作用のメタ言語(頭文字をとって ML)から発展してきた言語で,関数型
プログラミングと呼ばれるプログラミングスタイルをサポートしている.MLは
核となる部分が小さくシンプルであるため,プログラミング初心者向けの教育
用に適した言語であると同時に,大規模なアプリケーション開発のためのサポー
ト(モジュールシステム・ライブラリ)が充実している.MLの核言語は型付き
λ計算と呼ばれる,形式的な計算モデルに基づいている.このこと
は,言語仕様を形式的に(数学的な厳密な概念を用いて)定義し,その性質を厳
密に「証明」することを可能にしている.実際,Standard ML という標準化さ
れた言語仕様 [4]においては,(コンパイラの受理する)正しいプロ
グラムは決して未定義の動作をおこさない,といった性質が示されている.
この演習で学ぶのは ML の方言である Objective Caml という言語である.Objective Caml
は INRIA というフランスの国立の計算機科学の研究所でデザイン開発された
言語で,Standard ML とは文法的に違った言語であるが,ほとんどの概念・機
能は共有している.また,Objective Caml では Standard ML には見られない,独自
の拡張が多く施されており,関数型プログラミングだけでなく,オブジェクト
指向プログラミングもサポートしている.またコンパイラも効率のよいものが
開発されている.
1.1.1 ML・Objective Caml の特徴
ML の特徴としては,以下のようなものが挙げられる.
-
関数型プログラミングのサポート,特に,
関数を引数として受けとる関数や,関数を返す関数という
高階関数(higher-order function)の導入による
抽象度の高いプログラミング.
- インタラクティブ・コンパイラによる対話的な開発.
- パターンマッチング(pattern matching) による,より宣言的
なプログラミングのサポート.
- 静的型システム(static type system)により,プログラム実行時に
(ある種の)安全性が保証される.
- 多相型システム(polymorphic type system)により,プログラム中の
一つの式に,複数の型を割り当てることが可能になり,コード再利用性が高まる.
- 型推論(type inference) により,煩雑な型宣言を省略できる.
- 強力なモジュール・システム(module system)により,大規模
プログラミングに必要な分割コンパイル(separate compilation)
や,抽象データ型(abstract data type)による,プログラ
ム部品間の情報隠蔽・言語に新たな基本データ型を加えるようなプログラミ
ングが可能になる.また,ファンクタ(functor)と呼ばれる,
パラメータを持つモジュール(parameterized module)により,再利
用性の高い,大規模プログラミングがサポートされる.
- ごみ集め(garbage collection)による,自動メモリ管理.
プログラマは C 言語の malloc/free などを使ったメモリ管理のように
頭を悩ませる必要がない.
また,Objective Caml 独自の特徴としては,
-
オブジェクト指向プログラミングのサポート.
- Tk, GTK, OpenGL などが呼びだせる GUI ライブラリ.
- バッチ・コンパイラが利用できる.
- バイトコード解釈器によるポータビリティの確保.
などが挙げられる.
1.2 参考書,資料,マニュアル
Objective Caml のマニュアル [3] (英語)は
よりオンライン利用が可能なようにしてある.
また から,FAQ などの文書,処理系のソース・コンパイル済
バイナリ,Objective Caml を使ったソフトウェアなどが利用できる.
Objective Caml は,Caml という言語を拡張して,オブジェクト指向プログラミング
の機能などを加えたものであるが,本来の Caml の教科書として
[1]が出版されている.また,フランス語の Objective Caml の本が
O'Reilly から出版されているが,現在,英訳プロジェクトが進行中で,オン
ラインでhttp://caml.inria.fr/oreilly-book/ より利用可能になって
いる.一方,Standard MLの教科書はそれに比べれば多数出版されている
[5, 6, 7]が,Objective Camlとは文法を含め微妙に異なるので ML
入門者はかえって混乱するかもしれない.
[2]は,再帰/型の概念を対話形式で平易に
解説している一風変った本である.読みやすいので,この実験で興味を持ったら読
んでみると面白いだろう.
環境設定は,Emacs エディタでの
プログラム編集/実行のための設定を行う.
Emacs の設定
Emacs (Mule) 上で Objective Camlプログラムの編集を助けるプログラム
tuareg-mode () が~igarashi/lib/elisp にインストールされ
ている.以下は ~/.emacs に加える設定である.
;; append-tuareg.el - Tuareg quick installation: Append this file to .emacs.
(setq load-path (cons "~igarashi/lib/elisp/tuareg-mode" load-path))
(setq auto-mode-alist (cons '("\.ml\w?" . tuareg-mode) auto-mode-alist))
(autoload 'tuareg-mode "tuareg" "Major mode for editing Caml code" t)
(autoload 'camldebug "camldebug" "Run the Caml debugger" t)
(if (and (boundp 'window-system) window-system)
(when (string-match "XEmacs" emacs-version)
(if (not (and (boundp 'mule-x-win-initted) mule-x-win-initted))
(require 'sym-lock))
(require 'font-lock)))
Emacs を起動し直して,.ml という拡張子を持つファイルを開いたときに
モードラインに (Tuareg) と表示されることを確認すること.
なお,以上の設定は,授業WWWページの授業スケジュール欄の環境設定
(http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/configure.txt) よりオンラインで利用できるので,カット&ペーストするとよいだろう.