From 77dc3f577aa9d8ce8923c7787478512416a2b639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=BE=E6=B5=A6=20=E7=9F=A5=E4=B9=9F=20Matsuura=20Tomoy?= =?UTF-8?q?a?= Date: Tue, 5 Aug 2025 17:45:45 +0900 Subject: [PATCH] [obsidian] vault backup: 2025-08-05 17:45:45[ --- content/mimiumと多段階計算.md | 55 +++++++++++++++++++++++++++ content/mimiumのモジュールシステム.md | 18 +++++++-- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/content/mimiumと多段階計算.md b/content/mimiumと多段階計算.md index 6426c498..14d6930e 100644 --- a/content/mimiumと多段階計算.md +++ b/content/mimiumと多段階計算.md @@ -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を参照できなくなってしまう + + +ステージ表記は相対表記がいいのかしら diff --git a/content/mimiumのモジュールシステム.md b/content/mimiumのモジュールシステム.md index 958893c8..c9c07118 100644 --- a/content/mimiumのモジュールシステム.md +++ b/content/mimiumのモジュールシステム.md @@ -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しないといけないか?これも再帰を禁止しておけばそれでいいのか + + ---