3

私は、アルゴリズム言語スキームに関する改訂7レポートを研究しています。私の質問は、セクション 5.6 ライブラリに関するものです。

このセクションでは、次のように述べています。

ライブラリがロードされると、その式はテキスト順に実行されます。ライブラリの定義がプログラムまたはライブラリ本体の展開された形式で参照される場合、展開されたプログラムまたはライブラリ本体が評価される前に、そのライブラリをロードする必要があります。この規則は推移的に適用されます。ライブラリが複数のプログラムまたはライブラリによってインポートされる場合、追加の回数ロードされる可能性があります。

これはどういう意味ですか?インポートされた識別子が実際に参照されている場合、またはライブラリが拡張されたプログラムまたはライブラリのインポートセットの一部である場合にのみ、ライブラリがロードされるということですか? 同じプログラムによってインポートされた他の 2 つのライブラリが同じライブラリを参照している場合、そのライブラリは 2 回読み込まれますか?それとも 1 回だけ読み込まれますか?

ライブラリのロードには、その式の実行による副作用がある可能性があるため、これらの質問に対する答えは私にとって重要だと思われます。また、3 番目のライブラリの内部グローバル変数をインポートする 2 つのライブラリを共有しますか?

私は chibi-scheme でいくつかの実験を行いました: プログラムごとに、chibi-scheme はすべてのライブラリを 1 回だけロードし、エクスポートされた識別子が実際に参照されていなくても。実際、これは賢明で簡単に実装できるもののように思えます。

PS: 仕様が少し曖昧だと思う点がもう 1 つあります。プログラムで、インポート セットが という名前の識別子をインポートするとどうなりimportますか? 直後の行(import ...)がコマンドまたは定義 (インポートされた識別子の意味に応じてimport) またはインポート セットとして解釈されることを意味しますか?

PPS: トップレベル プログラムで複数のインポート宣言を許可する理由は何ですか?

4

1 に答える 1