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

OCaml

(Objective_Caml から転送)

出典: フリー百科事典『ウィキペディア(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/

関連項目

外部リンク


Objective Caml

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2011/09/23 01:53 UTC 版)

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. 

外部リンク





固有名詞の分類


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

辞書ショートカット

すべての辞書の索引

「Objective_Caml」の関連用語

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

   

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



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

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのOCaml (改訂履歴)、Objective Caml (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS