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

71 lines
1.3 KiB
Markdown

#mimium
モジュールシステムの意味論と実装について考える
### 必要要件
分割コンパイルできる、かつ、意味論的にもある程度一貫性がある
#### モジュール内での宣言一覧
```rust
//関数のvisibilityセッティングはRustとおなじ感じ
pub fn (){
}
pub const Foo = 100
type Bar = Constructor(()->float) //新しい型宣言
type alias Hoge = ()->float //エイリアス宣言
```
#### モジュールの宣言
```rust
mod(macro) modname{
//toplevel_decls
}
```
- モジュール単位でMIRとバイトコードを生成して、あとからリンクできるようにする
- ただし、ステージ0マクロの展開もしないといけないので、ASTも出力して保持していないといけない
#### 意味論
```rust
stage(1)
mod(0) modname{
//toplevel_decls
fn foo(){
...
}
}
modname::foo!()
```
これがあったとすると、
```rust
let modname = ${
foo = | | { },
...
}
modname.foo!()
```
こういう感じかなー、あ、でもこうするとモジュール内での相互参照が解決できないか
---
```
Program = FunctionDefinition
|GlobalDeclaration
|ModuleDeclaration
|use ModuleName
ModuleDeclaration = Visibility(stage) { Program }
```