Concurrent Clean

Concurrent Clean is an experimental, lazy, higher-order parallel functional programming language based on term graph rewriting. An important diierence with other languages is that in Clean graphs are manipulated and not terms. This can be used by the programmer to control communication and sharing of computation. Cyclic structures can be deened. Concurrent Clean furthermore allows to control the (parallel) order of evaluation to make eecient evaluation possible. With help of sequential annotations the default lazy evaluation can be locally changed into eager evaluation. The language enables the deenition of partially strict data structures which make a whole new class of algorithms feasible in a functional language. A powerful and fast strictness analyser is incorporated in the system. The quality of the code generated by the Clean compiler has been greatly improved such that it is one of the best code generators for a lazy functional language. Two very powerful parallel annotations enable the programmer to deene concurrent functional programs with arbitrary process topologies. Concurrent Clean is set up in such a way that the eeciency achieved for the sequential case can largely be maintained for a parallel implementation on loosely coupled parallel machine architectures.