An object-oriented programming language developed at MIT by Liskov et al in
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, clusters 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.
Exceptions 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
See also Kamin's interpreters, clu2c.
["CLU Reference Manual", Barbara Liskov et al, LNCS 114, Springer 1981].
E-mail: Paul R. Johnson <email@example.com>.
Versions for Sun and VAX/VMS. Portable version.
CLR « CLtL1 « CLtL2 « CLU » clu2c » cluster »