最近流行っているらしい OCaml Sucks

なんか、Lisp 使いには OCamler のいう OCaml の良さは一生伝わらない気がしています。なんというか、それは「このカレー辛くておいしい!」と甘党の人に勧めても意味ないということです。

それはさておき、私も他に言及されている方々と同じで、ほとんどがある種の些細な問題な気はします。なんというか、○○ができない、というよりは○○がめんどいという内容の気がします。言い方をかえると、OCaml では○○ができない、という内容ではなくて、今のライブラリには○○が実装されていないという内容が多くみえる(コンパイラやデバッガに関してはさておき)。でも、software development という点では、共同開発には使いたくないというのはもっとも。私でも誰かと共同開発なら間違いなく Java を選びます(Lisp は選ばないけど・・・)。

結局 Java の何がうれしいかといったら、

  • 標準でライブラリがだいたいなんでもそろっているので、統一感のある構成になっている
  • コーディングの暗黙の標準というのが成熟している
  • ドキュメントまわりのツールがしっかりしている、javadoc を書こうという文化がしっかりしている
  • 特殊な書き方がないので誰でも同じようなコードになる

と、言語の性能としてみたらどうでもいい部分ばかりですが、おぞましいチーム開発を考えたらこういう部分を最重視する気がします。それに比べて、OCaml

  • ライブラリが貧弱、指摘の通り統一感がない
  • いろんな書き方ができるのでコーディングの標準がよくわからない、call_with_open_input_file なんて書かないし、書いたら書いたで他人に読まれるのか怪しい
  • ドキュメントまわりは申し訳程度に書く、まぁここは型がしっかりしてるからさして問題ない気もする
  • エレガントで怪しい記法がたくさん使える、syntax 拡張までできるがしたら最後、移植性と他人にとっての可読性が消える

一人で使うなら別にいいんですよ。自分で call_with_open_input_file 作るし、let ( |-| ) = Int64.sub って書けばいいだけですし。array_iteri ってどうせみんな作ってるんでしょ。先日いった変な WHERE も書けます。逆に自分で使うには、infix operator や無名関数が使えるかの方がよっぽど気になる。チーム開発の場合、問題はこういうのかいて他の人読めるのかなぁってことですよね。そういう意味では、ライブラリの整備をもう少しきちんとして欲しいとは、前から思っています。その辺 Pythoniterator は本当によくやっていると思います。

余談ですが。

Now, how many OCaml programmers actually write their code this way?

ここに・・・。私の場合、in_channel ではなくて extlib の IO を推しますけど。