The SISAL functional programming language is designed to provide high-performance execution of large-scale scientific computations on conventional and novel computer architectures. This note considers strictness and determinism, two language design issues that have resisted definitive resolution during SISAL’s development.
In a strict programming language, all constituent values must be available before the comprising value is available; in nonstrict languages, this relation need not hold. Nonstrictness may be more expressive and efficient than strictness is, but at the cost of more synchronization. SISAL is strict, but its designers are searching for nonstrict constructs that are expressive and inexpensive to provide.
A determinate programming language sets an evaluation order for operation sequences; a nondeterminate programming language leaves the evaluation order undefined. Nondeterminism may be more expressive and efficient than determinism is, but can only be correctly applied to associative and commutative operations. SISAL is determinate, but its designers are experimenting with class-based definitions for operations allowing nondeterminate evaluation.
This note may be of some value to those interested in the current status of strictness and determinism in SISAL. Those interested in a deeper analysis of these issues in SISAL, or a broader analysis of these issues in language design, will find this note to be, at best, a starting point.