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