*OCamlとは [#j5c9ee05] OCaml (オキャムル/オーキャムル) は、フランスのINRIAで開発されたプログラミング言語です。 プログラミング言語理論の成果を取り入れた言語です。 バグが少ない高信頼なコードを書けるようになっており、しかも開発効率が飛躍的に向上するようないくつもの特徴を持っています。 *高信頼性 [#w20a5f11] **強い静的型付け [#fe2a944e] 強い静的型付けにより、データの取り違え等に起因するバグをコンパイル時に発見できます。ここで説明しているすべての機能について、安全性が保証されています。 **自動的なメモリ管理 (ガーベージコレクション) [#h6a73d5a] メモリ管理は自動的に行われるため、メモリの確保・解放に関するバグがなくなります。さらに、こうした実装の詳細をプログラマが陽に記述する必要がないため、より抽象度が高いプログラムが構成できます。 *高い開発効率 [#y36644ff] **代数的データ型とパターンマッチング [#bed5cd11] ユーザ定義型には、代数的データ型という形式を用います。C言語の 共用体(union) と 列挙型(enum) を組み合わせたようなデータの記述が可能になります。代数的データ型の値へのアクセスには、パターンマッチングという強力な仕組みがあり、コードの記述量を劇的に削減できます。さらに、コンパイラがパターンマッチに漏れが無いことを保証するため、同時に信頼性が確保できます。 ユーザ定義型には、代数的データ型という形式を用います。C言語の 共用体(union) と 列挙型(enum) を組み合わせたようなデータの記述が可能になります。代数的データ型の値へのアクセスには、パターンマッチングという強力な仕組みがあり、コードの記述量を劇的に削減できます。さらに、パターンマッチに漏れが無いことが保証されているため、同時に信頼性が確保できます。 **多相型 [#g5e5c5a0] 多相型は Java 1.5 や C#のジェネリクス、C++言語のテンプレートに相当する機能です。 総称的なプログラムが記述できるため、高い再利用性が期待できます。 **型推論 [#iae0ea2f] ここで説明しているすべての機能について、型推論という機能が働くため、型を陽に記述する必要はありません。このため、いわゆるスクリプト言語に近い記述量で、先進的な言語機能を利用しつつ、コンパイル時の検査で安全性を確認することができます。 **関数指向 [#p7f82ec4] 定義済みの関数やλ式(匿名関数)といった最も単純な手続き抽象を、第一級のデータとして扱うことができるため、より簡潔にプログラムを記述できます。 *先進的な言語機能 [#dc70a5e3] **多相バリアント [#o7c41c80] 多相バリアントは OCamlでしか実装されていない(たぶんうそ、このへんの言い回しを考える)です。まるでLispのアトムのように、タグ付きのデータをその場で作成することができます。多相バリアントにより、従来のオブジェクト指向や関数指向にはない拡張性を実現できます。具体的には、Expression Problemと呼ばれる設計上の問題を、多相バリアントにより解決できます。 **強力なモジュール機能 (ファンクターなど) [#qe5f2b1e] 抽象データ型というスタイルのソフトウェア構成法を強力に支援する言語機能です。データの内部情報に関する詳細を隠蔽し、インタフェースに基づいたプログラミングが可能です。オブジェクト指向に頼らずとも、関数指向のスタイルとモジュール機能を用いて、凝集度が高く結合度が低い理想的なソフトウェアを安全に構成できます。さらに、モジュールをパラメータ化するファンクターという機能もあります。 **オブジェクト指向 [#q030ce5e] オブジェクト指向も利用できます。型推論とオブジェクト指向の組み合わせにより、