2010-04-04T11:31:21+09:00
ModuleLoader で実行時にモジュールをロードする時の注意点
まずは、ModuleLoader を使った、次のようなスクリプトを見てください。このスクリプトでは、
することを意図しています。
でも、このスクリプトは期待通りに動かないぜ。どううまくいかないかというと、2回目以降の実行で ModuleC がファイルからロードされない。一回目の実行で ModuleC は、変数 loader の loader script にキャッシュされて、2回目以降の実行ではキャッシュされた ModuleC が load module コマンドから返ってくる。実行時には毎回ファイルから読み込んでほしいよね。
残念ながら、完全な回避法を思いつかない。いくらか妥協した次の二つの回避方法を思いつく。
次のように、boot (module loader) for me を実行時に移して、コンパイル時に ModuleA をロードすることをあきらめる。
次のように、実行時に module loader コマンドを実行して、コンパイル時に使用する loader script とは別のものを使う。この方法の問題点は、ModuleC が ModuleA に依存していた場合、ModuleC が参照する ModuleA とコンパイル時にロードした ModuleA が別物になるということ。モジュールの同一性が完全には保たれない。
どっちがいいかは、よう分からん。
追記 : キャッシュを無視して、ファイルからのロードを明示することができれば、上記の問題を解決できることに気づいた。次の version での機能追加事項にしよう。