Malgoのファイルパス解決
Malgoのモジュールシステムの刷新を検討している。新しいモジュールシステムでは、各ファイルが一つのモジュールになる。インポートするモジュールの指定には相対パスを使う。
code:Foo.mlg
module {..} = import "../runtime/malgo/Builtin.mlg"
foreign import "../runtime/malgo/runtime.c" malgo_get_contents : () -> String#
インポートするモジュールを指定する文字列をモジュールパスと呼ぶことにする。
モジュールパスから実際のファイルパスを求める手続きが必要になる。
単純に考えると、ファイルFの絶対パス/foo/FとモジュールパスMから対応する絶対パスを求めるには、/foo/Mを求めればいい。
importを処理するには、ファイルFのコンパイル結果F.oが必要。
F.oのディレクトリの絶対パスはFのそれと異なる。
よって、モジュールパスMから対応するF.oの絶対パスを求める必要がある。
作戦:
任意の場所に作られた作業ディレクトリ.malgo-work以下に、モジュールパスと同様のディレクトリを掘る。
モジュールパス./foo/bar/F.mlgに対して、そのコンパイル結果は.malgo-work/foo/bar/F.oに保管される。