別に配布するテキストを参照のこと.以下は,テキストからの
Objective Caml 言語に関する記述の一部抜粋である.
プログラミング言語 ML は,元々は計算機による証明支援において,証明を記
述する object language (対象言語) に対する,証明戦略の記述用の言語であ
る,meta language (頭文字をとって ML)から発展してきた言語で,関数型プ
ログラミングと呼ばれるプログラミングスタイルをサポートしている.MLは核
となる部分が小さくシンプルであるため,プログラミング初心者向けの教育用
に適した言語であると同時に,大規模なアプリケーション開発のためのサポー
ト(モジュールシステム・ライブラリ)が充実している.MLの核言語は型付き
λ計算と呼ばれる,形式的な計算モデルに基づいている.このこと
は,言語仕様を形式的に(数学的な厳密な概念を用いて)定義し,その性質を厳
密に「証明」することを可能にしている.実際,Standard ML という標準化さ
れた言語仕様[5]においては,(コンパイラの受理する)正しいプロ
グラムは決して未定義の動作をおこさない,といった性質が証明されている.
この実験及演習で学ぶのは ML の方言である Objective Caml という言語である.
Objective Caml は INRIA というフランスの国立の計算機科学の研究所でデザイン・開
発された言語で,Standard ML とは文法的には違った言語であるが,ほとんど
の機能は共有している.また,OCaml では Standard ML には見られない,独
自の拡張が多く施されており,関数型プログラミングだけでなく,オブジェク
ト指向プログラミングもサポートされている.またコンパイラも優れたもの
が開発されている.
Objective Caml の特徴としては,以下のようなものが挙げられる.
-
高階関数(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 などを使ったメモリ管理のように
頭を悩ませる必要がない.
- 対話的にプログラム開発ができるインタラクティブ・コンパイラと,
ソースコードを一括して実行形式に変換するバッチ・コンパイラが利用できる.
- 関数型プログラミングを核とした言語に加えてのオブジェクト指向プロ
グラミングの導入.