Objective_Caml
[Wikipedia|▼Menu]
.mw-parser-output .hatnote{margin:0.5em 0;padding:3px 2em;background-color:transparent;border-bottom:1px solid #a2a9b1;font-size:90%}

GNU Octave」とは異なります。

OCamlOCamlのロゴ
パラダイム関数型プログラミング命令型プログラミングオブジェクト指向プログラミング、モジュールの階層 
登場時期1996年 (28年前) (1996)
開発者フランス国立情報学自動制御研究所 
最新リリース5.2.0 / 2024年5月13日[1]
型付け強い静的型付け
主な処理系OCaml
影響を受けた言語Standard ML 
影響を与えた言語F#ScalaHaxe
プラットフォームUnix系 
ライセンスQ Public License、LGPL 2.1 
ウェブサイトocaml.org
拡張子ml、mli 
テンプレートを表示

プログラミング言語>>他のプログラミング言語

カテゴリ / テンプレート

OCaml([o??kam?l] oh-KAM-?l、オーキャムル、オーキャメル)は、フランスの INRIA が開発したプログラミング言語MLの方言とその実装である。MLの各要素に加え、オブジェクト指向的要素の追加が特長である。かつては Objective Caml という名前で、その略として OCaml と広く呼ばれていたが、正式に OCaml に改名された[2]
概要

もとはCamlという名前の、MLの方言の処理系実装、および言語であった。この名前はcategorical abstract machine languageの頭字語に由来する(en:Categorical abstract machineも参照)。やがて、categorical abstract machineよりも効率の良い抽象機械ベースに書き直され、クラスや継承などクラスベースオブジェクト指向の言語機能が追加され Objective Camlという名前になり、その後、略称だったOCamlを正式な名前とした。ウェブサイトの概要説明では「OCamlはCaml派生の言語の中で最も知られたものである」[3]としている。もとの処理系も配布され続けており、Caml Lightという名前になっている。英語ではCamlはcamel(ラクダ)と同様に発音されており、アイコン等にもラクダを使っている。

MLの特徴の他に、関数型とオブジェクト指向の両方を併せもつことが特徴的である。ただしそのため、オブジェクト指向を利用した破壊的操作を伴うプログラムがかなり容易に書けてしまう。また、多相バリアント型という特殊なバリアント型により(通常のバリアント型については代数的データ型を参照のこと)、サブセットとスーパーセットの関係になっているバリアント型などを記述できるなどといった特徴もある。

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

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

Caml は OCaml の前身であるMLの方言とその実装である。現在も Caml Light という名前で[6]配布され続けている。
MinCaml

MinCamlは、ペンシルベニア大学(当時)の住井英二郎がOCamlで実装した、Caml似のMLの小型版である。同作者により、コンパイラが OCaml 自身で書かれている。MinCaml は、2004年度の未踏ソフトウェア創造事業に採択された。

MinCaml コンパイラは教育目的での利用を主眼としている。わずか2000行前後のコードで書かれており、実装されている機能はMLのサブセットである。バックエンドはSPARCx86に対応しており、ある程度の学習をすれば比較的容易に改造を行うことができる(実際、有志によってPowerPC用に出力できるバージョンも提供されている。バックエンドをLLVMに置き換えた例も報告されている[7]。)。実際に東京大学理学部情報科学科などで教育目的に利用され、国内における OCaml および関数型言語の普及と理解に一定の役割を果たしている[要出典]。

速攻MinCamlコンパイラ概説 - MinCamlの配布・解説(SourceForge.net)

Moscow ML

CamlやOCamlのような方言ではなく、SML(Standard ML)の処理系の実装にCaml Light利用している。完全なSMLを実装する。
その他

OchaCaml など、研究用の改造のベースとして、規模の大きくなった OCaml ではなく Caml(Caml Light)を利用する例がみられる。
プログラム例

以下の例は、プログラム自体としてはMLと比べ特別なものでもないし、オブジェクト指向を活用したものでもないが、OCaml を含む Caml では旧来のMLや Standard ML からの記法や演算子や名前の変更が多く、簡単なプログラムでもそのままではエラーになるものが多いので、ここでは OCaml のコードを示す。

特徴として、型推論の活用により、多くの場合に型の宣言が必要なく、一部の静的型付き言語にありがちな煩雑さがないことが挙げられる。
Hello World

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

以下のようにしてバイトコードコンパイルされる。$ ocamlc hello.ml -o hello

以下が実行結果である。$ ./helloHello world!$
クイックソート

クイックソートのコード例を示す。MLは多くの関数型言語と同様、再帰処理に秀でる。また、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 = xlet succ n f x = f (n f x)let one = succ zerolet two = succ (succ zero)let add n1 n2 f x = n1 f (n2 f x)let to_int n = n (fun k -> k+1) 0let _ = print (add (succ two) two)

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



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

FFTW ? 離散フーリエ変換を高速に行う高速フーリエ変換ライブラリC言語のコードを出力するgenfft という OCaml プログラムが使われている。

Unison ? 二つのディレクトリのファイルを比較し同期をとるプログラム。

Mldonkey ? EDonkey network 用の P2P クライアント。[8]

GeneWeb ? マルチプラットフォームの、フリーの家系図ソフトウェア。[9]

Haxe ? オープンソースのプログラミング言語およびコンパイラ実装。

Frama-c ? C言語のプログラムを解析するためのフレームワーク[10]

Coq - INRIAで開発されている定理支援証明系言語。

Flow - JavaScriptの静的型チェッカー。Facebookにより開発されている。[11]

fbinfer - JavaC言語C++Objective-C 向けの静的解析チェッカー[12]Facebookがオープンソース化した。

Tezos - 自己進化型のスマート・コントラクト プラットフォーム。XTZ を仮想通貨とする。

参考文献

OCaml-Nagoya『入門OCaml - プログラミング基礎と実践理解』毎日コミュニケーションズ、東京、2007年5月。.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation.cs-ja1 q,.mw-parser-output .citation.cs-ja2 q{quotes:"「""」""『""』"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}
ISBN 978-4-8399-2311-2


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:24 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef