gpt4 book ai didi

haskell - Haskell 优化器是否利用 memoization 在范围内重复调用函数?

转载 作者:行者123 更新时间:2023-12-03 15:30:04 24 4
gpt4 key购买 nike

考虑这个函数:

f as = if length as > 100 then length as else 100

由于该函数是纯函数,因此很明显两个调用的长度相同。我的问题是 Haskell 优化器是否将上面的代码转换为以下代码?
f as = 
let l = length as
in if l > 100 then l else 100

如果是这样,那么哪个级别设置启用它?如果没有,那为什么?在这种情况下,内存浪费不是 this answer 中解释的原因。 ,因为一旦函数执行完成,引入的变量就会被释放。

请注意,这不是 this question 的副本由于本地范围,因此它可能会得到一个完全不同的答案。

最佳答案

GHC 现在做 some CSE by default ,如 -fcse标志已打开。

On by default.. Enables the common-sub-expression elimination optimisation. Switching this off can be useful if you have some unsafePerformIO expressions that you don't want commoned-up.



但是,它是 conservative ,由于引入共享的问题(因此空间泄漏)。
CSE 通行证获得 bit better虽然(和 this )。

最后,请注意有一个完整的 CSE 插件。
  • http://hackage.haskell.org/package/cse-ghc-plugin

  • 如果您有可以从中受益的代码。

    关于haskell - Haskell 优化器是否利用 memoization 在范围内重复调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15084162/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com