我对haskell纯函数的理解是,它们支持缓存等性能优化(因为纯函数每次都为相同的输入返回相同的结果)。frege的纯函数进行了哪些性能优化?
发布于 2015-11-11 06:27:08
当然不是缓存。我不知道有哪种语言会自动实现这一点,而且有很好的理由。
我们目前所做的是内联、beta缩减和消除某些值构造和解构。例如,当您拥有以下内容时:
case (\a -> (Just a, Just a)) 42 of (Just b, Just c) -> [c,b]编译器只是生成代码来构造列表
[ 42, 42 ]乍一看,这看起来不是很有用,因为肯定没有人会写这样臃肿的代码。但是,考虑到lambda表达式可能是内联某些其他函数的结果。事实上,在像一元代码这样的高度抽象的代码中,(>>=)运算符的扩展通常会导致代码可以通过这种方式进行优化。
虽然内联和beta缩减在某些情况下是好的,但必须注意不要过度使用,以免代码膨胀。特别是在JVM环境中,拥有庞大的函数(即方法)是一个缺点。JIT能够并将为小方法做很好的工作。
https://stackoverflow.com/questions/33640017
复制相似问题