Commits

camlspotter  committed c30657d Draft

update

  • Participants
  • Parent commits 621f18c

Comments (0)

Files changed (1)

File ocaml-tools.rst

 4.00.0 では GADT と 3.12.1 より使い易い first class module が入っている。
 2012年内のリリース予定だと思われる。
 
+このところ OCaml のマイナーバージョンの変わるリリースは一年に一度位。
+バグフィックスパッチやリリースはより頻繁にある。
+
 ocaml toplevel
 -------------------
 OCaml 対話環境。いわゆる REPL(Read-Eval-and-Print Loop)。
 
 で編集能力を強化するのが普通である。
 
+(Native code へとコンパイルする ocamlnat という対話環境も存在する。ただしまだ「非公式」)
+
 ocamlc bytecode compiler
 ----------------------------
 OCaml ソースコードを bytecode へとコンパイルするコンパイラ。
 ---------------------------------
 OCaml ソースコードを native code (マシン語)へとコンパイルする。 
 Native code がサポートされているアーキテクチャで OCaml コンパイラソースコードディレクトリで make opt すると作成される。
-実はこのコマンド自体はほとんど使わない。次の ocamlopt.opt を使う
+実はほとんど使わない。次の ocamlc.opt, ocamlopt.opt を参照のこと
 
 ocamlc.opt ocamlopt.opt
 ----------------------------
 \*.opt コンパイラは native にコンパイルされているため bytecode へとコンパイルされたコンパイラより実行速度が早い。
 (Bytecode 版コンパイラがひどく遅いわけではない。)
 
-ocamlc, ocamlopt 以外のツールにも native code バージョンが存在する。
+ocamlc, ocamlopt 以外のツールにも、 .opt の postfix がついた native code バージョンが存在する。
 
 ocamldep
 =================
 ocamldep \*.ml \*.mli > .depend
 として依存情報をファイルに書きだし、それを Makefile 等で include する。
 
-Makefile を使った OCaml ソフトウェアを見れば、まず使用されているので、それらを参考に。
+使い方の例は、 Makefile を使った OCaml ソフトウェアを見れば、まず使用されているので、それらを参考に。
 
 OCaml パーサーツール
 ================================
 注意すべき点として、 OCaml コード以外のパートでのコメントは (\* ... \*) ではなく、 /\* ... \*/ であることが挙げられる。
 \*.mly の例は OCaml コンパイラソースの parsing/parser.mly を参考に。
 
-ocamllex/ulex, ocamlyacc/Menhir は色々と古臭い部分もあり、イライラすることもあるが、
+ocamllex, ocamlyacc は色々と古臭い部分もあり、イライラすることもあるが、
 ほとんどアップデートもなく、非常に良く枯れているツールであるともいえる。
 
+ocamlyacc のほぼ上位互換 parser generator として Menhir という外部ツールがある。 Menhir は ocamlyacc と同じ \*.mly ファイルを受け取る上に、エラーメッセージが読みやすいなど良い点が多い。そのため、現在 OCaml で parser generator を使う場合は Menhir を使うことが推奨されている。
+# (ユーザに Menhir をインストールさせるのが面倒だと思われる場合は、 Menhir で新しい機能を使わず、デバッグ開発を行い、リリース時には ocamlyacc に戻す、ということも可能。)
+
 Camlp4 pre-processor and pretty printer
 =============================================
-Camlp4 は Pre-Processor and Pretty Printer の4つの P から P4 と呼ばれ、
+Camlp4 (略称P4) は Pre-Processor and Pretty Printer の4つの P から P4 と呼ばれ、
 自分でパーサーをスクラッチから記述できるだけでなく、 
 OCaml コードでのマクロや文法拡張を実現することもできる強力なツール。
 P4 は yacc のような LALRベースではなく、 LLベースの stream parsing が使われるため、
 複雑ではあるが非常に重要なツールである。
 文法拡張記述には OCaml の通常の文法 (original syntax) と
 OCaml 文法拡張を書く際、 ambiguity が少なくなる改良文法 (revised syntax) の二つの文法を
