[obsidian] vault backup: 2025-08-18 12:10:15[
All checks were successful
Build / build (push) Successful in 7m26s

This commit is contained in:
2025-08-18 12:10:15 +09:00
parent 1bd9312173
commit 61c062531e
8 changed files with 59 additions and 37 deletions

View File

@@ -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はカインド変数)になる

View File

@@ -35,7 +35,7 @@ https://github.com/mimium-org/mimium-rs
## マクロ
- [[mimium多段階計算]]
- [[mimium多段階計算]]
### ランタイム周りについて

View File

@@ -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
}
}
```

View File

@@ -1,4 +1,6 @@
[[型推論]]
[[Erg]]のドキュメントが参考になる
[[構造的部分型]]と[[単一化]]の組み合わせ方の参考になる

View File

@@ -125,7 +125,7 @@ fn reverse(origin:Region)->Region{
## 多段階計算と組み合わせる
[[mimium多段階計算]]で、それなりに多段階計算の実装が間に合ってきた。
[[mimium多段階計算]]で、それなりに多段階計算の実装が間に合ってきた。
FadeinOutのようなリージョン→リージョンの関数はステージ0の計算と考えることができる。

4
content/型推論.md Normal file
View File

@@ -0,0 +1,4 @@
---
date: 2025-08-18 11:26
---
#stub