The Streaming Future
Streaming is a fundamental paradigm for describing data transformation pipelines. However, despite its importance, our understanding of streaming is often "I know it when I see it".
Frameworks such as ZIO have pioneered a set of deeply principled laws for describing the behavior of asynchronous and concurrent programs in terms of fibers and workflows run by those fibers.
These laws describe the behavior of fibers and provide strong guarantees around properties such as interruptibility and resource safety. As a result, ZIO 1 and ZIO 2 have almost identical semantics despite having completely different runtimes.
In contrast, the behavior of streaming libraries is much more ad hoc. Libraries such as ZIO Stream provide a variety of powerful operators but there is no fundamental set of primitives that those operators are implemented in terms of.
In particular, concurrent operators typically cannot be implemented in terms of other streaming abstractions and instead must be implemented in terms of lower-level data types such as queues. This results in code that is less powerful, less efficient, and more error-prone than code written in terms of higher-level data types.
In this talk, you will explore the progress that ZIO 2 has made in this area with the introduction of channels, along with recent work to take these ideas even further in the next version of ZIO.
You will develop the idea that rather than streams being a higher-level application built on top of traditional effect systems, streams are fundamental, and traditional effect systems are just a special case of streams.
By the end of this talk, you will have a deeper understanding of streams, what you should expect from your streaming library, and what ZIO is doing to deliver against that.