-選ぶことができる。これに対応して Camlp4 コマンドも camlp4\* から始まる複数のコマンド群からなる。
+選ぶことができる。これらの文法を使うかどうかに対応して Camlp4 コマンドも camlp4* から始まる複数のコマンド群からなる。
 
-問題は、非常に複雑なツールであるため、 OCaml 本体の正式文法が拡張された場合、それへの追随が遅れることがあること
+問題は、 P4 は非常に複雑なツールであるため、 OCaml 本体の正式文法が拡張された場合、それへの追随が遅れることがあること
 (よって、新機能と P4 の組み合わせが使えなかったりする)、そして、ドキュメントがほとんど整備されていないこと、である。
-既存の P4 で書かれた文法拡張を使うだけの場合は P4 でのパーサルールの書き方などを理解する必要はない
-とはいえ改善が望まれる。 
+既存の P4 で書かれた文法拡張を使うだけの場合は P4 でのパーサルールの書き方などを理解する必要はないとはいえ改善が望まれる。
 
 以下は 3.10系 Camlp4 を開発した人が書いた情報。残念ながら全く不十分
 
 * Camlp4: Major changes : http://nicolaspouillard.fr/camlp4-changes.html
 * Using Camlp4: http://brion.inria.fr/gallium/index.php/Using_Camlp4
 
-P4 のチュートリアルとしては Jake Donham の 
+3.10系 P4 のチュートリアルとしては Jake Donham の
 Reading Camlp4 http://ambassadortothecomputers.blogspot.com/search/label/camlp4
 は素晴らしい記事であり、推薦する。
 
+インターネット上の P4 の情報を調べる際は、必ずそれがいつの時期に書かれたものか確認すること。
+
 Camlp5 との関係
 -------------------
 Camlp4 とは別に Camlp5 というツールが存在するが、これは OCaml に同梱されていない。
 それらからかなり離れている。 P5 が P4 より数字が多いため、優れているとか、その逆、という関係ではない。
 なお、 P5 は Coq theorem prover でよく使用されている。
 
-基本的にこれら P4, P5 のアイデアは同じなので 古い P4 および P5 のドキュメントを読んで 3.10系 P4
-を使用することは十分に可能であるが、その際には 3.10系 P4 の working example などを参照して
-細かな違いを把握する必要がある。
+基本的にこれら P4, P5 のアイデアは同じなので 古い P4 および P5 のドキュメントを読んで 3.10系 P4 の基本的な使用方法を理解することは可能であるが、その際には必ず 3.10系 P4 の working example などを参照して細かな違いを把握する必要がある。
 
-P4 と P5 が何故ブランチしたか、はさまざまな事情があるがここで語るべきことではない。
+P4 と P5 が何故ブランチしたか、はさまざまな事情があるがここで語るべきではない。
+
+ocamlmktop, ocamlmklib
+===========================
+まだ書いてない
+
+ocamldoc
+=======================
+まだ書いてないよく知らない
+
+ocamlbuild
+======================
+まだ書いてないよく知らない
 
 ほとんど使用されないツール
 ====================================
 ocamldebug を使うためには各バイトコードオブジェクトファイル \*.cmo を 
 ocamlc にデバッグフラグ -g を付けてコンパイルする必要がある。
 
-printf デバッグか、 gdb を使った native code プログラムのデバッグの方が判りやすい場合が多い。
-どうしてもプログラム挙動がわからない場合、念のために使われることが多い。
+ocamldebug では一旦進めたデバッグステップを巻き戻すことができるという、ちょっと変わった機能がある。とは言え… printf デバッグか、 gdb を使った native code プログラムのデバッグの方が判りやすい場合が多い。どうしてもプログラム挙動がわからない場合、念のために使われることが多い。これは ocamldebug が非力だからというのではなく、やはり静的に型付けされた関数型プログラムではキャストの誤りや NULL エラーが起こることがなく、あまりデバッグを必要としないからというのが大きい。
 
 バイトコードプロファイラ ocamlprof と ocamlcp
 ----------------------------------------------
 ocamlopt に -p オプションを付けて native code でのプロファイルを取り、
 そのアプトプットを gprof で可視化するのが普通である。
 
+マニアックなツール
+==================
 
+expunge
+--------
 
-
-
-
+ocamlobjinfo
+---------------