Создание параллельных представлений Scala с помощью X.par.view против X.view.par?

Согласно статье о параллельных коллекциях и поиске в Интернете, параллельные коллекции должны работать с представлениями, но я не понимаю разницу между

coll.par.view.someChainedIterations

а также

coll.view.par.someChainedIterations

Это похоже на coll.view.par теряет видимость коллекции:

scala> val coll = 1 to 3
coll: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)

scala> coll.view.par
res2: scala.collection.parallel.ParSeq[Int] = ParArray(1, 2, 3)

scala> coll.par.view
res3: java.lang.Object with scala.collection.parallel.ParSeqView[Int,scala.collection.parallel.immutable.ParSeq[Int],scala.collection.immutable.Seq[Int]] = $anon$1(1, 2, 3)

но я не знаю, почему. Это особенность или ошибка?

1 ответ

Решение

Это, вероятно, упущение, и должно быть исправлено.

par на последовательные представления могут быть реализованы путем вызова par на underlying коллекция, которая приведет к цепочке рекурсивных par звонки до underlying является строгой коллекцией, из которой изначально было получено представление. Если эта коллекция может быть эффективно превращена в соответствующую параллельную коллекцию, тогда вновь полученное параллельное представление может быть эффективно построено (см. Здесь).

Другие вопросы по тегам