読者です 読者をやめる 読者になる 読者になる

OCamlはダメか

OCaml

そもそも私はよく調べないで変なことを言うのが問題だと思う.

http://d.hatena.ne.jp/soutaro/20060731/1154296953の続き.

まず,sumii先生のコメント.

# sumii 『ええと、それはもちろんわかるのですが、それだけならOCamlMakefileやOMakeすらいらなくて、単に

#!/bin/sh
cmis=`ocamldep "$1".ml | sed -n 's/'"$1"'¥.cmo: ¥(.*¥)/¥1/p'`
cmos=`echo $cmis | sed 's/\([^\.]*\)\.cmi/\1.cmo/g'`
make $cmis $cmos
ocamlc $cmos -o "$1"
./"$1"

とかで済んだりしないか、という話でした。』

もちろんそれで済むことも多いと思います.しかし,私はその6行を書きたくないんです.(もっと言えばMakefileも書きたくない)

例えば,

  • テストは別のディレクトリにまとめて置いておきたい
  • プログラムのオブジェクトとOUnitはリンクしたくない
  • ocamlc -packとかしたい

などのありがちな(気がする)要求があれば,そのたびにシェルスクリプトを直さなくてはいけません.まじめに考えていないのでわかりませんが,そうするとけっこうめんどくさいことになるんじゃないでしょうか.少なくとも,その場でいちいち書くのには.

そこで,もうちょっと賢いコンパイラみたいなもの(なんと言うべきか)が欲しくなります.

しかし,それには問題があって,それはid:yoriyukiさんが指摘してくださったとおり.

http://d.hatena.ne.jp/yoriyuki/20060802

1.はモジュール間の依存関係を自動判定することを難しくします。Cなどの外部関数をモジュールが読んでいれば自動判定は事実上不可能です。リンカがどのように呼ばれるかはOCaml言語の外側のMakefileその他によって記述されているので、2.はモジュールのロード順をツール類が自動的に読み取ることを難しくします。

1.はあまり問題にならないんじゃないかと思います.そこまでやるのはしんどすぎだと思いますし,要求する人もあまりいないでしょう.Cの外部関数も,多分stubを書いてしまえばそれでそのモジュールのことは忘れて良いことが多いと思います.そのモジュールだけなら,がまんしてがんばってMakefile書けば良いような気がします.

そうなると問題は2.になるんですが,なんとかならないものかといつも思っています.プリプロセッシングからテストまで一貫して面倒を見てくれるツールがあれば,なんとでもなると思っているのですが.それなんてIDE