为什么我会选择不使用clojure 1.5减速器功能?

Kev*_*vin 17 clojure

我正在阅读1.5中介绍的有关clojure reducer的内容:https://github.com/clojure/clojure/blob/master/changes.md.我的理解是它们是对现有map/filter/reduce函数的性能增强.因此,如果是这种情况,我想知道他们为什么在新的命名空间中,并且不要简单地替换现有的map/reduce/filter实现.换句话说,为什么我选择使用新的Reducer功能呢?

编辑:

针对初步的两个答案,这里有一个澄清:

我将在这里引用发行说明:

Reducers提供了一组用于处理集合的高性能函数.实际的折叠/减少算法通过减少的集合来指定.这允许每个集合定义减少其内容的最有效方法.

这对我来说听起来并不像新的map/filter/reduce函数本质上是并行的.例如,在发行说明中进一步说明:

它包含一个新的函数fold,它是一个并行的reduce + combine

因此,除非发行说明写得不好,否则在我看来有一个新功能,fold,它是并行的,而其他功能是特定于集合的实现,旨在为特定集合产生最高性能.我只是误读了这里的发行说明吗?

om-*_*nom 7

前言:你有问题,你将使用并行,现在问题有两个你.

从某种意义上说,它们是替代品,它们可以并行工作(与普通的旧序列图等相比).并非所有操作都可以并行化(在许多情况下,操作必须至少是关联的,还要考虑延迟序列和迭代器).此外,并非每个操作都可以有效地并行化(总是存在一些协调开销,有时开销大于并行化增益).


Joe*_*ann 6

在某些情况下,它们无法取代旧的实现.例如,如果您有无限的序列,或者您实际上需要对集合进行顺序处理.