2015-11-10 59 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可以並且會爲小方法做出很好的工作。