  Reactive programming is a programming paradigm whereby programs are
internally represented by a dependency graph, which is used to automatically
(re)compute parts of a program whenever its input changes. In practice reactive
programming can only be used for some parts of an application: a reactive
program is usually embedded in an application that is still written in ordinary
imperative languages such as JavaScript or Scala. In this paper we investigate
this embedding and we distill "the awkward squad for reactive programming" as 3
concerns that are essential for real-world software development, but that do
not fit within reactive programming. They are related to long lasting
computations, side-effects, and the coordination between imperative and
reactive code. To solve these issues we design a new programming model called
the Actor-Reactor Model in which programs are split up in a number of actors
and reactors. Actors and reactors enforce a strict separation of imperative and
reactive code, and they can be composed via a number of composition operators
that make use of data streams. We demonstrate the model via our own
implementation in a language called Stella.
