All checks were successful
Build / build (push) Successful in 6m53s
1.3 KiB
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 }