This book is concerned with concepts in programming languages, issues in their implementation, and how language design affects program development. It is aimed at upper-level undergraduate students and beginning graduate students with some experience in procedural and OO programming. Functional programming experience is claimed to be helpful but non-essential. As a teaching text, it competes with a similarly-named book by Sebesta, a book by (Wilson and) Clark, and others.

Like most books in this area, it is mostly organised by concept (rather than by language), with a (here, relatively short) history of programming languages at the beginning. The “foundational” chapters are then concerned with computability, Lisp, syntax, semantics and functional programming. Next, a number of chapters deal with the traditional concepts in procedural languages, followed by a third section on object-oriented programming. The final chapters, as usual in texts in this area, deal with concurrency and logic programming (the latter chapter is by Krzystof Apt). As one might have expected from the author, this book is an extremely rich source of important information, subtle issues, and diverse and challenging exercises. This makes it an excellent text for further reading. As an introductory text, however, it is less suitable. This is mostly due to structuring and content, and partially to bias.

As an example of problems with structure and content, consider (parametric) polymorphism. Chapter 5 uses the ML “length” function as an example (without giving its type), and mentions polymorphism four pages later as a subject to be covered in Chapter 6. Then, Exercises 5.3(d)-5.8 assume familiarity with polymorphism. Finally, Chapter 6 treats the subject – in a very nice way indeed, introducing it as an effect of type inference, and contrasting it in full detail with the C++ template mechanism.

A few important concepts are not described at all, for example there is no mention of separate compilation in Chapter 9, on modules; this will make it hard for beginners to understand discussions on when things are compiled in Smalltalk, or in C++ using STL. Chapter 8, on control structures is unusual in not covering the traditional collection of loops and branching structures – in particular, the fall-through case statement in Exercise 10.2 must baffle some readers. In general, the exercises are quite stimulating, but by assuming language knowledge not covered in the preceding chapter(s) they may appear too difficult to students.

Download pdf Concepts in Programming Languages Review