【发布时间】:2016-08-29 14:37:31
【问题描述】:
假设我有一个像这样天真的实现的函数:
quadratic a b c = (ans1, ans2)
where
ans1 = ((-b) + sqrt (b * b - 4 * a * c)) / (2 * a)
ans2 = ((-b) - sqrt (b * b - 4 * a * c)) / (2 * a)
有多个相同的子表达式。在不阅读核心的情况下,我如何知道是否正在发生公共子表达式消除以及其中的哪些部分?
【问题讨论】:
-
我认为“通过阅读核心”是答案。你为什么不想那样做?您可以通过插入来自
Debug.Trace的函数来猜测,但我不会依赖它。 -
@jberryman 是否有经验法则表明哪些代码可能被优化或不可能被优化?
-
不相关但不确定性是用列表而不是元组建模的。
quadratic a b c = [ans1, ans2] where ...
标签: haskell ghc compiler-optimization