Erlang's powerful communication model allows us to build high-level
concurrent systems. These can, however, harbour subtle communication
errors less severe than global deadlock or crashes: messages never
received can degrade performance and consume swaths of memory. We
believe that some of these errors can be quickly detected with
static analysis. We have built a prototype tool which operates at
the Core Erlang level to assist identification of some of these
errors.
We present a fragment of Erlang's type system as a subtyping
relation, following up with type inference functions for a portion
of Core Erlang's patterns, guards, and message syntax. The
implementation of the prototype is detailed, noting specific
behaviours of the Erlang compiler and nuances of Core Erlang's
syntax along the way, some of which complicate our analysis.
Although our tool is at a very early stage of development, we show
examples of the errors we can identify, despite using a considerable
over-approximation in our type inference system. After comparing our
tool to other work in the Erlang community and beyond, we reflect on
the current state of the prototype, before considering further
applications of our concept of message compatibility.
Full Document