Guy L. Steele Jr. | 41 | LAMBDA: The Ultimate Declarative |
which the "reduction" prepass began to be referred to as a "compilation". The second, in August, was the excision of reduction from the PLASMA implementation, evidently because the size of the code was becoming unmanageable. [Hewitt 76] [McLennan 76] It is unfortunate that this experiment in semi-incremental compilation could not be continued.
{Note PLASMA Registers}
In fact, the current implementation of PLASMA happens to work in this way, since the implicit continuations are handled just like any other actor. However, it does not presently take much advantage of this fact since there are no constructs defined to create multiple-argument continuations.
{Note PLASMA Sugar}
PLASMA, for example, provides such sugar in abundance. Many "standard" control and data operations are provided and defined in terms of actor transmissions. Indeed, the user need not be aware of the semantics of actors at all; there is enough sugar to hide completely what is really going on.
{Note Return Address}
There is actually a third quantity passed to BAR
, namely the return address; this is not given an explicit name by either BAR
or its caller. Instead, the functional notation of LISP leaves the handling of the return address entirely implicit. Later, in the discussion of continuations, the return address will be given an explicit name just like any other passed parameter.
{Note Slice Both Ways}
One may also try slicing the matrix up in both directions, so that each entry may be specified as a separate module. This has been tried in REDUCE, for example. [Griss 76] It can lead to a rather disjointed style of programming, however; in practice, one tends to group routines with all fall in a single row or column of the operations matrix.
{Note Turing Machines}
Compare this with the basic action of a Turing machine, which is to use two parameters (the current state and the symbol under the tape head) to index a matrix of actions to take.