Report Number: CSL-TR-83-240
Institution: Stanford University, Computer Systems Laboratory
Title: ADAM: an ADA-based language for multiprocessing
Author: Luckham, David C
Author: von Henke, Frederick W.
Author: Larsen, H. J.
Author: Stevenson, D. R.
Date: May 1983
Abstract: Adam is a high level language for parallel processing. It is
intended for programming resource scheduling applications, in
particular supervisory packages for runtime scheduling of
multiprocessing systems. An important design goal was to
provide support for implementation of Ada and its runtime
environment. Adam has been used to implement Ada task
supervision and also as a high level target language for
compilation of Ada tasking.
Adam provides facilities that match the Ada sequential
constructs (including subprograms, packages, exceptions,
generics). In addition there are specialized module
constructs for implementation of packages that may be shared
between parallel processes. Adam omits the Ada real types but
includes some new predefined types for scheduling. The
parallel processing constructs of Adam are more primitive
than Ada tasking. Some restrictions are enforced on the ways
in which parallel processes can interact.
A compiler for Adam has been implemented in MacLisp on DEC
PDP-10 computers. Runtime support packages in Adam for
scheduling (on a single CPU) and I/O are also provided. The
compile contains a library manipulation facility for separate
The Adam compiler has been used to build an Ada compiler for
most of the July 1980 Ada language design including task
types and rendezvous constructs. This was achieved by
implementing algorithms translating Ada tasking into Adam
parallel processing as a preprocessor to the Adam compiler.
This present Ada compiler, which has been operational since
December 1980, uses a procedure call implementation of
tasking (due to Haberman and Nassi and to Stevenson). It can
be easily modified to other implementations. Compilation of
Ada tasking into a high level target language such as Adam
facilitates studying questions of correctness and efficiency
of various compilation algorithms, and code optimizations
specific to tasking, e.g. elimination of unnecessary thread
This paper gives an overview of Adam and examples of its use.
Emphasis is placed on the differences from Ada. Experience
using Adam to build the experimental Ada system is evaluated.
Design of runtime supervisors in Adam and algorithms for
translating Ada tasking to Adam processing are discussed in