OCamlSpotter 1.0 をリリース
年内に出すと決めていたので、完成度100%ではないんですけど、ようやくリリースできました。
http://jun.furuse.info/hacks/ocamlspotter/
OCamlSpotter は、モジュールのコンパイル時にソースの定義位置情報を記録*1することで、モジュールソースコード中の名前の定義を自動的に検索してくれるツールです。
OCamlSpotter を使うと、ソースコードを読むスピードが格段に向上し、今まで、この定義を探す、という作業に OCaml プログラミングのかなりの分量の時間を割いていたかを実感できます。私自身、使っていて、これなしにソースが読むのはもうちょっと勘弁して、というほどです。
チュートリアルを書くつもりですけど、今日はもう眠いから後日。おやすみなさい。
ソフトウェアのリリースって、ドキュメント整備とか、アーカイブ作成、コンパイルテストで半日はかかりますね。あまり面白くないけど重要な作業なので、サボるわけにもいきません。
インストールの方法(12/28)
ソースを取得、パッチを適用する
いちいち日本語で書くより、手順を示すスクリプトを張っておきます。運がよければ、実行すると、パッチを当てたコンパイラのソースが出来上がります。
#!/bin/sh # braindead install script # Make a directory mkdir ocamlspotter-install cd ocamlspotter-install # Get and extract ocaml-3.11.0 compiler source wget http://caml.inria.fr/pub/distrib/ocaml-3.11/ocaml-3.11.0.tar.gz tar zxvf ocaml-3.11.0.tar.gz cd ocaml-3.11.0 # Get and extract ocamlspotter-1.0 source wget http://jun.furuse.info/hacks/ocamlspotter/ocamlspotter-1.0.tgz?attredirects=0 -O ocamlspotter-1.0.tgz tar zxvf ocamlspotter-1.0.tgz mv ocamlspotter-1.0/* . # Apply the compiler patch patch -p1 < compiler_patch.diff
うまく出来ましたか?出来ない人や、スクリプトを信用できない人は、一行づつ確認して行ってください。
configure
configure スクリプトを実行します。よく知らない方は --prefix だけ設定すればよいです。
$ ./configure --prefix PREFIX
--prefix PREFIX を省略するとコンパイラシステムは /usr/local/bin, /usr/local/lib/ocaml にインストールされます。省略したままだと、既存の純正 OCaml コンパイラを上書きしてしまうこともあるので注意してください。私なら、
$ ./configure --prefix /usr/local/ocaml-3.11-spot-1.0
とでもします。こうしておけば、「なんだ、OCamlSpotter クソじゃん!」という方も /usr/local/ocaml-3.11-spot-1.0 を消してしまえば、あと腐れなく成仏できます。
コンパイル
$ make core coreboot $ make world $ cp boot/myocamlbuild boot/myocamlbuild.boot $ make opt opt.opt
make world 後、変なことをしていますが、3.10 から入ったすばらしく使えない ocamlbuild がコンパイラ改造すると機嫌が悪くなりますので、その対策です。この辺りのことは ocamlc 改造野郎なら目をつぶっていても出来なくてはいけません。そういうの目指している人は頑張ってください。
試してみる
$ /usr/local/ocaml-3.11-spot-1.0/bin/ocaml Objective Caml version 3.11.0+ocamlspotter #
/usr/local/ocaml-3.11-spot-1.0 はあなたが設定した PREFIX に置き換えてください。ちゃんと +ocamlspotter と出ましたか?出てなかったらパッチをうまく適用できてないようです。落ち着いてください。
使いかたはさらに日を改めて。(http://d.hatena.ne.jp/camlspotter/20081231/1230690789)