Scala中的curried,partial applied和'normal'函数之间的性能特征是什么?

时间:2016-04-13 15:11:34

标签: performance scala benchmarking currying partial-application

我看了一下:Scala currying vs partially applied functions,但那里的答案更多地回答了Scala中currying,partial application和normal函数之间的功能和语义差异。

我有兴趣了解这些可用于功能的不同技术之间是否存在性能因素,即...

如果我们使用普通函数的性能作为基础:

def add3(a: Int, b: Int, c: Int) = a + b + c
add3(1, 2, 3)

然后比较:

// First
(add3 _).curried(1)(2)(3)

// Second
val add2 = add3(1, _: Int, _: Int)
val add1 = add2(2, _: Int)
add1(3)

// Third
def add3(a: Int)(b: Int)(c: Int) = a + b + c
add3(1)(2)(3)

如果我发现一些性能不佳的代码(无论是在速度还是内存使用方面),我可能想要注意的是什么?我看到在所述代码段中发生了很多currying或部分应用?< / p>

例如,在Haskell中,我会看看有多少个thunk正在生成和闲逛。我认为Scala使用类似的方法来传递部分应用和curried函数,Scala如何处理这些事情的细节将是很有价值的。

0 个答案:

没有答案