我正在研究 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
我在做什么有名字吗?这是一个好方法吗?听说函数式语言有一个概念叫Monads,听上去很像但又不一样。使用单子是更好的方法吗?如果是这样,我该如何修改它以使用单子?