  Choreographic programming is a paradigm for writing distributed applications.
It allows programmers to write a single program, called a choreography, that
can be compiled to generate correct implementations of each process in the
application. Although choreographies provide good static guarantees, they can
exhibit high latency when messages or processes are delayed. This is because
processes in a choreography typically execute in a fixed, deterministic order,
and cannot adapt to the order that messages arrive at runtime. In
non-choreographic code, programmers can address this problem by allowing
processes to execute out of order -- for instance by using futures or reactive
programming. However, in choreographic code, out-of-order process execution can
lead to serious and subtle bugs, called communication integrity violations
(CIVs).
  In this paper, we develop a model of choreographic programming for
out-of-order processes that guarantees absence of CIVs and deadlocks. As an
application of our approach, we also introduce an API for safe non-blocking
communication via futures in the choreographic programming language Choral. The
API allows processes to execute out of order, participate in multiple
choreographies concurrently, and to handle unordered or dropped messages as in
the UDP transport protocol. We provide an illustrative evaluation of our API,
showing that out-of-order execution can reduce latency by overlapping
communication with computation.
