TLDR: "Essentials of Programming Languages" is a textbook that teaches the principles of programming languages in a fun and practical way. It starts with a simple language and gradually adds more complex features, showing how to build an interpreter and translate it into other languages.
"Essentials of Programming Languages" (EOPL) is a textbook written by Daniel P. Friedman, Mitchell Wand, and Christopher T. Haynes. It explores the principles of programming languages from an operational perspective. The book takes a hands-on approach, starting with a simple functional core language and gradually adding new constructs to increase the expressive power of the language.
The first part of the book focuses on building an interpreter for the language using Scheme, a programming language. Each new construct added to the language requires the formulation of a new interpreter. The book also demonstrates how systematic transformations can eliminate certain constructs from the language, making it more efficient and easier to understand.
The second part of the book explores the translation of the interpreter into register machines, which are low-level computing devices. This process involves eliminating higher-order closures, continuation objects, and recursive function calls. By the end of the book, the reader is left with an interpreter that uses only tail-recursive function calls and assignment statements, making it easy to translate the code into other programming languages like C or assembly.
In addition to explaining key concepts, the book includes a series of exercises that allow readers to explore alternative designs and other issues. It also covers topics such as types and modules, preparing the reader for a deeper understanding of programming languages and compilation.
"Essentials of Programming Languages" represents a departure from traditional programming language textbooks. Instead of presenting a survey of different programming languages, the book focuses on building a solid foundation in one language and gradually expanding its capabilities. This approach allows readers to gain a deeper understanding of the principles behind programming languages.
The book has become a near-classic since its first edition in 1983 and is now in its third edition. It has influenced other related texts, such as "Lisp in Small Pieces" by Christian Queinnec and "Programming Languages: Application and Interpretation" by Shriram Krishnamurthi.
If you're interested in learning more about programming languages, you may also want to check out "Structure and Interpretation of Computer Programs" and "How to Design Programs."