Commits

camlspotter  committed e75423e

updated for 2013

  • Participants
  • Parent commits 1e93822

Comments (0)

Files changed (1)

File ocaml-tools.rst

 OCaml 開発環境について ~ OCaml コンパイラソース付属ツール
 =============================================================
 
-2012年12月での関数型言語 OCaml コンパイラ一式をインストールした際に付属する「公式」ツール群の紹介を行う。多岐に渡るので、一つ一つの詳しい説明は行わない。各ツールの細かい情報はそれぞれのドキュメントを参照して欲しい。
+2013年12月での関数型言語 OCaml コンパイラ一式をインストールした際に付属する「公式」ツール群の紹介を行う。多岐に渡るので、一つ一つの詳しい説明は行わない。各ツールの細かい情報はそれぞれのドキュメントを参照して欲しい。
 
 もし知らないツール名があったらちょっと読んでみて欲しい。もしかしたらあなたの問題を解決するツールがあるかもしれないから。(特に caml-types.el)
 
 OCaml コンパイラ
 ==========================
 
-現時点での公式最新バージョンは 4.00.1。
-4.00.1 は基本的に 4.00.0 のバグフィクスリリース。
-4.00.0 では GADT と 3.12.1 より使い易い first class module が入っている。
+現時点での公式最新バージョンは 4.01.0。
+4.00.1 からの変更点は http://d.hatena.ne.jp/camlspotter/20130904/1378277465 にまとめられている。
 
 このところ OCaml のマイナーバージョンの変わるリリースは一年に一度位。
 バグフィックスパッチやリリースはより頻繁にある。
 
 * rlwrap : read line wrapper ( http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap )
 * emacs の shell mode 内などでの実行
+* サードパーティー製の強化 toplevel utop を使う
 
-編集能力を強化するのが普通である。
+などして編集能力を強化するのが普通である。
 
 Real World OCaml programmer で toplevel を使うか使わないか…は人により違うようだ。
 Toplevel は値のプリンタがあるので、ライブラリをロードして関数のインタラクティブなテストを行う人はいる。
 一方、私は電卓として使うか型システムの挙動を確かめる時以外全く使わない。
 
-ocamlc bytecode compiler ★★★★
+ocamlc bytecode compiler ★★★★ (-1)
 ---------------------------------------
 OCaml ソースコードを bytecode へとコンパイルするコンパイラ。
 Bytecode プログラムは native code と比べると遅いが、 
 ocamldebug を使ったデバッグが可能。
 
+協調スレッドを多用した OCaml プログラムの場合デバッグは ocamldebug を使っても…
+という場合が多く、ocamlopt でコンパイルしたコードを gdb でデバッグするのとあまり
+変わらないような気がする。デバッグを期待した ocamlc によるコンパイルは最後の手段だと
+思われる。
+
 ocamlopt native code compiler ★★
 -----------------------------------------
 OCaml ソースコードを native code (マシン語)へとコンパイルする。 
-Native code がサポートされているアーキテクチャで OCaml コンパイラソースコードディレクトリで make opt すると作成される。
+Native code がサポートされているアーキテクチャで
+OCaml コンパイラソースコードディレクトリで make opt すると作成される。
 実はほとんど使わない。次の ocamlc.opt, ocamlopt.opt を参照のこと。
 
 ocamlc.opt ocamlopt.opt ★★★★★
 使い方の例は、 Makefile を使った OCaml ソフトウェアを見れば、
 まず使用されているので、それらを参考に。
 
+重要ではあるが、 ocamlbuild や OMake、 OCamlMakefile などを使えば
+ocamldep は自動的に呼び出されるのであまり意識することはない。
+
 OCaml パーサーツール
 ================================
 
 (ユーザに Menhir をインストールさせるのが面倒だと思われる場合は、 Menhir の新機能を使わず \*.mly を作り、リリース時には ocamlyacc に戻す、ということも可能。)
 
 
-マクロ/文法拡張システム: Camlp4 pre-processor and pretty printer ★★★★
-=======================================================================
+マクロ/文法拡張システム: Camlp4 pre-processor and pretty printer ★★★★ (-1)
+=============================================================================
 Camlp4 (略称P4) は Pre-Processor and Pretty Printer の4つの P から P4 と呼ばれ、
 自分でパーサーをスクラッチから記述できるだけでなく、 
 OCaml コードでのマクロや文法拡張を実現することもできる強力なツール。
 
 インターネット上の P4 の情報を調べる際は、必ずそれがいつの時期に書かれたものか、つまり 3.10以前か 3.10以降かを確認すること。
 
+* 拙著の投げやりな入門: https://bitbucket.org/camlspotter/ocaml-zippy-tutorial-in-japanese/src/a8da8ba783d1c66e4e19e77cc72c15446c8e9f57/camlp4.rst?at=default
+
 Camlp5 との関係
 -------------------
 Camlp4 とは別に Camlp5 というツールが存在するが、これは OCaml に同梱されていない。
 
 P4 と P5 が何故ブランチしたか、はさまざまな事情があるがここで語るべきではない。
 
+なお P4 は次バージョンから OCaml コンパイラシステム一式からは外されて独立した
+アプリケーションとして管理されることになっている。
+
 リンク支援: ocamlmktop, ocamlmklib ★★
 =================================================
 ocamlmktop および ocamlmklib は外部Cライブラリをリンクした toplevel や
 
 複雑なソース、プログラムコードの自動生成や特殊なリンクが必要な場合など、の場合は myocamlbuild.ml という OCaml モジュールで特殊ルールを記述し ocamlbuild に伝える必要がある。このファイルでは ocamlbuild が提供するルール記述用ライブラリを使うことができる。問題はこのライブラリを使うドキュメントがあまり整備されていないこと。(Camlp4 3.10以降系といい、 ocamlbuild といい 3.10 周りで作られたツールはドキュメントが全くなっていない) また、ルール記述が OCaml という汎用言語で書かねばならないためどう見ても Makefile や OMakefile などのビルドに特化した言語に比べ煩雑に見えてしまうことである。もちろん OCaml の利点である型安全性やパターンマッチ、高階関数などによってビルドルールを構成的に書くことができるのだが…もう少し文法拡張などして DSL の風味を付け加えるべきではなかろうか。
 
-私は ocamlbuild は使わない。現在のところ OMake を使っている。とは言え、どうやら世の中的には ocamlbuild が標準になりつつあるのでそろそろ手を出さねばならない…
+私は ocamlbuild は使わない。現在のところ OMake を使っている。とは言え、どうやら世の中的には ocamlbuild が標準になりつつあるのでそろそろ手を出さねばならない…と言いつつ一年が過ぎた。
 
 ドキュメントシステム: ocamldoc ★★★
 ======================================
 だいたい頭に入っているから対応する \*.mli ファイルをエディタで開いて
 使うべき関数名や型コンストラクタを確認するくらいですんでしまう。
 
+OCamlBrowser が依存している LablTk ライブラリは次バージョンから OCaml システム一式からは
+外されて独立したライブラリとなる。そのため OCamlBrowser も次バージョンからは「付属ツール」
+とは言えなくなる。
+
 ほとんど使用されないツール
 ====================================