Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

OCamlとは? わかりやすく解説

OCaml

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/02/10 04:41 UTC 版)

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

OCaml[ˈkæmə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 および関数型言語の普及と理解に一定の役割を果たしている[要出典]

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

以下が実行結果である。

$ ./hello
Hello 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 = 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を渡せばよい。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月。ISBN 978-4-8399-2311-2 
  • 五十嵐淳『プログラミング in OCaml: 関数型プログラミングの基礎からGUI構築まで』技術評論社、東京、2007年12月。ISBN 978-4-7741-3264-8 

脚注

  1. ^ 出典URL: https://ocaml.org/releases/5.3.0, 閲覧日: 2025年1月9日
  2. ^ https://caml.inria.fr/ocaml/name.en.html
  3. ^ : OCaml is the most popular variant of the Caml language.
  4. ^ OCaml-Nagoya (2007). 『入門OCaml』. 毎日コミュニケーションズ. pp. p.17. ISBN 9784839923112 
  5. ^ Texvc - MediaWiki
  6. ^ 正確には名前だけでなく、新しい手法で再実装されたもので、OCaml より Caml Light のほうが古くからある。
  7. ^ https://mzp.hatenablog.com/entry/2013/05/08/214712
  8. ^ http://mldonkey.sourceforge.net/Main_Page
  9. ^ http://cristal.inria.fr/~ddr/GeneWeb/en/index.html
  10. ^ https://frama-c.com/
  11. ^ https://flow.org/
  12. ^ https://fbinfer.com/

関連項目

外部リンク


OCaml

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/06 02:21 UTC 版)

ブーリアン型」の記事における「OCaml」の解説

OCamlも bool 型持ち、値として truefalse をとる。 # 1 = 1 ;;- : bool = true

※この「OCaml」の解説は、「ブーリアン型」の解説の一部です。
「OCaml」を含む「ブーリアン型」の記事については、「ブーリアン型」の概要を参照ください。

ウィキペディア小見出し辞書の「OCaml」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「OCaml」の関連用語

OCamlのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



OCamlのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのOCaml (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのブーリアン型 (改訂履歴)、ユニットテスト・フレームワーク一覧 (改訂履歴)、Option型 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS