Files
quartz-research-note/content/mimiumのモジュールシステム.md
Matsuura Tomoya(Windows) ac6c358150
All checks were successful
Build / build (push) Successful in 6m53s
[obsidian] vault backup: 2025-08-03 17:51:06[
2025-08-03 17:51:06 +09:00

1.3 KiB

#mimium

モジュールシステムの意味論と実装について考える

必要要件

分割コンパイルできる、かつ、意味論的にもある程度一貫性がある

モジュール内での宣言一覧

//関数のvisibilityセッティングはRustとおなじ感じ
pub fn (){

}
pub const Foo = 100
type Bar = Constructor(()->float) //新しい型宣言
type alias Hoge = ()->float //エイリアス宣言

モジュールの宣言

mod(macro) modname{
   //toplevel_decls
}
  • モジュール単位でMIRとバイトコードを生成して、あとからリンクできるようにする
  • ただし、ステージ0マクロの展開もしないといけないので、ASTも出力して保持していないといけない

意味論

stage(1)
mod(0) modname{
   //toplevel_decls
   fn foo(){
    ...
   }
}
modname::foo!()

これがあったとすると、

let modname = ${
  foo = | | { },
  ...
}

modname.foo!()

こういう感じかなー、あ、でもこうするとモジュール内での相互参照が解決できないか


Program = FunctionDefinition
         |GlobalDeclaration
         |ModuleDeclaration
         |use ModuleName
ModuleDeclaration = Visibility(stage) { Program }