Transducers are transformations of "sequence" of input that can be composed very efficiently. The interface used by transducers naturally describes a wide range of processes that is expressible as a succession of steps. Furthermore, transducers can be defined without specifying the details of the input and output (collections, streams, channels, etc.) and therefore achieves a full reusability. Transducers are introduced by Rich Hickey, the creator of the Clojure language. His Strange Loop talk is a great introduction to the idea of transducers. Transducers.jl is an implementation of the transducers in Julia. Aiming to satisfy the high-performance needs of Julia users, Transducers.jl uses a formulation that is pure and aiding type-stability.
Features
- Sequential, multi-threaded, and distributed computation with a single API –- transducers (see overview of parallel processing)
- Support various table types including DataFrames.jl, StructArrays.jl, TypedTables.jl, etc. using Tables.jl and BangBang.jl API (see copy, etc.)
- OnlineStats.jl integration
- Robust typocalypse-free implementation of map, collect, and alike based on mutate-or-widen strategy implemented in BangBang.jl
- User interface-agnostic progress bar support based on ProgressLogging.jl that works with threaded and distributed processing
- Examples available