[obsidian] vault backup: 2025-09-24 18:14:41[
All checks were successful
Build / build (push) Successful in 10m1s

This commit is contained in:
2025-09-24 18:14:41 +09:00
parent ea1236e6c2
commit aae4317eb9
3 changed files with 28 additions and 4 deletions

View File

@@ -60,8 +60,6 @@ Param型はinvokeでuiからの値を取れる、サンクをアンラップす
## マクロを提供するプラグイン
プラグインも、各関数が返す型と同時にどのレベルでその関数が使えるかをコンパイラに渡す必要がある
### ファイル読み込みはどうなる?
[[mimiumのファイルIO]]の話。マクロの展開より先に型の評価が行われるので、例えばファイルを読み込んでからチャンネル数が分かる、みたいな場合型情報を読み込む段階でファイルを読みこまなければならない、がその評価のためにはマクロを実行して文字列の値を受け取らなければならない、、、ということで、結局[[依存型]]がないと多段階計算でも対応できない。
@@ -72,26 +70,38 @@ Param型はinvokeでuiからの値を取れる、サンクをアンラップす
## シンタックス
色んな流派があるが、バッククォートでクォート(コード型の値を作る)、$でスプライス(コードを埋め込む)ようにする。
```rust
let x = `{1+2} //コードのシンタックス
let x = `{1+2} //コード/クォートのシンタックス
${x} //エスケープ/スプライスのシンタックス
//or
$x
//or
$(x)
```
どちらも単なる単項演算子として定義しているので、複雑な式の場合は`()`でグループ化するか、`{}`でブロックを生成すればよろしい。
### 型シグネチャ
新たにCode型が導入されるので、これもバッククォート演算子を導入することにする。
```rust
let x : `(float)->float //これは関数型に対する宣言
let y : (float)->`float //これは返り値がCode型の場合
```
レコードとタプル型で曖昧性が出そうな気もするけど、多分大丈夫
### シンタックスシュガー
ファイル内でステージを変えたブロックを作りたい場合、ブロックがどんどんネストされていって面倒。
あと、mimiumではブロック`${}` の内側に`fn`での関数宣言ができないのもダルい。
ステージ表記については、一旦0をmacro、1をmainと呼ぶことにする。それ以上にステージが増える可能性もあるけど今はこれで十分
```rust
//ステージ1からスタート
#stage(macro)
@@ -126,6 +136,12 @@ ${//#stage(macro) start
とはいえ、簡易的に1ファイル内でステージ0、1の変更もしたいかな
persistentな宣言をした時の意味論はどうしようコードを複製する
persistentである時点でcode型が現れないかのチェックをする必要はある
単なる置き換えだと、includeしたファイルの定義によってその下のステージが変わってしまう可能性がある