Sequential Implementation of Lenient Programming Languages
Abstract
In non-strict functional languages, a data structure may be read before all its components are written, and a function may return a value before finishing all its computation or even before all its arguments have been evaluated. Such flexibility gives expressive power to the programmer, but makes life difficult for the compiler because it may not be possible to totally order instructions at compile time; the correct order can vary dramatically with the input data. Presently, compiler for non-strict languages rely on lazy evaluation, in which a subexpression is not evaluated until known (at run time) to contribute to the final answer. By scheduling each subexpression separately, lazy evaluation automatically deals with the varying orderings required by non- strictness, but at the same time incurs a great deal of overhead. Recent research has employed strictness analysis and/or annotations to make more scheduling decisions at compile time, and thereby reduce the overhead, but because these techniques seek to retain laziness, they are limited in effectiveness. The author discusses his strategy in the context of both sequential implementations and parallel implementations where the object code is partially sequentialized.
Document Details
- Document Type
- Technical Report
- Publication Date
- Oct 01, 1988
- Accession Number
- ADA200984
Entities
People
- Kenneth R. Traub
Organizations
- Massachusetts Institute of Technology