performance - Haskell:在性能方面,函数组合 (.) 与函数应用程序 ($)?

标签 performance haskell functional-programming

在 Haskell 中,当性能很重要并且使用美元或点都是有效的选择时,一个比另一个更好吗?一种会导致性能优于另一种吗?

例如,给定 (foo . bar. baz) valuefoo $ bar $ baz value ,一个比另一个快吗?

最佳答案

如果您使用优化(-O2)进行编译,GHC 几乎肯定会同时内联 .$并生产foo (bar (baz value))在这两种情况下(然后进一步优化)。 “几乎”是为了以防万一;内联是 GHC 所做的最基本的优化之一,.$非常简单,内联它们应该总是一个胜利,但我可能不会考虑一些特殊情况。 (当内联它们更难时,我能想到的一种情况是当它们被部分应用或传递给高阶函数时,但这不是给出的示例;或者可能有一个 rewrite rule 在内联之前触发并且只覆盖其中一种情况。)

但是,您始终可以使用例如在您的特定情况下对其进行测试。 Criterion .您还可以通过 asking GHC to output Core files 验证是否发生了内联。 .

关于performance - Haskell:在性能方面,函数组合 (.) 与函数应用程序 ($)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28926864/

相关文章:

performance - 由于 libc,Node.js 在 Ubuntu 12.04.3 上的性能较低

functional-programming - Dart:映射列表(list.map)

java - 如何在Java 8中访问流的元素,或返回流的一个元素?

haskell - 如果一种可以从另一种分配,是否可以比较两种类型?

scala - 我发现自己在大多数函数结束时反转累加器;我怎么能停下来?

android - Unity3D 修复了 TimeStep - Android FPS 问题

java - 如何对齐文件系统 I/O?

javascript - 性能效率.... Javascript中的条件语句和逻辑表达式

Haskell State monad 和 monadic 守卫

Haskell:从程序中的多个位置附加到列表