MPD Release Notes

# 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.