2015-11-10 27 views
1

我对haskell的纯函数的理解是,它们使像缓存这样的性能优化成为可能(因为纯函数每次都会为相同的输入返回相同的结果)。对于frege的纯函数,会发生哪些性能优化?frege pure函数和性能优化

回答

1

当然不会缓存。我不知道任何会自动执行此操作的语言,并且有充分的理由。

我们目前所做的是内联,缩减和消除某些价值构造和解构。例如,当你有:

case (\a -> (Just a, Just a)) 42 of (Just b, Just c) -> [c,b] 

编译器只是生成代码来构建列表

[ 42, 42 ] 

这看起来不是一见钟情非常有用的,因为肯定没有人会写出这样臃肿的代码。但是,考虑到lambda表达式可能是内联一些其他函数的结果。事实上,在像一元代码这样高度抽象的代码中,(>> =)运算符的扩展通常会导致可以用这种方式优化的代码。

虽然在某些情况下内联和β减少是有益的,但必须注意不要过度使用,以免代码膨胀。特别是在JVM环境中,具有巨大功能(即方法)是不利的。 JIT可以并且会为小方法做出很好的工作。