Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon
PREFACE xxxi complexity. This gives a solid foundation to the programmer’s intuition and the programming techniques built on top of it. A wide variety of languages and programming paradigms can be modeled by a small set of closely-related kernel languages. It follows that the kernel language approach is a truly language-independent way to study programming. Since any given language translates into a kernel language that is a subset of a larger, more complete kernel language, the underlying unity of programming is regained. Reducing a complex phenomenon to its primitive elements is characteristic of the scientific method. It is a successful approach that is used in all the exact sciences. It gives a deep understanding that has predictive power. For example, structural science lets one design all bridges (whether made of wood, iron, both, or anything else) and predict their behavior in terms of simple concepts such as force, energy, stress, and strain, and the laws they obey [62]. Comparison with other approaches Let us compare the kernel language approach with three other ways to give pro- gramming a broad scientific basis: A foundational calculus , like the λ calculus or π calculus, reduces program- ming to a minimal number of elements. The elements are chosen to simplify mathematical analysis, not to aid programmer intuition. This helps theo- reticians, but is not particularly useful to practicing programmers. Founda- tional calculi are useful for studying the fundamental properties and limits of programming a computer, not for writing or reasoning about general applications. A virtual machine defines a language in terms of an implementation on an idealized machine. A virtual machine gives a kind of operational semantics, with concepts that are close to hardware. This is useful for designing com- puters, implementing languages, or doing simulations. It is not useful for reasoning about programs and their abstractions. A multiparadigm language is a language that encompasses several program- ming paradigms. For example, Scheme is both functional and imperative ([38]) and Leda has elements that are functional, object-oriented, and logi- cal ([27]). The usefulness of a multiparadigm language depends on how well the different paradigms are integrated. The kernel language approach combines features of all these approaches. A well- designed kernel language covers a wide range of concepts, like a well-designed multiparadigm language. If the concepts are independent, then the kernel lan- guage can be given a simple formal semantics, like a foundational calculus. Final- ly, the formal semantics can be a virtual machine at a high level of abstraction. This makes it easy for programmers to reason about programs. Copyright c ± 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
xxxii PREFACE Designing abstractions The second goal of the book is to teach how to design programming abstractions.
Background image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

{[ snackBarMessage ]}

Page1 / 30


This preview shows document pages 1 - 3. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online