我对 haskell 纯函数的理解是,它们可以实现缓存等性能优化(因为纯函数每次都会为相同的输入返回相同的结果)。frege 的纯函数有哪些性能优化?
问问题
118 次
1 回答
1
当然不是缓存。我不知道有任何语言会自动执行此操作,并且有充分的理由。
我们目前所做的是内联、减少和消除某些价值构造和解构。例如,当您有:
case (\a -> (Just a, Just a)) 42 of (Just b, Just c) -> [c,b]
编译器只生成代码来构造列表
[ 42, 42 ]
乍一看,这看起来不是很有用,因为肯定没有人会编写如此臃肿的代码。但是,请考虑 lambda 表达式可能是内联某些其他函数的结果。事实上,在像一元代码这样高度抽象的代码中,(>>=) 运算符的扩展通常会导致可以通过这种方式优化的代码。
虽然在某些情况下内联和减少 beta 是好的,但必须注意不要过度使用,以免导致代码膨胀。尤其是在JVM环境中,拥有庞大的函数(即方法)是不利的。JIT 可以并且将会为小方法做得很好。
于 2015-11-10T22:27:07.797 回答