From aae4317eb9b77daff6f4fe52e95662f58d9facfd 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: Wed, 24 Sep 2025 18:14:41 +0900 Subject: [PATCH] [obsidian] vault backup: 2025-09-24 18:14:41[ --- content/DAWのプロジェクトというデータ構造.md | 5 ++++ content/mimiumのモジュールシステム.md | 3 +++ content/mimiumの多段階計算.md | 24 ++++++++++++++++---- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/content/DAWのプロジェクトというデータ構造.md b/content/DAWのプロジェクトというデータ構造.md index e895251d..a5a7ec87 100644 --- a/content/DAWのプロジェクトというデータ構造.md +++ b/content/DAWのプロジェクトというデータ構造.md @@ -48,6 +48,11 @@ MIDIトラックの場合はもっと複雑。タイムスタンプが一つ一 入出力のデータ型がジェネリックになるとすると、その読み書きはなんかジェネリックなシリアライズ・デシリアライズができる必要あり +ライブレコーディング(モニタリング)モードだと、OSCやスライダーで動かした値がリアルタイムにオーディオに反映される + +そのうえで、レコーディングすればその値の履歴が書き込める + + ## エフェクター的なもの - あるトラックの出力を受け取って、値->値変換をするだけ diff --git a/content/mimiumのモジュールシステム.md b/content/mimiumのモジュールシステム.md index 839e88cf..35569bdc 100644 --- a/content/mimiumのモジュールシステム.md +++ b/content/mimiumのモジュールシステム.md @@ -184,4 +184,7 @@ Pythonのモジュールシステム [Python's Import System - Module object|R これマクロとして実装してあって、それこそレコードとしてファイルが埋め込まれて出力されるだけなので、分割コンパイルとかモジュール内相互参照とかは全然考慮されてないけど意味論はすっきり +一応このやり方でも、ファイルに対する型情報さえ残ってればキャッシュと分割コンパイル自体は可能? + + diff --git a/content/mimiumの多段階計算.md b/content/mimiumの多段階計算.md index e875053a..1a66d894 100644 --- a/content/mimiumの多段階計算.md +++ b/content/mimiumの多段階計算.md @@ -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したファイルの定義によってその下のステージが変わってしまう可能性がある? +