"Simplicity is prerequisite for reliability."
|--Edsger W. Dijkstra
Location-transparency, serializable event-handling, and non-blocking semantics of sends, make the actor model a powerful foundation for building distributed systems. However, the actor model has several important limitations, which only become apparent when building larger systems. First, actors cannot simultaneously contain multiple message entry points. All messages must arrive through the same
receive block. Consequently, two different protocols cannot reuse the same message type, and must be aware of each other. The main example where we saw this was the
Identify message, which required users to incorporate a unique token into the message. Second, actors cannot await specific combinations of messages. For example, it is cumbersome to simultaneously send a request message to two target actors, and proceed after both replies arrive. Third, the
receive statement is not a first-class citizen. Event...