Every new computer program has at least the potentiality of making the computer act like a totally new kind of tool. Computer languages can go further, presenting the appearance of a totally different kind of computer. Some computer programs and languages are so novel that they change the way we think about problem-solving.

The urge to create a new programming language is strong. There are hundreds, if not thousands of programming languages around, and new ones continue to appear. Many new languages are simple variations on well-explored themes. Others are novel enough to amaze even jaded language enthusiasts.

Over the next several columns, I hope to present snapshots of some interesting, if lesser-known, freeware language implementations. This column concentrates on languages for parallel programming, whether done in multiprocessors or uniprocessors, on distributed networks or ???.

ABCL

ABCL is a family of object-based concurrent languages, documented in "ABCL: An Object-Oriented Concurrent System" (Akinori Yonezawa, Ed.; The MIT Press, 1990, ISBN 0-262-24029-7). ABCL/1 and ABCL/R2 are research languages for parallel processing.

Objects in ABCL/1 are autonomous information processing agents which work cooperatively with one another. Each object has its own computing power and works concurrently (or in parallel) with other objects. The computation model on which ABCL/1 is based assumes neither shared memory nor global clock. A collection of objects constitute a distributed processing system.

ABCL/R2 is an object-oriented concurrent reflective language based on Hybrid Group Architecture. As a reflective language, an ABCL/R2 program can dynamically control its own behavior, such as scheduling policy, from within a user program. As an object-oriented concurrent language, this system has almost all functions of ABCL/1.

The ABCL/1 and ABCL/R2 implementations are available on camille.is.s.u-tokyo.ac.jp/pub/abcl1/ and camille.is.s.u-tokyo.ac.jp/pub/abclr2/, respectively. Both languages are based on Common Lisp.

Adaptor

Adaptor (Automatic DAta Parallelism TranslatOR) is a tool that transforms data parallel programs written in Fortran with array extensions, parallel loops, and layout directives to parallel programs with explicit message passing.

Adaptor is written in C and Fortran, and is available in ftp://ftp.gmd.de/GMD/adaptor/.

ALLOY

ALLOY is a higher level parallel programming language appropriate for programming massively parallel computing systems. It is based on a combination of ideas from functional, object oriented and logic programming languages.

The result is a language that can directly support functional, object oriented and logic programming styles in a unified and controlled framework. Evaluating modes support serial or parallel execution, eager or lazy evaluation, non-determinism or multiple solutions etc. ALLOY is simple as it only requires 29 primitives in all (half of which are for Object Oriented Programming support).

ALLOY is written in Common Lisp, and is available in ftp://cs.nyu.edu/pub/local/alloy/.

Arjuna

Arjuna is an object-oriented programming system that provides a set of tools for the construction of fault-tolerant distributed applications. A prototype version written in C++ has been designed and implemented to run on a collection of Unix workstations connected by a local area network. Arjuna provides nested atomic actions (nested atomic transactions) for structuring application programs. Atomic actions operate on objects, which are instances of abstract data types (C++ classes), by making use of remote procedure calls (RPCs).

Arjuna is written in C++, and is available in ftp://arjuna.ncl.ac.uk/pub/Arjuna/.

C++SIM

C++SIM is a set of c++ class definitions that mimic the process-based simulation facilities of SIMULA and the SIMSET routines. The co-routine facility of Simula is implemented by Sun threads. Classes are provided for various random number distributions.

C++SIM is written in C++, and is available in ftp://arjuna.ncl.ac.uk/pub/C++SIM/.

Concurrent ML (CML)

Concurrent ML is a concurrent extension of Standard ML, supporting dynamic thread creation, synchronous message passing on synchronous channels, and first-class synchronous operations. First-class synchronous operations allow users to tailor their synchronization abstractions for their application. CML also supports both stream I/O and low-level I/O in an integrated fashion.

Concurrent ML is written in Standard ML, and is available in ftp://research.att.com/dist/ml/.

Glish

Glish is an interpreted language for building distributed systems from modular, event-oriented programs. These programs are written in conventional languages such as C, C++, or Fortran. Glish scripts can create local and remote processes and control their communication. Glish also provides a full, array-oriented programming language for manipulating binary data between the processes.

In general Glish uses a centralized communication model where inter-process communication passes through the Glish interpreter, allowing dynamic modification and rerouting of data values, but Glish also supports point-to-point links between processes when necessary for high performance. Glish is written in C++, and is available in ftp://ftp.ee.lbl.gov/glish/.