Commentary by cpressey on PLDI works
Fundamental Concepts in Programming Languages
Strachey notes, among many other things, that mathematicians seem to have problems seeing functions as first-class objects. (This is a sentiment I've seen repeated in a number of places, including Wouter van Oortmerssen's thesis on the term-rewriting language Aardappel.) This coincides, in an oblique way, with defunctionalization.
Definitional interpreters for higher-order programming languages
This is the paper where the term "meta-circular" is introduced (while discussing the wisdom of trying to define the meaning of a language using an interpreter written in another language, or possibly even that same language) as well as the term "defunctionalization". Reynolds notes a connection between defunctionalized interpreters and state machines, and also gives us this pithy statement:
Although the basic concept of assignment is well understood by any competent programmer, a surprising degree of care is needed to combine this concept with the language features we have discussed previously.
This paper was republished in Higher-Order and Symbolic Computation, issue 11, in 1998 (pages 363–397). There is another paper "Definitional interpreters revisited" (PDF) where Reynolds recollects on this paper.
Trampolined style
This is my own slogan: Trampolines are just defunctionalized continuations. The cont
function in Interpreter III in Reynolds' "Definitional interpreters for higher-order programming languages"
is an example of a trampoline.
A Practical Introduction to Denotational Semantics
"Denotational semantics is, in some sense, just another programming language." I can't find this as a direct quote, but this is certainly the sentiment. Pascal.
Formal Syntax and Semantics of Programming Languages
Using Prolog, this book considers a toy programming language (called Wren) and gives semantics for it using multiple approaches.
One of these approaches is algebraic semantics, which is covered in Chapter 12. This is presented in a "module" without much commentary on where that concept is coming from. Presenting equational theories in "modules" is something the research project of Equational logic programming introduced, and can be found in works on algebraic semantics such as "Algebraic Specifications in Software Engineering" by Van Horebeek and Lewi, and it is probably where the name "Maude" comes from.
At one point, PDFs of chapters were available online at the authors' course's website. Not sure if that's the case anymore.
Theories of Programming Languages
Very mathematical in its approach.
Starts out by giving a semantics for first-order logic. While not giving a concrete syntax for same. Which I thought was really weird at the time I first read it. And actually I still think it's a little far in the "academic" direction. But that is kind of the nature of the book. While it is trying to be accessible in its own way, it is aimed at a level of student for whom these things will be commonplace. Some of the denotational semantics stuff it covers is fairly daunting too.