osiire’s blog

ふしぎなそふとやさん

OCamlの魅力

Debian関連の方々の勉強会でOCamlをやったが、魅力がいまいち分からない(http://d.hatena.ne.jp/mkouhei/20090419/1240106632)」という話があるみたいですが、思い立ったので、私から見たOCamlの魅力、特にシステム開発の仕事で使うという視点から見たOCamlの利欠点について、ちょっと書いてみようと思います。まぁ、何が魅力かなんて人それぞれなのでアレですが。
まず、仕事で使う視点というからには最低条件を確認しておきます。つまり「魅力」以前に「使える」かどうかという事ですね。

  1. OCamlには基礎的なライブラリ(入出力,コンテナ,DB接続,GUI,日本語,印刷,CGI,XML,正規表現,画像)は揃っています。足りないという人もいますが、それはスタンダードライブラリとして配布されていないからだと思います。
  2. 他の言語と比べて遜色ない速度が出せます。むしろ早い部類らしいです。
  3. i386でもSPARCでもPowerPCでも動きます。実質十分だと思います。
  4. 開発環境にはemacsvimがあります。統合開発環境がないと受け付けないという人には、OcaIDEというEclipseプラグインがあります。(http://ocaml.eclipse.ortsa.com:8480/ocaide/)
  5. バイトコードなら逆ステップも可能なデバッガもあります。プロファイラもあります。
  6. 残念ながら「規格」はありませんが、コンパイラ自体は20年以上という継続性の実績があります。

はい、これで大体クリアーだと思います。え?OCamlの開発者が少ないという人材の問題がある?ぜひid:soutaro氏にオファーをどうぞ。
では、利点を挙げてみます。

  1. やはり一番は「型の表現能力が高い」だと思います。私がMLにハマった理由もこれでした。代数的データ型、パラメトリック多相、シグネチャー、ファンクターは言うに及ばず、多相バリアント、構造的部分型、バリアンス情報、row多相、private row、透過的な高階ファンクター。これだけあればかなり開発が変わります。不具合が減らせて品質が高くなります。
  2. もう一つは型付きラムダ計算を基礎にしている点です。これによって、変数は束縛、レキシカルクロージャー、カリー化、パターンマッチ、型推論といった強力な一連の基礎ツールセットが調和して得られています。これらの利点は計り知れません。同じ関数型言語でも、Lispschemeと違うのはこの点です。
  3. 最後の主たる魅力は、学習コストが低いという点です。正格で副作用ありなので他の言語の経験が生かせる場が多いですし、「ふはははは、ハマったな初心者め、その設計はアウトだ!」などという地雷も比較的少ないです。(ないとは言いません。再帰関数のスタックオーバーフローや分割モジュールの相互再帰などは、必ずハマる道です。)

じゃぁ、欠点はどうでしょうか?

  1. 32bit環境ではintが31bitです。これは正直泣けます。致し方ないのは分かっています。
  2. 継続がありません。限定継続の実装が待ち遠しいです。
  3. 残念ながら型クラス的な、オーバーローディング的な多相が実装されていません。G'Camlを使う必要があります。デフォルトで欲しいデス。それに、例外の捕捉漏れを指摘してくれる型システムが実装されていません。マジで欲しいです。

とりあえず、思い付くままに書くとこれくらいです。OCamlの利欠点を検討して、ぜひ仕事に応用してみてください。