私はJavaバイトコードのオプティマイザーに取り組んでおり、SSAを使用することにしました。ただし、ほとんどの最適化ではすべての操作が純粋に機能する必要があるため、副作用を処理するために、副作用を引き起こす可能性のあるすべての操作に不透明な状態パラメーターと戻り値を追加することにしました。これにより、副作用のある操作の最適化や並べ替えを防ぐことができます。たとえば、例外処理を無視すると、この擬似コードのようなものが得られます。
function arguments: x1, e1
if x1 != 0
x2 = add(x1, 3)
x3, e2 = invoke(foo, x2, e1)
x4 = phi(x1, x3)
e3 = phi(e1, e2)
return x4, e3
私がしていることの名前はありますか?それは良いアプローチですか?関数型言語にはモナドと呼ばれる概念があると聞きました。これは似ているように聞こえますが、同じではありません。モナドを使用する方が良いアプローチですか?もしそうなら、どうすればモナドを使用するようにこれを変更できますか?