From 61c062531ebb25300963546c78a5da2121aaa184 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: Mon, 18 Aug 2025 12:10:15 +0900 Subject: [PATCH] [obsidian] vault backup: 2025-08-18 12:10:15[ --- content/Row Polymorphism.md | 2 + content/mimium.md | 2 +- content/mimiumでのIOパラメーター.md | 82 +++++++++++-------- content/mimiumの型推論.md | 2 + ...mと多段階計算.md => mimiumの多段階計算.md} | 0 content/otopoiesis.md | 2 +- content/private | 2 +- content/型推論.md | 4 + 8 files changed, 59 insertions(+), 37 deletions(-) rename content/{mimiumと多段階計算.md => mimiumの多段階計算.md} (100%) create mode 100644 content/型推論.md diff --git a/content/Row Polymorphism.md b/content/Row Polymorphism.md index 1fa93166..a4c95b35 100644 --- a/content/Row Polymorphism.md +++ b/content/Row Polymorphism.md @@ -11,6 +11,8 @@ [documentation/language/Records.md at master · purescript/documentation · GitHub](https://github.com/purescript/documentation/blob/master/language/Records.md#extending-records) +[documentation/language/Types.md at master · purescript/documentation · GitHub](https://github.com/purescript/documentation/blob/master/language/Types.md#row-polymorphism) + レコード型のコンストラクタが‘`Row Type -> Type`(Rowはカインド変数)になる diff --git a/content/mimium.md b/content/mimium.md index 8cf6683e..5a221c18 100644 --- a/content/mimium.md +++ b/content/mimium.md @@ -35,7 +35,7 @@ https://github.com/mimium-org/mimium-rs ## マクロ -- [[mimiumと多段階計算]] +- [[mimiumの多段階計算]] ### ランタイム周りについて diff --git a/content/mimiumでのIOパラメーター.md b/content/mimiumでのIOパラメーター.md index 61a79183..f0944165 100644 --- a/content/mimiumでのIOパラメーター.md +++ b/content/mimiumでのIOパラメーター.md @@ -77,46 +77,20 @@ channel = 1000;// 最後の行のように、普通にAssign書き込むのもできるようにしておきたい。これできるようにするには、Assignをオーバーロードできるような型システムが必要なのかな`param(コンストラクタ)`と`get_param_name`、`get_param`、`set_param`の4種類があれば十分か +## ParamよりControllerの方が良くないか -[[mimiumのレコード型]]のデフォルト実装、関数のデフォルト引数の組み合わせに対して自動でパラメーターが作られるようにしたい +Parameterは単に関数の引数という意味合いにもとれてしまう -```rust -fn gen_synthesizer(){ - let s = |gate = 0,freq=1000,gain = 1.0|{ - ... - } - s({..}) -} -let mysynth = gen_synthesizer(); +Inputだとプログラムの入力という意味は伝わりやすいが、オーディオインプットとの区別がつきづらくなってしまう -fn dsp(){ - mysynth() -} +ので、Controllerがわかりやすいかもしれない +## [[mimiumのレコード型]]の実装と組み合わせる -``` - -これを実行すると、隠れレコード構造体定義とグローバルなデフォルト引数が作られる - -```rust -... -type defaultarg = { - "gate":number = 0, - "freq":number = 1000, - "gain":number = 1.0 -} -let default_arg_for_mysynth = param("mysynth",defaultarg::default()); -fn dsp(){ - mysynth() -} -``` - -dsp内で`mysynth({..})`と実行してしまうと、これがグローバルなコンテキストで作られない可能性がある・・のか?いや、でも基本的に書き換えられる心配はないからいいのかな - -デフォルト引数構造体のインスタンスは必ずグローバル評価で行う、だとパラメトリックな生成はできないし問題起きそう +デフォルト実装、関数のデフォルト引数の組み合わせに対して自動でパラメーターが作られるようにしたい ```rust //自動キャストとジェネリクスの組み合わせさえうまくいけばこのくらいのことはできそう -let p = param({..}); +let p = controller({..}); fn dsp(){ p |> |gate = 0,freq = 1000,gain = 1.0|{ @@ -125,4 +99,44 @@ fn dsp(){ } ``` -ということは、とりあえず雑にParamを実装して +これを実行すると、隠れレコード構造体定義とグローバルなデフォルト引数が作られる + +```rust +... +type defaultarg = { + gate:number = 0, + freq:number = 1000, + gain:number = 1.0 +} +let p = param(defaultarg::default());//p is higher order function +fn dsp(){ + mysynth(p()) +} +``` + +dsp内で`mysynth({..})`と実行してしまうと、これがグローバルなコンテキストで作られない可能性がある・・のか?いや、でも基本的に書き換えられる心配はないからいいのかな + +デフォルト引数構造体のインスタンスは必ずグローバル評価で行う、だとパラメトリックな生成はできないし問題起きそう + + +## [[mimiumの多段階計算]]と組み合わせる + +`controller`関数がジェネリックな`Code`型を返す関数であれば、関数内に直接埋め込むこともできそう + +```rust +//これが +fn dsp(){ + controller!({..}) + |> |gate = 0,freq = 1000,gain = 1.0|{ + ...//do something + } +} +//こう展開される(本当にジェネリックにできるかは要検討) +fn dsp(){ + __get_generated_controller_value(uuid) + |> |gate = 0,freq = 1000,gain = 1.0|{ + ...//do something + } +} +``` + diff --git a/content/mimiumの型推論.md b/content/mimiumの型推論.md index 1d5177ba..cf6ac72c 100644 --- a/content/mimiumの型推論.md +++ b/content/mimiumの型推論.md @@ -1,4 +1,6 @@ +[[型推論]] + [[Erg]]のドキュメントが参考になる [[構造的部分型]]と[[単一化]]の組み合わせ方の参考になる diff --git a/content/mimiumと多段階計算.md b/content/mimiumの多段階計算.md similarity index 100% rename from content/mimiumと多段階計算.md rename to content/mimiumの多段階計算.md diff --git a/content/otopoiesis.md b/content/otopoiesis.md index 62682a10..b958ce0d 100644 --- a/content/otopoiesis.md +++ b/content/otopoiesis.md @@ -125,7 +125,7 @@ fn reverse(origin:Region)->Region{ ## 多段階計算と組み合わせる -[[mimiumと多段階計算]]で、それなりに多段階計算の実装が間に合ってきた。 +[[mimiumの多段階計算]]で、それなりに多段階計算の実装が間に合ってきた。 FadeinOutのようなリージョン→リージョンの関数はステージ0の計算と考えることができる。 diff --git a/content/private b/content/private index dfc6e0e9..7197969f 160000 --- a/content/private +++ b/content/private @@ -1 +1 @@ -Subproject commit dfc6e0e9c1dc09ec1ad9eff8c44b7ea874d0475c +Subproject commit 7197969f406c94fd97494c6abffac9b4edff6ad0 diff --git a/content/型推論.md b/content/型推論.md new file mode 100644 index 00000000..e703386e --- /dev/null +++ b/content/型推論.md @@ -0,0 +1,4 @@ +--- +date: 2025-08-18 11:26 +--- +#stub