From 94ce72ba47e8544f8fe313b7efe85e921df8abdf Mon Sep 17 00:00:00 2001 From: "Matsuura Tomoya(Windows)" Date: Sat, 16 Nov 2024 23:44:13 +0900 Subject: [PATCH] [obsidian] vault backup: 2024-11-16 23:44:13[ --- content/mimium新内部表現の構想.md | 2 +- ...計算を命令型VMインストラクションで表現する.md | 44 +++++++++++++++++++ content/音楽プログラミング言語の形式化.md | 2 + 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 content/多段階計算を命令型VMインストラクションで表現する.md diff --git a/content/mimium新内部表現の構想.md b/content/mimium新内部表現の構想.md index 5da45498..f3ea9337 100644 --- a/content/mimium新内部表現の構想.md +++ b/content/mimium新内部表現の構想.md @@ -5,7 +5,7 @@ date: "2023-09-20T17:12:17+0900" [[音楽プログラミング言語の形式化#mimium と 多段階計算]] -[[多段階計算]]を取り入れたい +[[多段階計算]]を取り入れたい → [[多段階計算を命令型VMインストラクションで表現する]] とりあえず[[The w-calculus a synchronous framework for the verified modelling of digital signal processing algorithms|W Calculus]]を自然に拡張してみる。 $W$ Calculusとmimiumの形式は似ているが、主に2つの違いがある。 diff --git a/content/多段階計算を命令型VMインストラクションで表現する.md b/content/多段階計算を命令型VMインストラクションで表現する.md new file mode 100644 index 00000000..2275e21b --- /dev/null +++ b/content/多段階計算を命令型VMインストラクションで表現する.md @@ -0,0 +1,44 @@ +#mimium #programming-language + +related: [[mimium新内部表現の構想]] [[mimiumの中間表現を考える]] [[mimiumのMIRコンパイル過程を真面目に考える]] + +[[多段階計算]]を[[mimium]]の中にマクロとして取り入れたい. + +既存の多段階計算の文献は基本的に[[操作的意味論]]を定義しているため、そのままナイーブに実装するならツリーウォークインタプリタや[[CEKマシン]]的なものにならざるを得ない。 + +ただmimiumでは既にVMのフォーマットを定めており、マクロ展開やコンパイル時計算をMIRレベルで展開する全く別の処理系をもう一つ作らなければいけないのか?という悩みがある。 + +一つの方向として、多段階計算の意味論を丸ごとVMの命令列の中に組み込むことはできないだろうか?というのを考える。 + +## 追加命令 + +`incl_level / decl_level ` のような命令があるとする + +VMは最初、マクロ評価時に自分の現在の評価ステージを0として評価スタート + +VMは、命令記録モードと実行モードの2種類で、現在の評価ステージが0のときに実行モードになる + +mainプログラムの先頭はマクロ展開のため必ずincl_levelからスタート=命令記録モードから開始 + +命令記録モードでは、decl_levelがでてくるまでバッファに実行した命令をコピーし続ける +decl_levelでレベル0になったら...うーん + +```ocaml +let n = 100 in +let m = 200 in + ~( let addc x y = &(~x + ~y) in addc &n &m ) +``` + +`addc`の型は`&int -> &int` + +CodeもEscapeもネストできる構造なんだから命令型に直すとなにかしらのスタック構造を操作するものになるはず +Escapeはあくまで埋め込むだけで評価をするわけじゃないんだよな + +`&(~x + ~y)`ここだけ取り出すとどうだろう + +``` +mov 1 x +mov 2 y +add 1 1 2 //最後は必ずこうなるわけで +``` + diff --git a/content/音楽プログラミング言語の形式化.md b/content/音楽プログラミング言語の形式化.md index db63b83b..96c88d75 100644 --- a/content/音楽プログラミング言語の形式化.md +++ b/content/音楽プログラミング言語の形式化.md @@ -20,6 +20,8 @@ date: "2023-09-20T01:33:51+0900" [[mimium新内部表現の構想]]での検討材料 + + こういうのが計算できなかった(要するにfixpointの中で`self`を使うと必要な`self`のサイズを確定できない) ```rust