Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
skip to main content
Skip header Section
Lazy functional languages: abstract interpretation and compilationSeptember 1991
  • Author:
  • Geoffrey Burn
Publisher:
  • MIT Press
  • 55 Hayward St.
  • Cambridge
  • MA
  • United States
ISBN:978-0-262-52160-4
Published:01 September 1991
Pages:
238
Skip Bibliometrics Section
Reflects downloads up to 09 Nov 2024Bibliometrics
Contributors
  • Imperial College London

Reviews

Edward A. Schneider

Abstract interpretation is a technique first made popular by Mycroft. This book describes its use as a means of compiling efficient code for lazy functional languages. It appears to be an extension of the author's Ph.D. thesis. The first chapter introduces functional programming, reduction as a method for evaluating functional programs, and abstract interpretation. The next chapter defines a typed lambda calculus and gives an operational semantics for it and a denotational semantics of its standard interpretation. The book then presents abstract interpretations for this lambda calculus, including an interpretation that allows strictness information to be derived for lists and binary trees. This strictness information is used to determine which reduction strategies are safe, in that they preserve the denotational semantics. An efficient strategy is given for compiling spineless G-machine code from the typed lambda calculus, using abstract interpretation information . The book concludes with a discussion of related work and some observations. Proofs of the main theorems and a description of the spineless G-machine are included as appendices. The book attempts to be self-contained, with only a “fair degree of mathematical maturity” required. The introductions to functional programming and domain theory cover a lot of material in little space, however; someone without some prior knowledge of these topics would have difficulty understanding the book. For example, curried notation is used with no explanation, and fixed points are introduced to represent recursion without motivation. I also found that much of the theoretical material was poorly motivated before it was introduced, which increases the need for some prior knowledge. The density of the material makes the book slow reading in spots. Also, I found several typos, some of which could cause confusion. The “Drawing It Together” section at the end of each chapter nicely summarizes the important concepts that have been presented, however. Abstract interpretation has been an active area of research over the last several years, and this book successfully combines much of what has been learned into a unified framework. The problem with a report on such active research, of course, is the risk that some of the material covered will become obsolete. The book contains an extensive bibliography and a fair index, but no exercises. Overall, the book is an important addition to the literature on the implementation of functional languages. While I do not feel that it is suitable for a general audience, I highly recommend it for anyone interested in this area.

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.

Recommendations