ライブラリの質について

id:ytqwerty さんの OCamlのライブラリのビルドが通らない10の理由 を読んだ。

どうやらWindowsで開発されているようなので、お気の毒としか言いようがない理由が多いが、、、

OCaml のライブラリは昔から基本的に「この機能ないじゃん、じゃあ自分で書くか」と書きはじめて、「まあ一応自分の用は足せるようになったし、よかったら他の人も使ってよ」と公開する、という、実にオープンソース的発想で書かれてきた。だから、モノによって質にすごく開きがあって、作者以外の環境でビルドするにはフィックスが必要になることが多い。特にほとんどのライブラリは *nix、特に linux+gmake で書かれてきたので、他の環境、特に Windows では問題が出てしまう。作者に連絡しない限り直らない。逆にいえば、問題を解決した場合は作者にパッチを送ると普通喜ばれるからそうしてほしい。

昔から caml-devel チームは言語自体の安全性には注意を払うけれども、周辺ライブラリに関してはあまり興味を持っていない。これは stdlib や otherlibs のバラエティの貧弱さを見れば明らかだろう。彼らの人的パワーには限界があるので、最低線(これが最低線かどうかという問題は残るけど)のライブラリ以外はコミュニティーに任せて本体に caml-devel は注力する、という姿勢は正しいと思う。*1

10年ほど昔は、OCaml コミュニティー自体がほとんどなくて、caml-list に全然投稿がなかったし、参加者の大多数が言語研究者だったからライブラリがビルド出来ないとかいう話も聞かなかったし皆それを了解していた。そもそも Java や C# みたいに工業的に大規模に使われるということを第一に想定して作ってきた言語ではなくて、(もしそうだったらあんな変態的な文法ではありえないよね)、悪く言えば、研究者のおもちゃだったわけだ。今もそうかもしれんが。

ところが、つい最近、どうしたわけか、脚光を浴びてきている。実際にいろんな会社でまじめに使われているし、英語、日本語も含めて入門書が出てきた。この原因は私はよくわからない。既存のメジャー言語の問題がいろいろ周知されてきて、意識の進んだ人たちがいろんなプログラミングパラダイムを試している時期なのかもしれない。

ただ、そうなると、 OCaml のライブラリ環境は、どう考えてもメジャー言語と比べると貧弱だ。私も他人の書いたライブラリはいくつも試したが、多くはそもそも最新のコンパイラではコンパイルできない(=要するにもはやメンテされていない)とか、自分の環境ではうまくコンパイルできないとかだった。もちろん、ちゃんとメンテされつづけている素晴らしいライブラリも沢山あるけれど。

こういうまずい状況は OCaml コミュニティーでも認識されているし、caml-devel の連中も判っているはずだが、まだ決定打的解決法はどこにもないのが現状だ。私が知っている範囲でライブラリをなんとかしようとしている運動にはこんなものがある:

  • humps: caml-devel 内で外部ライブラリ群を紹介するページを作っている。コードのクオリティに関しては全くレビューされていない。
  • OCamlMakefile: ocamlMakefile のテンプレ。
  • ocamlbuild: OCaml で書かれた OCaml プロジェクトをビルドするためのツール。caml-devel 謹製。簡単なプロジェクトならかなり簡単にビルドできるらしい。個人的には初めての出会いが camlp4 のビルドでだったので好きになれない。このブログで dis ってしまった。
  • omake: OCaml で書かれた超強力 make。今のところお薦め。究極的には make と同じなので、書かれた OMakefile が糞だと別環境でのビルドはやはり苦しいだろう。数万もファイルがある所だと、依存解析が素晴らしすぎてスタートアップにいらいらするなど、スケーラビリティの問題はある。だが、そんな巨大プロジェクトは地球上にほとんど存在しないからまず大丈夫だ。
  • ocamlcore.org: OCaml ライブラリに特化した sourceforge のようなもの。といってもそんなに大した登録はない。
  • GODI: OCaml の複数のライブラリの依存関係を調べ、必要があれば自動的にソースファイルを取得、コンパイルしてくれるパッケージングツール。多分便利だと思う。(私は使っていない。私のライブラリをGODI化した人がいるのはいいのだが、GODI化に関するバグを俺に振られても困る。で、GODI って名前は何よ?)
  • ocamlfind: OCaml ライブラリをリンクするときに繁雑なライブラリ指定スイッチなどを自動的に埋めてくれるツール。
  • Caml consortium: ぶっちゃけていえば、企業から寄付をつのって、その寄付でエンジニアやとって OCaml のライブラリやツールを整えていく、という企画。ocamldoc とか ocamlbuild とかはその成果だと思えばいい。

と、いろいろ努力はされているのだ。でもまだまだ。オープンソースの特徴として分散されまくっているのも問題で、OCaml コンパイラがバージョンアップされると、周辺ツールがちょっと遅れて追随、といったありがちな問題もある。caml-devel がこれらのプロジェクトを取り込んだり、音頭を取ってくれたり、より具体的には、Humps を強化して、多数のライブラリに関して、プラットフォーム別のビルド状況とか、バグレポートとかが出来る一元化したサイトができるとうれしいんだがなあ。でも、それはそれで独裁的と思われるだろうし、そもそも企業じゃなくて一小研究プロジェクトなので、人件費的に、むずかしい。

結論。OCaml の現状は、非常にホットになってきているので、逆にいろいろトラブルもある。これが OCaml よりメジャーになる過程なのか、このまま混乱のまま消えていく途上かは判らない。できたら前者になってくれるといいけどね。

*1:ちなみに、caml-devel は linux がほとんど。DD が OS X。PW が *BSD マニアだが、今は何を使っているのやら。そいうやある外部ライブラリが FreeBSD でまともに configure できんとか PW が文句を言っていたな。だから autoconf はまだしも automake は入れるなといったんだ。そのライブラリを automake 化したのは PW 達自身なんだが、そこが PW の謎めいたところだ。