Summary: Program Transformation in the Presence of Errors
Alexander Aiken John H. Williams Edward L. Wimmers
IBM Almaden Research Center
650 Harry Rd.
San Jose, CA 95120
A laudable trend of the past two decades has been the increased use of denotational semantics to
guide the design and implementation of programming languages. Semanticsdriven language design
has produced cleaner and simpler languages and provided more precise standards for testing the
correctness of language implementations.
An apparent exception to this trend is the treatment of error handling. All too often, errors are
considered to be outside the pale of the denotational semantics; if anything is specified about error
behavior, it is usually through some ad hoc mechanism. Some language features---such as strong
typing---reduce the negative impact of such a design but cannot avoid it completely; runtime errors
exist in every language and must be handled in an implementation.
Many languages simply omit errors altogether from their formal semantic specification. For ex
ample, early Fortran implementations were free to report errors as the implementor saw fit, and
transformations to improve performance could change the behavior of errorproducing programs.
This approach is still taken with some modern languages, e.g., Haskell [HWA*88] and the languages