All checks were successful
Build / build (push) Successful in 17m35s
1.8 KiB
1.8 KiB
#memo #mimium
- 多段階計算を命令型VMインストラクションで表現したい
- 一時期考えていたが、あんまり筋が良くないのでやめた
シンプルに構文木レベルでのインタプリタを別途作ることで実現できそう。
課題
- 組み込みの関数の型情報がマクロ用(レベル0)とVM用(レベル1)で分かれているので、両方にあることを別々に宣言しなければならない
- 逆に、ベクターのappend・removeや文字列操作など、メモリを確保する操作はレベル0でのみ利用できる組み込み関数として制限すると、便利かもしれない
- 逆に、
self
やdelay
はレベル1でのみ利用できる関数とする - レベル0,1両方で利用できるpersistentなモジュールは、上記2種類のいずれも使わず、かつescapeとBracketも利用しないものであればよい、ということになる
- もともとディレイの最大サイズはリテラルで指定しなければいけないという問題があったが、これを
make_delay(size:float)-> <(float,float)->float>
(レベル0で最大時間を指定すると、入力と遅延時間をとる関数のコードを返すという関数)にできるかも- ただ、これやるとディレイが絡む関数はすべてレベル0定義になるのかな
- なんかそれよりは、数値プリミティブ型に常に範囲をつけるとかのほうが筋がいいかも
fn fbdelay(max_time){
`|input,time,fb| {
(input + self*fb, time) |> make_delay!(max_time)
}
}