[obsidian] vault backup: 2025-08-05 17:45:45[
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Build / build (push) Successful in 7m40s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Build / build (push) Successful in 7m40s
				
			This commit is contained in:
		@@ -68,4 +68,59 @@ Param型はinvokeでuiからの値を取れる、サンクをアンラップす
 | 
			
		||||
 | 
			
		||||
結局、読み込んで返す値として次元数の値を持つ配列を返すしかないのかも
 | 
			
		||||
 | 
			
		||||
ただ、よく考えると[[Max]]のsfplayとかだって、ファイルのチャンネル数とは別に出力のチャンネル数先に指定するしな(入ってるファイルの中身のCh数に応じて処理を分岐させるというユースケースがあんまり思いつかない)
 | 
			
		||||
 | 
			
		||||
## シンタックス
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
let x = `{1+2} //コード型のシンタックス
 | 
			
		||||
${x} //エスケープ/スプライスのシンタックス
 | 
			
		||||
//or
 | 
			
		||||
$x
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### シンタックスシュガー
 | 
			
		||||
 | 
			
		||||
ファイル内でステージを変えたブロックを作りたい場合、ブロックがどんどんネストされていって面倒なので
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
//ステージ1からスタート
 | 
			
		||||
 | 
			
		||||
---stage(-1)---
 | 
			
		||||
//ここはステージ0
 | 
			
		||||
let x = {...}
 | 
			
		||||
---
 | 
			
		||||
//一度ステージ1へ
 | 
			
		||||
 | 
			
		||||
---stage(-1)
 | 
			
		||||
//ここはステージ0
 | 
			
		||||
let y = (x+...)
 | 
			
		||||
---
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
これをこういう形でネストした式へ変形
 | 
			
		||||
```rust
 | 
			
		||||
//コンパイラはステージ0からスタートするためにCodeを追加
 | 
			
		||||
`{
 | 
			
		||||
//ステージ1からスタート
 | 
			
		||||
${
 | 
			
		||||
	//ステージ0
 | 
			
		||||
   let x = {...}
 | 
			
		||||
 `{
 | 
			
		||||
 //一度ステージ1へ
 | 
			
		||||
 }
 | 
			
		||||
 ${
 | 
			
		||||
 //再度ステージ0へ
 | 
			
		||||
 let y = (x+...)
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
この、最後に閉じ括弧が溜まっていく形にしない限り、yはxを参照できなくなってしまう
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ステージ表記は相対表記がいいのかしら
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -33,25 +33,34 @@ pub type alias Hoge = ()->float //エイリアス宣言
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### モジュールの宣言
 | 
			
		||||
#### シンタックス:モジュールの宣言
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
mod(macro) modname{
 | 
			
		||||
mod modname{//ソースファイルと同じ宣言
 | 
			
		||||
   //toplevel_decls
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
mod(stage-1){//ステージの変更
 | 
			
		||||
   //
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- モジュール単位でMIRとバイトコードを生成して、あとからリンクできるようにする
 | 
			
		||||
- ただし、ステージ0マクロの展開もしないといけないので、ASTも出力して保持していないといけない
 | 
			
		||||
 | 
			
		||||
モジュールを値としてレコード型に型付けできると話が早いんだけど、それ一級モジュールの機能だよな
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### 意味論
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
stage(1)
 | 
			
		||||
mod(0) modname{
 | 
			
		||||
   //toplevel_decls
 | 
			
		||||
   fn foo(){
 | 
			
		||||
   fn foo()-> `float {
 | 
			
		||||
    ...
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
@@ -138,6 +147,9 @@ Rustの場合はグローバルな宣言が基本的に型推論しなくて済
 | 
			
		||||
	- とりあえずmodAの型はすべて不明なレコード型として解釈して型付け開始
 | 
			
		||||
- Proigram→Exprへの変換の中でuse宣言をextern modA:{...}に変換し、名前空間参照をレコードへのアクセスに変換
 | 
			
		||||
 | 
			
		||||
両方が推論終わってから再度Unificationしないといけないか?これも再帰を禁止しておけばそれでいいのか
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user