[obsidian] vault backup: 2025-09-24 18:14:41[
All checks were successful
Build / build (push) Successful in 10m1s
All checks were successful
Build / build (push) Successful in 10m1s
This commit is contained in:
@@ -48,6 +48,11 @@ MIDIトラックの場合はもっと複雑。タイムスタンプが一つ一
|
|||||||
|
|
||||||
入出力のデータ型がジェネリックになるとすると、その読み書きはなんかジェネリックなシリアライズ・デシリアライズができる必要あり
|
入出力のデータ型がジェネリックになるとすると、その読み書きはなんかジェネリックなシリアライズ・デシリアライズができる必要あり
|
||||||
|
|
||||||
|
ライブレコーディング(モニタリング)モードだと、OSCやスライダーで動かした値がリアルタイムにオーディオに反映される
|
||||||
|
|
||||||
|
そのうえで、レコーディングすればその値の履歴が書き込める
|
||||||
|
|
||||||
|
|
||||||
## エフェクター的なもの
|
## エフェクター的なもの
|
||||||
|
|
||||||
- あるトラックの出力を受け取って、値->値変換をするだけ
|
- あるトラックの出力を受け取って、値->値変換をするだけ
|
||||||
|
@@ -184,4 +184,7 @@ Pythonのモジュールシステム [Python's Import System - Module object|R
|
|||||||
|
|
||||||
これマクロとして実装してあって、それこそレコードとしてファイルが埋め込まれて出力されるだけなので、分割コンパイルとかモジュール内相互参照とかは全然考慮されてないけど意味論はすっきり
|
これマクロとして実装してあって、それこそレコードとしてファイルが埋め込まれて出力されるだけなので、分割コンパイルとかモジュール内相互参照とかは全然考慮されてないけど意味論はすっきり
|
||||||
|
|
||||||
|
一応このやり方でも、ファイルに対する型情報さえ残ってればキャッシュと分割コンパイル自体は可能?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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したファイルの定義によってその下のステージが変わってしまう可能性がある?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user