| |||||||||||
| MINERVAのパッケージ機構は、大規模なプログラムの構築の際に 開発者が余分な努力をすることなく、以下を達成できる メカニズムを提供しています。
動機プログラムの大規模化、複数のプログラマによる共同開発、メンテナンスの必要性 及びソフトウェアエンジニアリング手法により、 プログラムを管理可能な独立性の高いモジュールに分けることが望まれています。 MINERVAは、複数の異なるネームスペースの提供および知的なロードスキーマにより これを可能にしています。MINERVAでは、動的にロード可能なモジュールを 実装し、かつコンパイラによる厳格で静的なチェックを行なっています。 これにより、小さく、迅速にロードされ、かつ、頑健性の高いプログラムの作成が 可能になりました。
原則MINERVAコンパイラminervacは、各*.minのMINERVAソースファイルに対して、 モジュールインタフェース仕様を持つ *.mpk MINERVAパッケージファイルと、 *.mbc MINERVAバイナリコードファイルの二つのファイルを生成します。 プログラムは、指令packageにより他のパッケージにアクセス することができます。 そのプログラムで定義されていず、packageの指令によりアクセス 可能ではない述語が明確に呼び出された場合、 コンパイラは、エラーメッセージを出します。 デフォルトでは、プログラムはすべての述語をエクスポートします。 アンダスコア('_')によって始まる述語は、*.mpkファイルには エクスポートされません。このため、他のパッケージからは アクセスできません。 同じ名前/アリティを有する述語がいくつかのパッケージから エクスポートされると、最初にロードされたパッケージの述語のみが呼び出され、 他のパッケージの述語は隠されます。 パッケージは、ディレクトリの中で探索され、それから minervaの-spパラメータで与えられたシーケンスに応じて 探索されます。 複数回関連付けられたパッケージも、一度しかロードされません。 別れているパッケージのネームスペースは別々になっています。
例"aaa"のパッケージはaaa/1、aaa1/1, aaa2/1をエクスポートしますが、 _aaa3/3はエクスポートしません。
% file: aaa.min"bbb"のパッケージは、"aaa"からエクスポートされたすべての述語と bbb/1をエクスポートしますが、 _aaa3/3はエクスポートしません。
bbb/1の定義は、"bbb"の_aaa3/3を使用しています。"aaa"の_aaa3/3は "bbb"にはアクセス可能ではありません。
% file: bbb.min :- package(aaa)."ccc"は、"bbb"と"bbb"から再帰的に"aaa"をアクセスすることが できます。"ccc"は、aaa/1をエクスポートします。 もし、"ccc"がまずロードされる場合、?- ccc(X)の結果はX=1です。 これは、"aaa"のaaa/1の定義は、"ccc"にはアクセス可能ですが、 "ccc"のaaa/1の定義によって、隠されてしまうためです。
% file: ccc.min :- package(bbb).
プログラミングの際のお勧めプログラミングの場合には、以下をお勧めします。
| |||||||||||
| |||||||||||
| 戻る> |
|