1

これまで、すべてのソース コード ファイルがすべて同じディレクトリにあるいくつかの小さなプロジェクトで Poly/ML を使用してきました。これらのプロジェクトをビルドするには、REPL で次のコマンドを実行するだけで済みました。

> PolyML.make "Main";

しかし、現在、規模が大きく、すべてのソース コード ファイルを同じディレクトリに配置することが現実的ではないプロジェクトがあります。これらのプロジェクトを REPL でビルドするには、次のコマンドを実行する必要があります。

> PolyML.make "foo/Foo";
> PolyML.make "bar/Bar";
> PolyML.make "qux/Qux";
> PolyML.make "Main";

サブシステムの数が増えるにつれて、これはあまり実用的ではありません。

Poly/ML でネストされたディレクトリ構造を持つプロジェクトを構築するプロセスを自動化する方法はありますか?


PD: SML/NJ の Compilation Manager と MLton の ML Basis システムの両方を見てきました。間違いなく強力ですが、これらは私のニーズには複雑すぎます。

4

2 に答える 2

4

各サブディレクトリに ml_bind.ML というファイルを置き、それらのファイルでそのディレクトリのコンポーネントをビルドします。

PolyML.make は、ソース ファイルの名前がコンポーネント (構造、シグネチャ、またはファンクター) の名前と一致することを期待します。したがって、「Foo」という構造体を探している場合、「Foo」、「Foo.ML」、または「Foo.sml」というファイルにある「Foo」のソースが必要になります。代わりに「Foo」というディレクトリが見つかった場合は、再帰的に「Foo」ディレクトリに入り、「ml_bind.ML」ファイルをガイドとして使用して「Foo」構造を構築します。通常、「Foo/ml_bind.ML」は次のようになります

structure Foo = FooFunctor(structure A = FooA and B = FooB);

それぞれ「FooFunctor」、「FooA」、「FooB」のソースを含むファイル「Foo/FooFunctor.ML」、「Foo/FooA.ML」、「Foo/FooB.ML」を使用します。

この例は、Poly/ML ソース コード配布の一部として提供される Poly/ML コンパイラのコードで見つけることができます。

于 2015-03-29T16:37:24.817 に答える