From a5e33b30b344e1fcf9c6bd3763f9a3867eb86385 Mon Sep 17 00:00:00 2001 From: "Matsuura Tomoya(Windows)" Date: Sun, 20 Jul 2025 10:34:06 +0900 Subject: [PATCH] [obsidian] vault backup: 2025-07-20 10:34:06[ --- content/mimium.md | 7 ++++++- content/mimiumと多段階計算.md | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 content/mimiumと多段階計算.md diff --git a/content/mimium.md b/content/mimium.md index a6156fef..2abf52b0 100644 --- a/content/mimium.md +++ b/content/mimium.md @@ -30,7 +30,12 @@ https://github.com/mimium-org/mimium-rs - [[mimiumのMIRコンパイル過程を真面目に考える]] - [[lambda-mmm(実用版)]] - [[mimiumグローバル環境評価について]] -- [[多段階計算を命令型VMインストラクションで表現したい]] + + +## マクロ + +- [[mimiumと多段階計算]] + ### ランタイム周りについて diff --git a/content/mimiumと多段階計算.md b/content/mimiumと多段階計算.md new file mode 100644 index 00000000..ab410b45 --- /dev/null +++ b/content/mimiumと多段階計算.md @@ -0,0 +1,33 @@ +#memo #mimium + + + +- [[多段階計算を命令型VMインストラクションで表現したい]] + - 一時期考えていたが、あんまり筋が良くないのでやめた + + +[Implement multi-stage computation intepreter by tomoyanonymous · Pull Request #136 · mimium-org/mimium-rs · GitHub](https://github.com/mimium-org/mimium-rs/pull/136) + +シンプルに構文木レベルでのインタプリタを別途作ることで実現できそう。 + + +## 課題 + +- 組み込みの関数の型情報がマクロ用(レベル0)とVM用(レベル1)で分かれているので、両方にあることを別々に宣言しなければならない + - 逆に、ベクターのappend・removeや文字列操作など、メモリを確保する操作はレベル0でのみ利用できる組み込み関数として制限すると、便利かもしれない + - 逆に、`self`や`delay`はレベル1でのみ利用できる関数とする + - レベル0,1両方で利用できるpersistentなモジュールは、上記2種類のいずれも使わず、かつescapeとBracketも利用しないものであればよい、ということになる +- もともとディレイの最大サイズはリテラルで指定しなければいけないという問題があったが、これを`make_delay(size:float)-> <(float,float)->float>`(レベル0で最大時間を指定すると、入力と遅延時間をとる関数のコードを返すという関数)にできるかも + - ただ、これやるとディレイが絡む関数はすべてレベル0定義になるのかな + - なんかそれよりは、[[数値プリミティブ型に常に範囲をつける]]とかのほうが筋がいいかも + +```rust +fn fbdelay(max_time){ + `|input,time,fb| { + (input + self*fb, time) |> make_delay!(max_time) + } +} +``` + +- +