【发布时间】:2026-02-22 11:15:01
【问题描述】:
我正在开发 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,听上去很像,但又不一样。使用单子是更好的方法吗?如果是这样,我该如何修改它以使用单子?
【问题讨论】:
标签: compiler-optimization side-effects state-monad ssa