[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

@@ -48,6 +48,11 @@ MIDIトラックの場合はもっと複雑。タイムスタンプが一つ一
入出力のデータ型がジェネリックになるとすると、その読み書きはなんかジェネリックなシリアライズ・デシリアライズができる必要あり 入出力のデータ型がジェネリックになるとすると、その読み書きはなんかジェネリックなシリアライズ・デシリアライズができる必要あり
ライブレコーディングモニタリングモードだと、OSCやスライダーで動かした値がリアルタイムにオーディオに反映される
そのうえで、レコーディングすればその値の履歴が書き込める
## エフェクター的なもの ## エフェクター的なもの
- あるトラックの出力を受け取って、値->値変換をするだけ - あるトラックの出力を受け取って、値->値変換をするだけ

View File

@@ -184,4 +184,7 @@ Pythonのモジュールシステム [Python's Import System - Module object|R
これマクロとして実装してあって、それこそレコードとしてファイルが埋め込まれて出力されるだけなので、分割コンパイルとかモジュール内相互参照とかは全然考慮されてないけど意味論はすっきり これマクロとして実装してあって、それこそレコードとしてファイルが埋め込まれて出力されるだけなので、分割コンパイルとかモジュール内相互参照とかは全然考慮されてないけど意味論はすっきり
一応このやり方でも、ファイルに対する型情報さえ残ってればキャッシュと分割コンパイル自体は可能?

View File

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