We have constructed a sparse model that meets most of the criteria described above: a program is built out of boxes (a box is similar to a process/object/monitor) and a box is built out of procedures (which are similar to monitor-procedures). No specific communication or synchronization mechanism, except procedure call, is built into this model. The traditional schemes for communication using bounded or unbounded channels, semaphores, and accesses to shared memory can be encoded as boxes in our model. We propose two distinct kinds of procedures, to model sequential and concurrent aspects of programming. Our programming model allows for disciplined interactions between these two types of procedures.
A program can be designed and understood box by box, and each box by its procedures (a transaction, in a database sense, is a chain of procedure invocations). Thus, a programmer has to understand only a single thread of control, associated with invocation of one procedure. Yet, the programming model permits concurrent executions of the procedures and we have devised an efficient implementation strategy. One of the reasons for introducing two different kinds of procedures is to obtain an appropriate theory that permits a greater degree of concurrency to be exploited.