Functional Programming (1985-1999)
At its outset, Parallel Functional Programming (PFP) promised an elegant way to program parallel systems: if a sequential program were correct then correctness on a parallel system would be guaranteed - if a large number of practical implementation issues could be resolved. Prior to Clack's research, PFP was in its infancy and substantially inhibited by several issues, most notably how to obtain efficient lazy evaluation semantics. The research undertaken by Clack with his colleagues provided effective and seminal solutions to a wide range of research challenges in PFP:
- how to detect needed ("strict") computations statically, efficiently and automatically?
- how to use strictness to provide lazy evaluation semantics in a parallel system?
- how to guarantee a run-time system provides efficient management of dynamic parallel tasks?
Theoretical advances were demonstrated through the design and construction of real parallel hardware, with all the required software infrastructure to support PFP applications.
- "Foundations" (Michaelson, Hammond and Clack, in Research Directions in Parallel Functional Programming, Chapter 2, pp 31–61, ISBN 1-85233-092-9. 1999) introduces FP and implementation issues, and
- "Realisations for Non-Strict Languages" (Clack, in Research Directions in Parallel Functional Programming, Chapter 6, pp 149-187, ISBN 1-85233-092-9. 1999) gives a retrospective survey and comparative evaluation of non-strict PFP research to 1998.
Additionally, Clack's functional programming research has contributed to FP language design, and the wider field of Memory Management (MM):
- how to profile lazy FP run-time performance?
- can object-oriented semantics combine with FP?
- can dynamic MM be fast and small?