  Communicating systems comprise diverse software components across networks.
To ensure their robustness, modern programming languages such as Rust provide
both strongly typed channels, whose usage is guaranteed to be affine (at most
once), and cancellation operations over binary channels. For coordinating
components to correctly communicate and synchronise with each other, we use the
structuring mechanism from multiparty session types, extending it with affine
communication channels and implicit/explicit cancellation mechanisms. This new
typing discipline, affine multiparty session types (AMPST), ensures
cancellation termination of multiple, independently running components and
guarantees that communication will not get stuck due to error or abrupt
termination. Guided by AMPST, we implemented an automated generation tool
(MultiCrusty) of Rust APIs associated with cancellation termination algorithms,
by which the Rust compiler auto-detects unsafe programs. Our evaluation shows
that MultiCrusty provides an efficient mechanism for communication,
synchronisation and propagation of the notifications of cancellation for
arbitrary processes. We have implemented several usecases, including popular
application protocols (OAuth, SMTP), and protocols with exception handling
patterns (circuit breaker, distributed logging).

Programming Languages