1.1 |
関数型言語 ML と Objective Camlについて |
|
プログラミング言語 ML は,元々は計算機による証明記述システムにおける,
(証明そのものを記述する object language (対象言語) に対する)証明戦略
(証明をどのような手順で行なうか)の記述用の言語である,meta language
(メタ言語) --- 頭文字をとって ML --- から発展してきた言語で,関数型プ
ログラミングと呼ばれるプログラミングスタイルをサポートしている.MLは核
となる部分が小さくシンプルであるため,プログラミング初心者向けの教育用
に適した言語であると同時に,大規模なアプリケーション開発のためのサポー
ト(モジュールシステム・ライブラリ)が充実している.MLの核言語は型付き
λ計算と呼ばれる,形式的な計算モデルに基づいている.このこと
は,言語仕様を形式的に(数学的な厳密な概念を用いて)定義し,その性質を厳
密に「証明」することを可能にしている.実際,Standard ML という標準化さ
れた言語仕様 [4]においては,(コンパイラの受理する)正しいプロ
グラムは決して未定義の動作をおこさない,といった性質が証明されている.
この演習で学ぶのは ML の方言である Objective Caml という言語である.Objective Caml
は INRIA というフランスの国立の計算機科学の研究所でデザイン開発された
言語で,Standard ML とは文法的に違った言語であるが,ほとんどの概念・機
能は共有している.また,Objective Caml では Standard ML には見られない,独自
の拡張が多く施されており,関数型プログラミングだけでなく,オブジェクト
指向プログラミングもサポートしている.またコンパイラも効率のよいものが
開発されている.
Objective Caml の特徴としては,以下のようなものが挙げられる.
-
関数型プログラミングを核とした言語に加えてのオブジェクト指向プロ
グラミングの導入1.
- 高階関数(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 のマニュアル [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 (Mule) 上で Objective Camlプログラムの編集を助けるプログラムが
~igarashi/lib/elisp にインストールされている.以下は ~/.emacs に
加える設定である.
;;; caml-mode
(setq load-path (cons "~igarashi/lib/elisp/ocaml-mode" load-path))
(setq auto-mode-alist
(cons '("\\.ml[iylp]?$" . caml-mode) auto-mode-alist))
(autoload 'caml-mode "caml" "Major mode for editing Caml code." t)
(autoload 'run-caml "inf-caml" "Run an inferior Caml process." t)
(if (and (string-match "^19" emacs-version) window-system)
(require 'caml-hilit)) ;; for Mule
(if (and (string-match "^20" emacs-version) window-system)
(require 'caml-font)) ;; for Emacs20
Emacs を起動し直して,.ml という拡張子を持つファイルを開いたときに
モードラインに (caml) と表示されることを確認すること.
- 1
- 本実験ではオブジェクトは使いませんが