Awesome Open Source
Awesome Open Source
Sponsorship

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.

Installation

using Pkg
Pkg.add("Transducers")

Related packages

  • ThreadsX.jl implements Base-like API based on Transducers.jl. It is highly recommended for using threaded computation without fully switching to transducers.
  • LazyGroupBy.jl wraps Transducers.Groupby in an easy-to-use syntax.
  • DataTools.jl is a set of tools for data analysis built on top of Transducers.jl.
  • 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.

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
julia (583
high-performance (179
parallel (131
distributed-computing (79

Find Open Source By Browsing 7,000 Topics Across 59 Categories