首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSA中的副作用追踪

SSA中的副作用追踪
EN

Stack Overflow用户
提问于 2012-07-08 23:36:28
回答 1查看 181关注 0票数 0

我正在研究Java字节码的优化器,并决定使用SSA。然而,大多数优化要求所有操作都是纯函数的,所以为了处理副作用,我决定为每个可能有副作用的操作添加额外的不透明状态参数和返回值。这将防止对有副作用的操作进行优化或重新排序。例如,忽略异常处理,您会得到如下伪代码。

代码语言:javascript
复制
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的概念,听起来很相似,但并不相同。使用monads是更好的方法吗?如果是这样,我如何将其修改为使用monad?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-08 23:55:16

这篇文章太长了,无法放入评论中,但它并不是一个真正的答案。

公司称其为“内存边缘”,可能还有更多的名称。我听说它被称为“显式状态传递”,但谷歌似乎不同意。

但我不同意你的前提--大多数SSA优化在存在副作用的情况下工作得很好(有时可能有点笨拙)。不起作用的是使用图形表示而没有明确的副作用(很明显,顺序会消失)。但是你只需要做一些事情来明确这个顺序- SSA也可以作为一个“操作列表”工作,其中顺序是简单的固定的(可能在显式的重新排序阶段除外),但在这种情况下,它仍然可以更容易地使副作用显式(导致更少的特殊情况在优化等)。

这是一种很好的方法。我不知道它与Monad有什么关系,我不理解它们,可能永远也不会。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11384358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档