We explore the use of expression templates for the zero-overhead composition of small units of DSP.
Our primary aim is to approach the low-friction, fine-granularity expressiveness of DSL systems like FAUST, while staying fully within the confines of C++ and allowing the full use of its type system. With this, the final graph construct is a simple C++ class, which can be instantiated and exercised without any scaffolding or external tooling. The conceptual machinery can be uniform, where tunable algorithm parameters quickly reduce to ordinary graph data and are processed themselves in one flat graph space.
The idea naturally extends to the processing of arbitrary data types through the graph - such as abstract control types, and types supporting block-based and frequency-domain processing. Further, it is trivial to embed the resulting classes into plugins via template adapters. Finally, the expression-template paradigm enables global optimization of the result.
When using such a system, development can be a very low-friction process, granularity can be fine, and the exact same user code can be embedded into both real-time and offline contexts without special affordances.