Release Notes for Version 1 of MPD
http://www.cs.arizona.edu/mpd
Gregg Townsend
Department of Computer Science
The University of Arizona
January 20, 2004
Version 1.0.1 of MPD
Version 1.0.1 is a maintenance release of MPD.
It contains a small number of changes necessary to accommodate
incompatibilities introduced by recent versions of the GNU
compiler, library, and toolset.
Because MPD is closely based on SR, it shares most of the same limitations.
Some of these could reasonably be considered bugs.
The rest of this list comes from the original MPD release,
and it has not changed significantly since version 2.1 of SR.
The Programming Environment
-
Source files are generally expected to reside in the current directory;
explicit paths elsewhere don't always work.
Problems Seen at Compilation Time
-
Slices cannot be used with the swap (:=:) operator.
-
Builtin procedures having string result parameters (read, get,
scanf, getarg, sprintf) cannot accept slice expressions
for those parameters.
-
Unions are really implemented as records; no storage is shared.
-
MPD uses a multipass compiler. If it finds an error on one pass,
it skips the later passes, with the consequence that not all errors
are reported at once. Errors in spec sections may be reported
once for each import.
Problems Seen at Execution Time
-
The bounds of an array passed by ref are those of the underlying
array, not those declared for the parameter.
-
Null and noop capabilities cannot be created for resources that
export arrays of operations if any of those arrays has more than
three dimensions.
-
Synchronization expressions are not recomputed when their values
are changed by the actions of other processes (e.g. by altering
global variables or sending to operations referenced by a ?
operator).
-
Destroying a resource is not an atomic operation. If processes
in two resources each simultaneously try to destroy the other
resource, one or both of the processes can be killed, leaving
one or both resources incompletely destroyed.
-
In most situations, the process with the highest priority is executed.
However, processes that are blocked waiting for messages become
unblocked without regard to priority.
Problems Involving Distributed Programs
-
If a distributed MPD program is found using the shell's search
path, but is not in the current directory, then mpdx generates
an incorrect network file path and virtual machines cannot be
created.
-
Because of network pipeline delays, output from different virtual
machines may be misordered, even if it is explicitly synchronized.
-
Error messages can sometimes occur, due to race conditions, during
normal termination of distributed programs. For example, these
can be caused if X exits while Y is sending to it.
-
Virtual machines don't always shut down cleanly if an MPD program
is run in the background under the Bourne shell. This is noticed
when running mpdv under sh or at.
Undetected Programming Errors
Not all errors are detected by the MPD compiler or runtime system.
These errors can manifest themselves in various ways including
segmentation faults, other runtime errors, or even misleading
diagnostics. Some of the more common such errors are these:
-
Arithmetic overflow is not detected by either the compiler or
runtime system.
-
The use of an uninitialized variable is not detected, nor is the
use of a ptr or ref parameter on a different virtual machine.
-
Values of enumeration types are not checked at execution time.
-
Unreachable code is not diagnosed.
-
No warning is given if an invocation is still pending when an
operation ceases to exist.