Grokking ZIO

What is ZIO? (In layman’s terms)

Modeling Effects in FP

Core Capabilities and Evolution of ZIO

  • Starting out as an effect type, but embracing an emphasis on concurrency problems (late 2017)
  • Committing to statically-typed errors by adding an error type, much like the Either[L,R] does, but also embracing subtyping and covariance (2018 with contribution by Weim Zine Elabidine)
  • Developing an asynchronous queue (contributions by Artem Pyanykh and Pierre Ricadat) and adding an entire ZManaged subsystem for reliably handling resource allocation and cleanup, plus introducing a ZIO Stream library (contributions by Itamar Ravid for both in late 2018)
  • Introduction of a third “environment” type, thus completing the ZIO[R, E, A] signature that we know today (late 2018, unveiled by De Goes with his “Death of Tagless Final” talk with contributions by Weim Zine Elabidine)
  • Addition of STM (Software Transactional Memory) for handling concurrent changes across two or more concurrent structures (2019 with contributions by Weim Zine Elabidine and Dejan Mijic)
  • ZIO Test testing framework, both enabling proper testing of effects and concurrency, but also solving very tough problems that other testing frameworks struggled at (2018, project led by Adam Frasier)
  • Adding a sort of “dependency injection” system for the environment types (the R in ZIO[R,E,A]) that handles the interdependency of services with ZLayer (2019)
  • ZIO 1.0 released in August 3, 2020 after a lot of work solving and completing the structured concurrency problem.
  • Lots of performance enhancement in the ZIO Runtime System (see John De Goes presentation in April 2021)
  • Improvement and abstraction of ZQueue with the addition of ZHub for a pub/sub model (see this great ZIO World presentation by Adam Fraser)
  • An elegant internal reworking of ZStreams, building a unified model for constructing, transducing (pipelining), and consuming (sinking) a stream.
  • Extreme simplification of the ZLayers system, moving away from the confusing Module Pattern to the sleeker Service Pattern 2.0 (see this excellent presentation by Kit Langton from ZIO World 2021)
  • Even better simplification of the new ZLayer Service Pattern by completely eliminating the need for the Has keyword (December 2021, unveiled in ZIO 2.0-RC1)
  • Complete removal of the entire ZManaged resource management system, greatly simplifying the overall API and reducing the size and complexity of the core codebase! (March 2022, unveiling in ZIO 2.0-RC3)
  1. ZIO started with being a fairly simple effect type, and has evolved over several years and many people's’ great ideas and contributions to become a comprehensive system for effects, concurrency, queues topics and streams, testing, resource management and dependency injection, scheduling, etc.
  2. This evolution has included an aggressive and almost merciless refactoring of things, resulting in a ZIO 2.0 that both simpler, faster and more powerful.

Impressive Multiplatform Support

The Inner ZIO Ecosystem

The Outer ZIO Ecosystem

Should I use ZIO in my current/upcoming project?

Is ZIO better than X?

Topical Starting-points for Beginners

  1. How to really use Option (and Try and Either), teaching idiomatic use, understanding flatMap and for-comprehensions and ultimately monads. Video link here.
  2. Scala and the three implicits, teaching implicit classes and parameters, typeclasses and the “pimp my library” pattern. Video link here.

--

--

--

Life-long learner, foodie and wine enthusiast, living in Austin, Texas.

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

The DevOps “Club 50”

My first two weeks of the Google Summer of Code

Real Time Video Using Agora Flutter SDK

Building Python Barcode Extension with DBR 5.2 for Linux

European Commission needs IT professionals like YOU!

Managing Passwords and Application Secrets: Common Anti-Patterns

A New Coder’s Cold Feet

Configuring JetBrains PyCharm for your Snowpark Python Development

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Murray Todd Williams

Murray Todd Williams

Life-long learner, foodie and wine enthusiast, living in Austin, Texas.

More from Medium

Scala & the Three Implicits

Classic image of the three witches

Scala 3: “Erased” Definitions

Road to ZIO[n]: Chapter 4, the Persistence layer

The motivation of the actor model for distributed systems