私的OCaml
http://d.hatena.ne.jp/shinichiro_h/20050602#1117704889
id:shinichiro_hさんとこなどを見て、私的にOCamlに思うところを。(以下完全に私見というか、私にOCamlがどう見えているか、です)
OCamlは素晴らしい言語だと思います。私的には気に入らない箇所も散見できるのですが、ウマが合いそう。まず、とりまく環境から。
- 安定感。VisualC++のリンカ等が使える。Windowsで無理やりGNUツールを使わなくて良い、っていう解放感。
- 高速。コンパイル速い。最重要。やはりコンパイル速いものはいいものです。
- デバッグなど。マニュアルには書かれているocamldebug.exeが付いてきてないぞ。(素晴らしくない)
- プロファイルなど。素晴らしいことにWindowsでは-pが動作しません。プロファイルなんか気にせずに済みます。
- ocamldep, ocamlbuildがちょっと不便すぎる。(参考までにocamlmakefileへの絶賛の声を見てくださいませ。で、ocamlmakefileってドコ?) ……コンパイル速いからocamlc *.mlで充分です。
- タダものじゃないプリプロセッサcamlp4。(どうせ使わない)
- コンパイラ/バイトコード/インタープリタと好きな実行法を選択できる。
- 割と機能セットのセンスが良い標準ライブラリ。あと命名規則がJava風じゃないとこ重要。
- 普通に動作環境多い。(WindowsをWindowsらしくサポートする気があるのが◎)
- 私的にはIDEは是非欲しいです軟弱でごめんなさい。tcl/tk入れてるのにocamlbrowserが動かないのはなんでだ。
言語としては
- GC……のせいで?C側から見るとRなんとかと同じとしか思えない。ハスなんとかみたくCInt用意してラッパー無しでインポートさせてくれ。
- 型推論……がある以上無理なのわかってますが部分範囲型欲しい部分範囲型欲しい部分範囲型欲しい。
- 多相。キャストしなくて良い。
- 関数内関数がインラインで書ける。
- 演算子の選び方と優先順位が納得できる。
- 型がtだけでモジュール名で区別するのがいやにModulaっぽい。ファンクタあたりはもうModulaのgeneric moduleそのものとしか思えない。
- 総じて割と真っ当なPascal系手続き型言語。break無いけど。
- 似非関数型風味っぽい記述とか使えるらしいけどどうでもいいや。
- 最後に、猛威をふるっているC系列と文法がかなり遠いのが素敵。ついでにWysiwyg stringください。
こっちは詳しく説明……型推論……Pascalとかの感覚だとIntegerと書くのは充分面倒くさい……ええ。必要ないですね。割愛。
で、最後に欠点。(既に散々書いた気がするが気にしない)
- マイナー気味というわけでもなさそう……なのに情報が少ない。しかも派生言語が多いため色々分散している。
- なんかやってる人が賢い人が多い気がする(偏見)せいか、「オバカ」な情報が少ない。2年経っても少ない。
- 賢い人はWindowsを使わないためか、標準以外のライブラリがGNUツールを前提としやがる。
- コンパイルエラーのメッセージが一度に1つしか出ない。(ocamlyaccに不信感抱いてしまいますよねこれ)
ま、そんな感じです。
追記としてVariantに関してはタグを単独で使いたい場合もあるためPascalのバリアントレコードの方が普通に上かと。パターンマッチを考えるとこっちの方がいいんでしょうけども。やっぱObj.magicなんでしょうか。標準ライブラリ内で使わなくてもいいところでObj使いまくりなのは素晴らしいと思います。標準ライブラリからしてこうなんだから裏技使いまくりでも別にいいよね☆感があるのが気安くていいかもしれない……。そういうのが好きでごめんなさい。
あと、暗黙の型変換が無い程度で強型とか型にうるさいとか言われているのはなんか評価違う。型推論の障害になる機能が切られているだけで、むしろStructured Type(レコード以外。Modulaはレコードも含めて全部Structured Typeだったのに惜しい)と、Obj他でインタプリタと見紛うような操作ができるのとで、型については柔らかいのではないかな、と。今モジュールを超えて型を循環させるにはどうすればいいかで悩んでいるのは秘密です。
他には、関数型云々も、OCamlを語る上では余計な言葉かも……。OCamlの関数型機能なんて「末尾再起の最適化が保証されている言語上でfold実装してみたら便利だった」以上のものではないような……。常に、どこからでも状態が持てて更新可能、と意識しておかないと、ハスなんとかのように純粋なつもりでいたら逆に何も出来ない気が。(←賢い人でも無いくせに何言ってんだか、と自己ツッコミしておきますので、勘弁ください)