Goals

The goal of this discussion is to choose a new abstraction layer for representing our concurrent programming logic. Jane Street Async's existing abstractions (Pipes + *vars) have proven to be unprincipled enough to repeatadly shoot us in the foot. We would prefer to use a more principled abstraction layer that will enable us to write code with clearer semantics, and hopefully provide us tools for analyzing our concurrent structure/control flow in order to better analyze changes and find bugs earlier.

Anyone on the team is welcome to propose an abstraction we should use. The proposal should focus on what is gained by using the abstraction, how the abstraction can be instrumented/tooled/analyzed, and should provide some pseudo code to show how we would actually use the abstraction in our code base (best to choose a real example).

Former issues requesting features in this area: https://github.com/CodaProtocol/coda/issues/231

Proposals

OTP/Erlang Style

Alternatives w/o Formal Proposals