In MP, a datum is usually communicated as a node packet and composite data as an expression tree. While this approach works well for objects having an heterogeneous and tree-like syntactic structure, it is unnecessarily inefficient for objects which have a more homogenous format (like vectors, matrices, polynomials, etc.). For such objects, we would like to get away from an expression tree representation and support representations which more naturally (and efficiently) reflect the object's internal representation and which avoid the overhead incurred by having to communicate a node packet header for each datum. In addition to the obvious advantage that there would be less data to transmit and to buffer inside an application's interface, parsing is simpler and more efficient, for now blocks of homogeneous data (without headers) can be moved between the interface and the application's internal data structure using efficient memory move operations.
However, communicating headerless data requires establishing mechanisms which ensure that the data can still be correctly parsed. Within the context of MP we considered the following approaches:
Approach (1) has the advantage of being most efficient (the amount of type information sent is minimal), but has the disadvantage that the task of parsing requires built-in knowledge of the definitions in a referenced dictionary. Clearly, this approach is inappropriate for a general protocol. Consequently, we decided to pursue (2). As we will show, a careful design of the grammar for the self-describing encoding of headerless data results in mechanisms which are almost as compact as (1) and have the additional advantage that the communicated data can always be syntactically manipulated (e.g., stored, displayed, duplicated, etc.). In other words, the realization of approach (2) is our solution to the efficiency versus generality problem on this syntactic level.