---
title: mimium
tags:
  - research
  - programming-language
  - "#computermusic"
  - "#mimium"
date: 2023-08-28T22:32:09+0900
---
[[松浦知也]]が開発している[[音楽プログラミング言語]]。

https://mimium.org

https://github.com/mimium-org/mimium-rs


---

## 開発メモ

### 理論

- [[mimiumの部分的DSP更新とFaustのondemand]]
- [[mimiumでのIOパラメーター]]
- [[mimiumの型推論]]
### 中間表現について

- [[mimium新内部表現の構想]]
- [[mimiumの中間表現を考える]]
- [[mimiumのMIRコンパイル過程を真面目に考える]]
- [[lambda-mmm(実用版)]]
- [[mimiumグローバル環境評価について]]
- [[mimiumのモジュールシステム]]


## マクロ

- [[mimiumの多段階計算]]
	

### ランタイム周りについて

- [[mimiumにおけるIO制御]]
	- [[mimiumでMIDIインプットを実装]]
	- [[mimiumのファイルIO]]
- [[mimiumのプラグインシステム]]
- [[WASIでmimiumをビルド＆デバッグしてみる]]
- [[mimiumの配列実装]]
- [[mimiumのREPLをVMで実装]]

## 応用先について

ふと思ったけど、[[SuperCollider]]や[[PureData]]と比べると、これらの言語は組み込みに使おうと思うとLinuxが動く環境を想定することになる（[[Heavy]]はそれを全く別の処理系作ることで対応してたけど）。シーケンサとかスケジューラーがあるような、[[Faust]]だと難しいタイプのプログラムを[[Arduino]]とかに持っていくには向いているのではないか([[Extempore]]だって仕組み的に言えばそうかもしれないけど)

- できれば教育用途とかに持ち込めるのが一番いい
- ブートストラップできるといい
	- いろいろな人がmimiumで拡張やライブラリを書けるようになってからが本当の本番
	- 言語自体の拡張機能をその言語上でたくさん作れるとよい
	- しかし、極端に自由度が高いとそれはそれで参入障壁が高い


[[mimiumでのシーケンサ]]

[[mimiumでのライブコーディングエンジン]]

---

## 開発ロードマップ


[mimium-rs/Roadmap.md at dev · mimium-org/mimium-rs · GitHub](https://github.com/mimium-org/mimium-rs/blob/dev/Roadmap.md)

v4

- 列ポリモーフィズム
	- パターン分解とタプルアクセスの型安全性をきちんと保証するため。
	- まず型のユニフィケーションをunion_findに置き換える
	- 型システムがしっかりするほど逆にエラー報告がわかりにくくなってる矛盾があるので、unionする際にエラーの原因をちゃんとtrackできるような仕組みを何か入れたい
- [[mimiumでのバリアント]]：やっぱり必要
- [[mimiumのモジュールシステム|モジュール]]：名前空間のCライブラリレベルでのマングリングとか考える必要ありそう
- [[OSC]]の実装
	- アドレスを単一のnumberにマッピングするだけならそんなに困らなさそう。
- [[mimiumでMIDIインプットを実装|MIDIドライバの書き直し]]
	- イベントストリームのチェーンをちゃんとFRPで書けるようにしたい
- オーディオドライバのコンフィグ系をフロントエンドに実装
- Delayに加えて、rwtableプリミティブを追加
	- これがないとリバースディレイを作れない
	- というか、これがあるとDelayもrwtableでカバーできてしまうという
- シンタックスツリーをRed-GreenツリーにしてLanguage Serverを強化
- ステージ0の組み込み関数に配列と文字列操作を追加
	- mapやfoldをやるにはジェネリクスが必要だけど、とりあえずは整数に対する操作だけでも
	- とりあえず配列のsplit_head関数を入れたけど、やっぱりmapはジェネリクス無いとあんまり旨みがないかも。shroeder reverbの実装が綺麗に書けない・・・
- 整数型の整備
- Craneliftバックエンド with wasm3
- Webcomponentをちゃんとshadow-dom化したい（今は別途prismを読んで直接HTMLを書く必要がある）

v3

- 多段階計算:大変そう。コンパイラドライバをユーザーコードから叩けるようにするのが先か。
- [[mimiumのレコード型|レコード型]]：要件定義はほぼできたし、他の機能への依存も特になし。デフォルト引数の実装を無視すればとりあえず進められそう
。
- 配列型の実装：GC問題片付けばなんとか？固定長と可変長の切り替えをどうするかを考えたい。


## その他雑に実装したい機能


- ステージ0で`self`を使えるようにする方法として、`render:({seq:()->a,count:float})->[a]`というプリミティブを導入したい
	- めちゃめちゃでかい配列リテラルになった時に対応できるのか要検討
- UIにToggleとButtonを足す
	- 数値の列挙でもいいのでumenuも足したい
- マクロでUnix Timeを取れるようにしたい
	- [x] noiseのシードをコンパイル時に確定させたい
		- stateful closure in stage0で解決