Были некоторые мысли о создании параллельных трансдуцируемых процессов. Это отслеживается как CLJ-1553. В настоящее время мы не планируем решать эту проблему в Clojure 1.7, но хотели бы сделать что-то в Clojure 1.8.
Теперь можно настроить редюсер, который использует преобразователь в качестве нижней фазы редукции (наряду с более традиционным объединителем fns), но в идеале мы могли бы использовать концепцию «саморедуцируемости», воплощенную в постоянных векторах и картах, для поддержки преобразования. параллельно более естественным образом.
Скорее всего, прямо сейчас это станет своего рода функцией предубеждения, но еще многое предстоит решить.
Одной из проблемных областей является работа с формами kv - редукторы сделали здесь некоторые выборы, которые сложны или неудобны для преобразователей, поэтому их необходимо проработать.
Концепция заключается в простом параллельном выполнении вычислений. Существует несколько возможных реализаций:
clojure.core.reducers/fold, который похож на reduce, за исключением того, что его следует использовать только с функциями ассоциативной редукции, и он поддерживается протоколом, который использует древовидную структуру различных структур данных Clojure для распараллеливания вычислительных усилий. На самом деле он еще не подходит для преобразователя, но он удобен для преобразователя, и кажется, что в конечном итоге должна появиться версия с поддержкой преобразователя.
Последние выпуски core.async с поддержкой преобразователя экспортируют функцию под названием pipeline, которая распараллеливает преобразование канала → канала на основе преобразователя.