Objective Caml

出典: フリー百科事典『ウィキペディア(Wikipedia)』

移動: 案内, 検索
Objective Caml
パラダイム 関数型言語オブジェクト指向言語
開発者 INRIA
最新リリース 3.12.1(2011年7月4日(2か月前) (2011-07-04)
型付け 強い静的型付け
影響を受けた言語 Caml Light, Standard ML
影響を与えた言語 F#, Scala, HaXe
プラットフォーム クロスプラットフォーム
ライセンス Q Public License
ウェブサイト http://caml.inria.fr/
テンプレートを表示

カテゴリ / ■テンプレート

Objective Caml(オブジェクティブ・キャムル)は、フランスのINRIAが開発したプログラミング言語MLの方言とその実装である。通常 OCaml(オキャムル) と略称される。MLの各要素に加え、オブジェクト指向的要素の追加が特長である。

目次

概要

もとは Caml という言語だったが[1][2]、クラス宣言やオブジェクトの生成、継承などのオブジェクト指向的要素が追加され Objective Caml という名前になった。もとの Caml は現在も caml-light という名前で配布されている[3]。 なお、英語では Caml は camel (ラクダ) と同様に発音されている。

関数型言語の一種だが、Haskellなどの純粋関数型言語と比べると、容易に破壊的な操作や命令的な記述をすることができること、デフォルトが遅延評価でないことなどの理由により、非純粋関数型言語である。

関数型言語であるので、破壊的操作なしに宣言的にプログラムを書くことができる。 OCaml は静的な型付け言語であるが、型推論の機能を持つため、たいていの場合は明示的に型を定義しなくても処理系がうまく推論してくれる。

他には、関数型とオブジェクト指向の両方を併せもつことが特徴的である。ただしそのため、オブジェクト指向を利用した破壊的操作を伴うプログラムがかなり容易に書けてしまう。また、 polymorphic variant という特殊なバリアント型が特徴的である。

処理系としての特徴は、関数型言語としてはかなり高速に動作することが挙げられ、gccでコンパイルされたC言語と互角かやや遅い程度と言われる[4]

フランスではプログラミング教育などに用いられることもある言語である[要出典]が、日本国内では一部の研究者を除き、あまり知られていなかった。2008年現在ではOCamlの入門書が何点か販売されており、近年では徐々に知名度を上げている。

関数型言語としては比較的アプリケーションの数が多く、例えばMediaWikiにおいて TeX の記述から HTML, MathML および画像の数式を生成するプログラムも OCaml で記述されている。

コード例

以下のコード例の全てに特徴的なのは、静的型付け言語であるにも関わらず、型の宣言が一切ないことである。OCamlの型推論がこれを可能にしている。

Hello World

Hello worldの例を示す。以下のプログラム"hello.ml"は、

 print_endline "Hello world!";;

以下のようにしてバイトコードコンパイルされる。

$ ocamlc hello.ml -o hello

以下が実行結果である。

$ ./hello
Hello world!
$

クイックソート

クイックソートのコード例を示す。OCamlは多くの関数型言語と同様、再帰処理に秀でる。また、Haskellなどにも見られるパターンマッチの機能がここでも使われている。

 let rec quicksort = function
   | [] -> []
   | pivot :: rest ->
       let is_less x = x < pivot in
       let left, right = List.partition is_less rest in
       quicksort left @ [pivot] @ quicksort right

チャーチ数

以下は、ラムダ計算の教科書などに見られる、自然数のチャーチ符号化のコード例である。

let zero f x = x
let succ n f x = f (n f x)
let one = succ zero
let two = succ (succ zero)
let add n1 n2 f x = n1 f (n2 f x)
let to_int n = n (fun k -> k+1) 0
let _ = print (add (succ two) two)

チャーチ数nは、高階関数として表され、関数fと値xを受け取りxにn回fを適用する関数として定義されている。チャーチ数nを自然数nに変換するには、チャーチ数(実体は関数)に、インクリメントする関数と初期値0を渡せばよい。OCamlは関数型言語であるため、プログラミングの理論的背景であるこれらの事柄を、そのまま記述することができる。

MinCaml

MinCamlは、ペンシルベニア大学(当時)の住井英二郎が定義したOCamlのサブセットである。同作者により、コンパイラがOCaml自身で書かれている。MinCaml言語およびコンパイラは、2004年度の未踏ソフトウェア創造事業に採択された。

MinCamlコンパイラは教育目的での利用を主眼としており、わずか2000行前後のコードで書かれている。MinCamlで実装された機能はOCamlの一部で、出力されるアセンブリコードもSPARCのみが対象であるが、ある程度の学習をすれば比較的容易に改良を行うことができる。実際に東京大学情報科学科などで教育目的に利用され、国内におけるOCamlおよび関数型言語の普及と理解に一定の役割を果たしている。

OCaml で書かれたソフトウェア

  • FFTW離散フーリエ変換を高速に行う高速フーリエ変換ライブラリC言語のコードを出力するgenfft という OCaml プログラムが使われている。
  • Unison – 二つのディレクトリのファイルを比較し同期をとるプログラム。
  • Mldonkey – EDonkey network 用の P2P クライアント。
  • GeneWeb – マルチプラットフォームの、フリーの家系図ソフトウェア。
  • Haxe – オープンソースのアドビ Flash コンパイラ。
  • Frama-c – C言語のプログラムを解析するためのフレームワーク。

参考文献

  • OCaml-Nagoya 『入門OCaml - プログラミング基礎と実践理解』 毎日コミュニケーションズ、東京、2007年5月。ISBN 978-4-8399-2311-2。
  • 五十嵐淳 『プログラミングin OCaml : 関数型プログラミングの基礎からGUI構築まで』 技術評論社、東京、2007年12月。ISBN 978-4-7741-3264-8。

脚注

  1. ^ A History of Caml”. The Caml Language. 2009年12月19日閲覧。
  2. ^ OCaml-Nagoya (2007). 『入門OCaml』. 毎日コミュニケーションズ, p.15. ISBN 9784839923112. 
  3. ^ Latest Caml Light release”. The Caml Language. 2009年12月19日閲覧。
  4. ^ OCaml-Nagoya (2007). 『入門OCaml』. 毎日コミュニケーションズ, p.17. ISBN 9784839923112. 

過去1時間の間にもっとも読まれた記事
平野紫耀 白鳥美鈴 牧野ステテコ MAX (音楽グループ) UZI (ラッパー) 栗城史多 山口達也 (ジャニーズ) 内田正人 (アメリカンフットボール) 芳野藤丸 佐藤みき ショーンK ヘンリー・オブ・ウェールズ 世田谷一家殺害事件 札幌副都心開発公社 荒牧陽子 座敷わらし 西城秀樹 大内順子 杉咲花 相武紗季
「Objective_Caml」のQ&A
1  プログラミング?について
モバイル版goo wikipedia提供中!
↓↓↓下記QRコードからアクセス↓↓↓
モバイル版goo wikipedia QRコード
Wikipedia記事検索について