(CLUster) An object-oriented
programming language developed at MIT
et al in 1974-1975.
CLU is an object-oriented
language of the Pascal
family designed to support data abstraction
, similar to Alphard
. It introduced the iterator
: a coroutine
yielding the elements of a data object, to be used as the sequence of values in a for loop
A CLU program consists of separately compilable procedures
and iterators, no nesting. A cluster is a module naming an abstract type
and its operations, its internal representation and implementation. Clusters and iterators may be generic. Supplying actual constant values for the parameters
instantiates the module
There are no implicit type conversions
. In a cluster, the explicit type conversions 'up' and 'down' change between the abstract type and the representation. There is a universal type 'any', and a procedure force to check that an object is a certain type. Objects may be mutable or immutable
are raised using 'signal' and handled with 'except'. Assignment
is by sharing, similar to the sharing of data objects in Lisp
. Arguments are passed by call-by-sharing
, similar to call-by-value
, except that the arguments are objects and can be changed only if they are mutable. CLU has own variables
and multiple assignment.
See also Kamin's interpreters
["CLU Reference Manual", Barbara Liskov et al, LNCS 114, Springer 1981].
E-mail: Paul R. Johnson .
Versions for Sun and VAX/VMS (ftp://pion.lcs.mit.edu/pub/clu/). Portable version (ftp://mintaka.lcs.mit.edu/pub/dcurtis/).