Hal Abelson’s foreword suggests that not only is this textbook different, it will change the landscape of programming language courses. In many ways, it is different. We have seen a progression of approaches to the study of programming languages, starting with comparisons at the language level, which implied a study and comprehension of the languages themselves, and moving to studies of programming language fundamentals detached from the concrete languages of common usage. To a great extent, this book falls into the latter category, but it has gone a step further in attempting to find a common metalanguage in which to express the meanings of programming language ideas.
The book is based primarily on Scheme as an operational metalanguage, and a large portion of the book is taken up by the preparation for the real object of study. This material is not a repetition of a Scheme manual but a managed learning experience that lays the foundations for the needed constructs, which are presented in later chapters. The idea of using interpreters as the basis for describing languages is not new in the realm of textbooks, and the use of a common metalanguage of expression is similarly not unique. What sets this book apart is that the descriptive narrative of language constructs is replaced by vignettes of Scheme code that can be coalesced into larger modules or interpreters to actually implement a language processor. This ability is useful, but I miss the give and take of progressive development of the concepts behind language elements. I got the impression of being handed modular implementations of language elements with little room for individual expression or consideration of viable alternatives. In some ways, the textbook attempts to standardize the meanings of language elements and lacks what I have thought to be useful discussion of the rationale for implementation methodologies.
These comments are not to be taken to imply that this book is a reference book rather than a textbook; a student will be able to learn language concepts through a hands-on approach that may be much more effective than pure lectures and program writing. It may be difficult to return to this text later in one’s career and recover concepts without some difficulty, however. The selection of this book as a course text will depend on the interest of the individual faculty member, and for most current teachers of comparative languages it will represent a change in direction.