This book stems in part from courses taught at the University of Kentucky
and at the University of Wisconsin–Madison on programming language design.
There are many good books that deal with the subject at an undergraduate
level, but there are few that are suitable for a one-semester graduatelevel
course. This book is my attempt to fill that gap.
The goal of this course, and hence of this book, is to expose first-year graduate
students to a wide range of programming language paradigms and issues,
so that they can understand the literature on programming languages
and even conduct research in this field. It should improve the students’ appreciation
of the art of designing programming languages and, to a limited
degree, their skill in programming.
This book does not focus on any one language, or even on a few languages;
it mentions, at least in passing, over seventy languages, including wellknown
ones (Algol, Pascal, C, C++, LISP, Ada, FORTRAN), important but less
known ones (ML, SR, Modula-3, SNOBOL), significant research languages
(CLU, Alphard, Linda), and little-known languages with important concepts
(Io, Go..del). Several languages are discussed in some depth, primarily to reinforce
particular programming paradigms. ML and LISP demonstrate functional
programming, Smalltalk and C++ demonstrate object-oriented
programming, and Prolog demonstrates logic programming.
Some (like power loops) should most likely not be included in a programming
language. Others (like Io continuations) are so strange that it is not clear
how to program with them. Some (APL arrays) show alternative ways to
structure languages. These unusual ideas are important even though they do
not pass the test of current usage, because they elucidate important aspects
of programming language design, and they allow students to evaluate novel