良い質問! は、私は他の回答を見ることに本当に興味があるが、ここで私は私のプロジェクトを整理する方法であるだろう。
まず第一に、私は優れたOCalIDEでEclipseを使用し、それを積極的に維持し、本当にクールなEclipseのプラグインです。
あなたがEmacsユーザーの場合は、TypeRex(これは死んでいますが、OCamlコミュニティは非常にゆっくりと移動していますので、すべての時間があります)。 あなたがVimユーザーの場合、Omletは常に存在しますが、本当に素晴らしい解決策はありません。
Eclipseでは、「Managed Ocaml Project」を選択することができます。基本的にはを意味します。私はこのようなプロジェクトをコンパイルすることを心配したくありません。
それから、個人的なプロジェクトや一時的なテストには十分です。しかし、あなたが「Ocaml Makefile Project」と「ocamlbuildを使ってOcamlプロジェクト」のどちらかを選択しなければならない場合は、 Makefileを選択すると、はるかに柔軟で簡単な解決方法です。
Eclipseはあなたにa default Makefile for Ocaml projectsというコメントを説明します。 Ocamlビルドシステムに精通していない場合には、これを使用することをお勧めします。もしあなたがそうであれば、私はあなた自身のMakefileを使うことをお勧めします。なぜなら、デフォルトのものが大きすぎて読めない(私は思う)からです。
素晴らしい!今私たちは好きなエディタでプロジェクトを行い、グローバルな構造を作る準備ができました!プロジェクトのルートに
は、私が言った、古典的なGNU tarボールの慣例に従う:
/
|- src/ # source files
|- lib/ # dependencies
|- test/ # tests files and test binaries
|- _build/ # binaries and object files, sometimes managed by ocamlbuild
|- AUTHORS # who did that marvelous stuff
|- README # what is it
|- Makefile # *always* provide a Makefile, you never know...
|- _tags # when I use ocamlbuild
|- _oasis # when I use oasis
は時々、何のlibディレクトリが存在しないが、それは良いことです。しかし、AUTHORとREADMEファイルはプロジェクトには静かであるため、提供するべきです。
これは退屈な部分でしたが、srcディレクトリはどうですか?
- OCamlモジュール式システムは、自分の容器に入れるのに非常に役立ちます。
- 私はファンクタ以外のモジュールには内部モジュールを使用していません
- 私は自分のモジュールを一貫して(一種のゴールデンルール)維持しています。そのため、私のモジュール名は、ほとんどがデータ型または内部状態の特定のコンテナ(javaistsがSingletonsと呼ぶもの)に関連しています
- 私はしばしば2つまたは3つの明示的に特定のモジュールを作成します:エントリーポイント、すべての共通タイプ、一般的に使用されるすべての機能が含まれています。循環依存を避ける。私は本当に私のモジュール構造を見ることができない限り、
私はsrc/
ディレクトリ内のすべてのフラットに保つ(それらがパースされ、それらはAIコンピューティングあり、それらは...ネットワークです)。 Cプロジェクトと同じ方法です。
OCamlは簡潔な言語なので、ファイルはほとんどありません。 Cプロジェクトに関しては、ディレクトリ構造ができるだけ平坦であるようにしてください。ディレクトリはモジュール名や名前空間の一部ではないので、プログラマにとって便利です。
- mliの部分:実際にはプロジェクトの目標に依存します。これは私の方法です:
- 唯一の一般的なルールは次のとおりです。 Mlisはコンパイラとプログラマを助けるためにここにあります。
- あなたのためですか? ml部分にドキュメントを作成し、型制約や大きすぎるブラウジングmlのためにmliのみを生成します。
- あなたのプロジェクトを配布したいですか?選択肢があれば、私たちが読む最初のファイルなので、mliに文書化してください。インタフェースを生成するファイルを選択してください。おそらくいくつかは内部構造であり、それらを一般ユーザが読んでいないようにしたいかもしれません。
- OCamlオブジェクトシステムを扱うときは、非常に手早くなるので、これらは常に必要です。私はできるだけ少数としての私のMLIを保つために満足している一般的なケースでは
ので、ゲストはすぐに知ってもいいですし、高度な内部/であるどのファイルを知っているだろう。
また、私は先に進むのを止めるタイプの制約がないので、リファクタリングに役立ちます。
テストスイートは、何も壊していないことを確認するためのものです(OUnitを参照してください。ディストリビューションはパッケージ化されている必要があります)。
これは私がすべて見るものです。誰も助けてくれることを願っています!