An important requirement that drives many of the design decisions discussed here is that an MP Tree should always be parsable at the syntactic level. This means that a receiver may have no understanding of the dictionaries (i.e., semantics) involved, but should still be able to parse, manipulate, and echo the MP Tree (that is, process the tree at the syntactic level).
An implication of this decision is that MP does not support purely static definitions of composite data objects in a dictionary. By contrast, this is exactly the approach taken by XDR [4] in which an object is statically defined in a file and an object-specific filter routine is responsible for encoding it on the sending side. In this scenario, only data is transmitted and no type or structuring information is supplied; rather, this information is hardcoded into the filter. The sender assumes the receiver knows the type of data arriving and has a corresponding object-specific filter which can decode the incoming data.
In MP, on the other hand, a composite object must be transmitted either as an MP Tree using only node packets or using a prototype to describe the structure and content of the object, with the (usually headerless) "pure" data from the object following the prototype. The use of prototypes does not preclude the possibility of writing efficient routines for sending and receiving mathematical objects. Instead of decoding each datum by interpreting the prototype, a receiver can simply check the entire prototype to ensure that the incoming data meets the expectations of a compiled read routine. The sending side is simpler: An object-specific routine may efficiently marshall the user's data structure, including sending the prototype describing the object.
There are several competing goals in specifying the syntax and semantics of prototypes:
Section 2 briefly reviews the general syntax rules governing data communicated by MP and motivates the need for prototypes. The formal definition of prototypes is given in section 3. A number of examples are also given to make the definitions more concrete and to further illustrate the advantages of this approach. A short discussion of the use of tree specifications with respect to prototypes is given in section 3.3.
Notice that we do not define in this report how particular mathematical objects such as polynomials or matrices should be represented. This is done in the dictionaries covering the mathematical areas where these objects occur. We furthermore do not define in this report formal mechanisms for mapping syntactic data structures to MP encodings. This is done in the report describing the MP Data Definition Language (DDL) []. Instead, what we describe here are the means which MP provides to develop efficient and compact encodings of these objects.