File name 19771017_Mesa_3.0_Compiler_Update_Mesa_Language_Changes.pdfInter-Office Memorandum
To Mesa Users Date October 17, 1977
From Ed Satterthwaite Location Palo Alto
Subject Mesa 3.0 Compiler Update Organization CSL
Mesa Language Changes
XEROX
Filed on: [MAXC] MESACOMPILER30.8RAVO
This release of the Mesa compiler introduces several changes of interest or importance to all
Mesa programmers. A number of changes in the language have been made. Some of these
will calise programs acceptable to previolls compilers to be rejected unless those programs
are modified. The reasons for maki ng sllch changes are the following:
To support new ways of describing configurations and binding them together.
To add new facilities to the language.
To prepare for certain language extensions that are now fairly well understood and
for which preliminary designs exist.
Language Changes Related to the Binder
Overview
The following overview might be helpful in understanding the changes related to the new
binder. See the release summary for further references.
The binder produces a configuration, which is a collection of module instances. Each
module instance is represented by a global frame. Resolution of intermodular references is
based upon copying descriptor and pointer values from well-defined interfaces into these
global frames. More precisely, the binder produces configuration descriptions, which must
be "relocated" by the loader to produce an actual configuration.
There are two kinds of modules: DEFINITIONS and PROGRAM. The text of either kind implicitly
defines a type. In the case of a program module X, this is a frame type, denoted by
FRAME[X]. Values of this type are created in the (frame) heap, either by loading or by the
NEW operation. They cannot be embedded within larger aggregates but are referenced
indirectly through pointers. In the case of a DEFINITIONS module, the sequence of declarations
implicitly defines an interface type. There is no explicit name for this type, but it is much
like a record type with a field for each item in the interface. Instances of interface types,
called interface records, can appear only as components of global frames, where they are
anonymous.
A program can export an interface, in which case a (partially) initialized interface record is
created by the compiler. The initializing values represent procedures, signals, etc., declared
within the program. (These values are "relocated" and made instance-specific each time the
program is instantiated.) A program can also import an interface to gain access to externally
defined procedures and the like. In this case, the interface record is left uninitialized by the
Mesa 3.0 Compiler Update |