[obsidian] vault backup: 2025-08-05 17:45:45[
All checks were successful
Build / build (push) Successful in 7m40s

This commit is contained in:
2025-08-05 17:45:45 +09:00
parent 5f422bf2ec
commit 77dc3f577a
2 changed files with 70 additions and 3 deletions

View File

@@ -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を参照できなくなってしまう
ステージ表記は相対表記がいいのかしら

View File

@@ -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しないといけないかこれも再帰を禁止しておけばそれでいいのか
---