JuliaFolds/Transducers.jl

Efficient transducers for Julia

Julia

441

1,020 commits

updated Oct 18, 2026

See the code

See what people are saying

README

Transducers.jl: Efficient transducers for Julia

Stable documentation Latest documentation Travis Status codecov.io Coverage Status Aqua QA

Transducers.jl provides composable algorithms on "sequence" of inputs. They are called transducers, first introduced in Clojure language by Rich Hickey.

Using transducers is quite straightforward, especially if you already know similar concepts in iterator libraries:

using Transducers
1:40 |> Partition(7) |> Filter(x -> prod(x) % 11 == 0) |> Cat() |> Scan(+) |> sum

However, the protocol used for the transducers is quite different from iterators and results in a better performance for complex compositions. Furthermore, some transducers support parallel execution. If a transducer is composed of such transducers, it can be automatically re-used both in sequential (foldl etc.) and parallel (reduce etc.) contexts.

See more in the documentation.

If you are interested in parallel programming in general, see also: A quick introduction to data parallelism in Julia

Installation

using Pkg
Pkg.add("Transducers")

Following packages are supported by Transducers.jl. In particular, they rely on the Transducers.jl protocol to support multi-threading, multi-processing, and GPU-based parallelism.

  • Folds.jl implements parallelized Base-like API based on Transducers.jl. This package can be used without knowing anything about transducers.
  • FLoops.jl provides for-loop syntax for using the loop executed by the Transducers.jl protocol.
  • BangBang.jl implements mutate-or-widen API. This is the foundation of typocalypse-free map/collect-like functions. Functions such as append!!, merge!!, mergewith!!, union!!, etc. are useful as a reducing function.
  • InitialValues.jl provides a framework for initial/identity element of folds.
  • MicroCollections.jl provides empty and singleton collections (arrays, dicts and sets). They are useful when writing transducers and reducing functions that construct a data collection.
distributed-computing
high-performance
iterators
julia
map-reduce
parallel
transducers

JuliaFolds/Transducers.jl

Efficient transducers for Julia

Julia

441

1,020 commits

updated Oct 18, 2026

See the code

See what people are saying

README

Transducers.jl: Efficient transducers for Julia

Stable documentation Latest documentation Travis Status codecov.io Coverage Status Aqua QA

Transducers.jl provides composable algorithms on "sequence" of inputs. They are called transducers, first introduced in Clojure language by Rich Hickey.

Using transducers is quite straightforward, especially if you already know similar concepts in iterator libraries:

using Transducers
1:40 |> Partition(7) |> Filter(x -> prod(x) % 11 == 0) |> Cat() |> Scan(+) |> sum

However, the protocol used for the transducers is quite different from iterators and results in a better performance for complex compositions. Furthermore, some transducers support parallel execution. If a transducer is composed of such transducers, it can be automatically re-used both in sequential (foldl etc.) and parallel (reduce etc.) contexts.

See more in the documentation.

If you are interested in parallel programming in general, see also: A quick introduction to data parallelism in Julia

Installation

using Pkg
Pkg.add("Transducers")

Following packages are supported by Transducers.jl. In particular, they rely on the Transducers.jl protocol to support multi-threading, multi-processing, and GPU-based parallelism.

  • Folds.jl implements parallelized Base-like API based on Transducers.jl. This package can be used without knowing anything about transducers.
  • FLoops.jl provides for-loop syntax for using the loop executed by the Transducers.jl protocol.
  • BangBang.jl implements mutate-or-widen API. This is the foundation of typocalypse-free map/collect-like functions. Functions such as append!!, merge!!, mergewith!!, union!!, etc. are useful as a reducing function.
  • InitialValues.jl provides a framework for initial/identity element of folds.
  • MicroCollections.jl provides empty and singleton collections (arrays, dicts and sets). They are useful when writing transducers and reducing functions that construct a data collection.
distributed-computing
high-performance
iterators
julia
map-reduce
parallel
transducers

Significant stargazers

Kirill Müller

1,110 followers · starred Jul 2023

Tim Holy

1,423 followers · starred Jul 2019

David Müller-Widmann

225 followers · starred May 2020

Sebastian Pfitzner

158 followers · starred Apr 2021