In COP, the message has been tied to the operator, and the operator consumes and returns only complete messages to the application. Some applications may find this unnecessarily restrictive; for example, a streaming function may wish to take individual words from the interface, perform some operation, and write a single word back out.
Fortunately, this ability can be specified with no loss of generality by specifying `:m 1' on a scheduled routing substrate. However, using a dynamic routing substrate, this specification would result in many one- or two-word messages, perhaps doubling the load on the network as a result of the per-message headers. For dynamic routing, a fairer scheme would involve larger messages, and a COP interface that allowed the header and the message body to be read separately. This style of interface has not currently been implemented, since the focus here is on scheduled routing, where the existing interface is adequate.
Complicating the picture further is the fact that some operators, such as cshift, require the implementation to read and write the message in an interleaved fashion. A read-header/read-body interface would have to be carefully written, by, e.g., providing a layer of buffering between the interface register and the application to handle reading data during a write-data-word function. However, this limitation is not absolute for a communications language, and simply requires some extra semantics to be defined for the language.