<p>It all depends how deep you want to go, and how much you already know. For a beginner Winksel's book is really nice, but yes, it's not introducing you to the state of the art in semantics as it was written about 20 years ago. Nevertheless it's still a good first introduction to the subject. It might also be worthwhile pointing out that T. Nipkow has formalised a substantial chunk of Winskel's book in Isabelle/HOL, see <a href="http://www4.informatik.tu-muenchen.de/~nipkow/pubs/fac98.html">here</a>. So if you want to learn using interactive proof assistants together with understanding the semantics of programming languages, you have a lot of coherent material to draw on.</p>

<p>Other books that are more advanced are:</p>

<ul>
<li><p>Gunter, <a href="http://books.google.co.uk/books?id=Gu2wh2TqVcUC&amp;printsec=frontcover&amp;dq=gunter+semantics+of+programming+languages&amp;source=bl&amp;ots=Iu927q2mHD&amp;sig=swEhGNI8turYbuFOLkt2ilp3nxE&amp;hl=en&amp;ei=4MP7TPunK4W5hAfV6JmOCw&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=1&amp;ved=0CBoQ6AEwAA#v=onepage&amp;q&amp;f=false">Semantics of Programming Languages</a>, a more advanced book focussing on denotational semantics, an approach to semantics, which hasn't lived up to expectations. Focusses on purely functional lanugages and ignores concurrency. This is the book that I taught myself semantics from as an undergraduate, and in retrospect I wish I had used Winksel's book instead. Gunter is not an easy read for a beginner.</p></li>
<li><p><a href="http://books.google.co.uk/books?id=2FycO5h5SocC&amp;printsec=frontcover&amp;dq=amadio+curien&amp;source=bl&amp;ots=7rBGCSks2y&amp;sig=HAljsWHG6BD6NJqG2EG925_-guM&amp;hl=en&amp;ei=euL8TJndFoXNhAfGztzgCg&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=1&amp;ved=0CBYQ6AEwAA#v=onepage&amp;q&amp;f=false">Domains and lambda-calculi</a> by Amadio and Curien. Another book coming written more in the domain-theoretic tradition, although it discusses process calculi.</p></li>
<li><p>John Mitchell's books which have already been mentioned above. They are also mostly about sequential computation.</p></li>
</ul>

<p>Books like Pierce's TAPL are very nice, but focus narrowly on one aspect of programming languages, namely types, as important as that is. I would not recommend it as a first introduction to the general area of programming languages, but it is mandatory to read for anyone who wants to learn about types.</p>

<p>Truth be told, I think there's currently no up-to-date introductory book on language semantics that reflects the substantial progress the last decade has seen, with its decisive shift away from denotational methods and sequential computation to concurrency (process calculi and game semantics), axiomatics semantics and the use of interactive proof assistants in verification. </p>

<p><strong>Update 22. April 2014:</strong> Tobias Nipkow and Gerwin Klein have published a new book</p>

<ul>
<li><a href="http://www21.in.tum.de/~nipkow/Concrete-Semantics/">Concrete Semantics</a></li>
</ul>

<p>which can be seen as 'Winskel in Isabelle/HOL'. It's an introduction to the
semantics of programming languages (primarily operational and
axiomatic) but unlike previous pen-and-paper-based approaches, this
book expresses all its mathematics in Isabelle/HOL. In other words,
it's at the same time a book about theorem proving.</p>

<p>The book is brand new so I have not used for teaching, but it looks really suitable
as an introduction that is pitched at a lower level than <a href="http://www.cis.upenn.edu/~bcpierce/sf/">Software Foundations</a>
by 
Pierce et al.</p>

CC BY-SA 2.5
2010-12-05T19:59:21.377Z
Is there a shift away from denotational methods? Seems to me more like the kind of people who previously would use hand-wavy proofs, nowadays are expected to produce formal proofs. As denotational methods still cannot easily model everything we do, and require many more prerequisites, those researchers use more approachable methods such as games, process calculi, proof assistants. I'm not sure whether there is a decline in denotational methods.
Ohad Kammar
CC BY-SA 2.5
2010-12-05T23:02:28.253Z
Please do not confuse *denotational* semantics with *domain theory*. Game semantics can be, and usually is, perfectly denotational, i.e., the meaning of a program is a function of the meanings of its parts.
Andrej Bauer
CC BY-SA 2.5
2010-12-05T23:53:55.887Z
I've opened a new thread regarding this comment. But even if I'm not sure I agree with your definition, game semantics are denotational in nature. I think I should replace "games" with "operational semantics" in my comment, and include game semantics as possibly another form of denotational semantics research. http://cstheory.stackexchange.com/questions/3577/what-constitutes-denotational-semantics
Ohad Kammar
CC BY-SA 2.5
2010-12-06T13:29:13.530Z
Ohad, I don't think the shift away from order-theoretic methods had to do with "hand-wavy proofs", but rather has been coming about because it turned out to be difficult to model richer programming languages with interesting effects in an order-theoretic manner.
Martin Berger
CC BY-SA 2.5
2010-12-06T19:04:58.197Z
I'm not convinced there is a shift. See my first comment, in light of Andrej's comment.
Ohad Kammar
CC BY-SA 2.5
2010-12-07T12:30:55.183Z
Is there a shift? An interesting question. How can we measure a shift? There are so many criteria we could apply, from the relatively concrete ones like amount of resarch grants given to different approaches, to vague ideas like mind-share. Given how involved we, as researchers, as employees, as applicants for grant money, are in the outcome of such a question, it's unlikely that we'd agree on an answer.
Martin Berger
CC BY-SA 3.0
2010-12-05T17:09:57.853Z
2014-04-22T10:28:07.577Z
2014-04-22T10:28:07.577Z
Martin Berger
<p>Here is a random sample of materials available for free online:</p>

<ul>
<li>Winskel, <em>The Formal Semantics of Programming Languages</em>, <a href="http://books.google.com/books?id=JzUNn6uUxm0C&amp;lpg=PP1&amp;dq=Glynn%20Winskel&amp;pg=PP1#v=onepage&amp;q&amp;f=false">Google Books preview</a>. I don't know anything about this book. It's on the list because the question specifically asks about it's content, which is online, mostly.</li>
<li>Morgan, <em>Programming from Specification</em>, <a href="http://users.comlab.ox.ac.uk/carroll.morgan/PfS/">list of ps files</a>. The subject is refinement, which is the process of starting with high-level non-executable descriptions and systematically morphing then into something executable. Of course, every refinement step must preserve semantics, so it discusses a certain type of semantics too (based on predicate treansformers mostly).</li>
<li>Harper, <em>Practical Foundations of Programming Languages</em>, <a href="http://www-2.cs.cmu.edu/~rwh/plbook/book.pdf">pdf of draft</a>. See the comment by Dave Clarke below.</li>
<li>Remy, <em>Using, Understanding, and Unraveling the OCaml Language</em>, <a href="http://gallium.inria.fr/~remy/cours/appsem/ocaml.pdf">pdf</a>. This is the book from which I learned functional programming (OCaml, more precisely) and I liked it <em>a lot</em>. It presents the semantics of basic language features in a very nice way and in the process presents lambda calculus and type theory on a `needs to know' basis.</li>
<li>Peyton Jones, <em>The Implementation of Functional Programming Languages</em>, <a href="http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/slpj-book-1987.djvu">djvu</a>. The first chapters describe lambda calculus (and its `operational semantics') and how higher level language features are desugared into lambda calculus. In this sense, the paper gives an operational semantics for functional languages.</li>
<li>Pierce (ed), <em>Advanced Topics in Types and Programming Languages</em>, <a href="http://books.google.co.uk/books?id=A5ic1MPTvVsC&amp;lpg=PA389&amp;ots=PmwxiCcx6s&amp;dq=book%20didier%20remy&amp;pg=PP1#v=onepage&amp;q&amp;f=false">Google Books preview</a>.</li>
<li>Slonneger, <em>Syntax and Semantics of Programming Languages</em>, <a href="http://www.cs.uiowa.edu/~slonnegr/plf/Book/">list of pdf files</a>. I looked at this briefly a long time ago and didn't like it much. It's on the list because it's mentioned in the question.</li>
<li>Brookes, <em>A Semantics for Concurrent Separation Logic</em>, <a href="http://www.eecs.qmul.ac.uk/~ohearn/papers/brookes_reynoldsfest_tcs.pdf">pdf</a>. This is a big article (80 pages), not a book. I included it because it's a fairly recent development that I find interesting.</li>
</ul>

CC BY-SA 2.5
2010-12-05T06:27:11.443Z
that's a lot of links :)
Suresh Venkat
CC BY-SA 2.5
2010-12-05T10:27:10.193Z
This would be more useful if it had been presented as a list. Anyway, I'd recommend the Harper book: click "might".
Dave Clarke
CC BY-SA 2.5
2010-12-05T19:32:29.480Z
I agree. Radu, could you list out the books, so we know what we're clicking on ? this would be an excellent resource.
Suresh Venkat
CC BY-SA 2.5
2010-12-05T23:22:12.050Z
It's a list now. (The first version was posted around 2am, after sleeping about 5h the previous night. :P)
Radu GRIGore
CC BY-SA 2.5
2010-12-05T02:42:37.983Z
2010-12-05T23:20:05.453Z
2010-12-05T23:20:05.453Z
Radu GRIGore
<p>I would divide the books on programming language semantics into two classes: those that focus on <em>modelling</em> programming language concepts and those that focus on the <em>foundational aspects</em> of semantics.  There is no reason a book can't do both.  But, usually, there is only so much you can put into a book, and the authors also have their own predispositions about what is important.</p>

<p>Winskel's book, already mentioned, does a bit of both the aspects.  And, it is a good beginner's book.  An equally good, perhaps even better, book is the one I started with: Gordon's <a href="http://books.google.co.uk/books/about/The_denotational_description_of_programm.html?id=_QAnAAAAMAAJ&amp;redir_esc=y">Denotational description of programming languages</a>.  This was my first book on semantics, which I read soon after I finished my undergraduate work.  I have to say it gave me a firm grounding in semantics and I never had to wonder how denotational semantics differs from operational semantics or axiomatic semantics etc.  This book will remain my all-time favourite on denotational semantics.</p>

<p>Other books that focus on <em>modeling</em> aspects rather than foundational aspects are the following:</p>

<ul>
<li><p>Tennent's <a href="http://books.google.co.uk/books?id=K7N7QgAACAAJ&amp;source=gbs_slider_cls_metadata_9_mylibrary">Semantics of programming languages</a>, which is a more-or-less uptodate book on the semantics of imperative programming languages.  It is easy to read.  However, it tends to be abstract in later parts of the book and you might have to struggle to see why things are being done in a particular way.</p></li>
<li><p>Reynolds's <a href="http://books.google.co.uk/books?id=2OwlTC4SOccC&amp;source=gbs_slider_cls_metadata_0_mylibrary">Theories of programming languages</a>.  Anybody specializing in semantics should definitely read this book.  It is after all by Reynolds.  (David Schmidt once remarked to me, "even if Reynolds is reading out the morning newspaper to you, you want to listen carefully, because you might learn something important"!)  It has good coverage of both the modelling aspects and foundational aspects.</p></li>
</ul>

<p>The best books on foundational aspects are Gunter's (which I regard as a graduate text book), and Mitchell's (which is good reference book to have on your bookshelf because it is quite comprehensive).</p>

CC BY-SA 3.0
2012-03-06T11:38:54.217Z
It's very nice to have you here, Uday!
Radu GRIGore
CC BY-SA 3.0
2012-03-06T19:31:53.937Z
I am glad to be here too.  This is a very nice resource!
Uday Reddy
CC BY-SA 3.0
2013-10-26T22:03:05.817Z
How about:Transitions and Trees: An Introduction to Structural Operational Semantics from Hans Hüttel 2010. Seems to have goood reviews but no one mentions it here.
Arturo Hernandez
CC BY-SA 3.0
2013-11-22T11:47:24.657Z
@ArturoHernandez.  It appears that the original question was regarding *denotational semantics*.  So, no answers dealing with operational semantics were given.  See the first couple of chapters of Gunter's book for the differences between denotational and operational semantics.
Uday Reddy
CC BY-SA 3.0
2014-09-10T07:08:30.687Z
@Uday: Thanks for the answer. What do "modelling programming language concepts" and "the foundational aspects of semantics" mean?  What are their differences and relations?
Tim
CC BY-SA 3.0
2014-09-11T09:26:05.147Z
@Tim: To give the semantics of a programming language, you need to some form mathematical structures, e.g., sets in the simplest case, but sophisticated structures like domains, categories, coalgebras etc. for issues that sets can't handle.  By "foundational aspects," I mean the theory of these more sophisticated structures.  In the former case, the focus is on programming languages and, in the latter case, it is on the mathematical foundations.
Uday Reddy
CC BY-SA 3.0
2014-09-11T12:37:11.443Z
@Uday: (1) by "you need to some form mathematical structures, e.g., sets in the simplest case", do you mean "you need not only some mathematical structures e.g. set in the simplest case"? (2) by "In the former case", do you mean  "modelling programming language concepts" or "sets in the simplest case"? by " in the latter case", do you mean "the foundational aspects of semantics" or "sophisticated structures like domains, categories, coalgebras etc. for issues that sets can't handle"?
Tim
CC BY-SA 3.0
2014-09-12T15:18:28.823Z
@Tim (1) Sets are the simplest form of mathematical structures that we learn in high school.  For programming semantics, we need more sophisticated mathematical structures. (2) I was using "former" and "latter" for the two phrases you asked me about : "modelling programming language concepts" and "foundational aspects of semantics".
Uday Reddy
CC BY-SA 4.0
2021-09-19T22:18:01.673Z
What do you think of Robert Milne’s and Christopher Strachey’s 1976 book [*A Theory of Programming Language Semantics*](https://www.springer.com/gp/book/9781504128339)?
Géry Ogam
CC BY-SA 3.0
2012-03-04T07:53:47.187Z
2012-03-04T07:53:47.187Z
Uday Reddy
<p>I really enjoyed reading Winskel when I was taking the undergrad course on semantics. I can't tell if it's dated, though, since I don't do research in this field. A plus of Winskel is that you can find it translated in other languages than English. </p>

<p>For a further reading, more at a graduate level, I'd suggest John Mitchell's <a href="http://theory.stanford.edu/people/jcm/books.html">books</a> <em>Foundations for Programming Languages</em> and <em>Concepts in Programming Languages</em>. If you read only the first chapters, I guess they also meet your requirement of conciseness.</p>

<p>You will not find free drafts of these books, so if you have a restricted budget go for the "might" in Radu's answer.</p>

CC BY-SA 2.5
2010-12-05T15:52:33.940Z
2010-12-05T15:52:33.940Z
Alessandro Cosentino
<p>Well, I'm not an expert on the subject, but there are some general pieces of advice I can give.</p>
<p>First, there are some people who have already read the book and provided reviews on it. For instance, for the Winskel book <strong>The Formal Semantics of Programming Languages</strong> (see <a href="https://rads.stackoverflow.com/amzn/click/com/0262231697" rel="noreferrer" rel="nofollow noreferrer">[1]</a> and <a href="https://rads.stackoverflow.com/amzn/click/com/0262731037" rel="noreferrer" rel="nofollow noreferrer">[2]</a>) I found reviews on Amazon.</p>
<p>Part of one review reads:</p>
<blockquote>
<p>This book confuses between syntax and semantics since the beginning, like separating the literals from its values. No special notations were used to differentiate them. This is a crucial issue that the author should address in a topic like this. Also, some other notations he used is quite confusing, like showing the premises and conclusions.</p>
<p>The author seemed to assume that you have ALL the necessary prerequisites as he explained the background materials in a first few chapters (i.e. set theory, operational semantics, inductions, inductive definitions) very briefly. The style the author used in introduction is to put two or three paragraphs of texts and put some formulas then give exercises. Which is, for me, quite frustrating...</p>
</blockquote>
<p>18/20 people find the review useful. You can seek Amazon (or other sources) to see more reviews.</p>
<p>Second, Amazon offers Types and Programming Languages and <a href="http://rads.stackoverflow.com/amzn/click/0262162288" rel="noreferrer">Basic Category Theory for Computer Scientists</a> along with this book. On <a href="https://cstheory.stackexchange.com/questions/3253/what-books-should-everyone-read/3256#3256">another topic</a> Dave Clarke offers these books as excellent ones on &quot;Type Systems and Programming Language Semantics.&quot; Again, I'm not an expert, but those might be useful for you.</p>

CC BY-SA 2.5
2010-12-05T02:46:45.437Z
TaPL goes a bit too slow for my taste. It's a good book, but I mentioned this because the person asking seems worried about "long winded" books.
Radu GRIGore
CC BY-SA 2.5
2010-12-05T10:25:41.770Z
@Radu: Certainly TAPL is slow, but it is a rather good introduction. The Harper book you mentioned in your links goes much quicker and covers a lot more ground, though it has not yet been completed.
Dave Clarke
CC BY-SA 2.5
2010-12-07T23:09:28.427Z
Take that Amazon review of Winskel's book with a pinch of salt.  It's often used as a recommended text in undergraduate semantics courses and possibly attracts disgruntled students.  I've read the book and found the introductory chapters more than sufficient. His notation throughout seemed to be completely standard as well.
Dominic Mulligan
CC BY-SA 2.5
2010-12-05T01:31:10.380Z
2010-12-05T01:31:10.380Z
2020-06-17T09:38:08.363Z
Sadeq Dousti
<p>For a complete beginner studying operational semantics, I would suggest <strong>Programming Languages and Operational Semantics</strong> by <em>Maribel Fernández</em>. Everything is explained in a very simple manner which is easy to understand.
<a href="http://www.springer.com/computer/swe/book/978-1-4471-6367-1" rel="nofollow">http://www.springer.com/computer/swe/book/978-1-4471-6367-1</a></p>

CC BY-SA 3.0
2014-12-27T19:04:13.730Z
2014-12-27T19:04:13.730Z
Jibesh Patra
<p>I would like to add two books not found on the answers given up to now:</p>

<ul>
<li><a href="http://homepage.cs.uiowa.edu/~astump/" rel="nofollow noreferrer">Aaron Stump</a>, <em><a href="http://homepage.cs.uiowa.edu/~astump/books.html" rel="nofollow noreferrer">Programming Language Foundations</a></em></li>
<li><a href="http://people.cis.ksu.edu/~schmidt/" rel="nofollow noreferrer">David Schmidt</a>, <em><a href="http://people.cis.ksu.edu/~schmidt/text/densem.html" rel="nofollow noreferrer">Denotational Semantics: A Methodology for Language Development</a></em></li>
</ul>

<p>Stump's book is concise but very clear.</p>

CC BY-SA 3.0
2016-02-07T10:51:03.127Z
2017-09-08T16:55:26.243Z
2017-09-08T16:55:26.243Z
Jay
<p>I've been reading Nielson &amp; Nielson's "<a href="http://www.daimi.au.dk/~bra8130/Wiley_book/wiley.html">Semantics with Applications</a>", and I really like the subject. I'd like to have one more book on programming language semantics -- but I really can get only one.</p>

<p>I took a look at the <a href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;tid=11656">Turbak/Gifford</a> book, but it's too long-winded; I thought Winskel would be fine, but I have no access to it (it's not in our University library, and I'm short on money), and I'm not even sure if it's not dated. <a href="http://www.cs.uiowa.edu/~slonnegr/fsspl/Ordering.html">Slonneger</a> seems OK, but the practical part makes it somewhat too long, and I'm not very comfortable with his style.</p>

<p>So my question is -- is <a href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;tid=7054">Winskel</a> a good book? And is it dated?</p>

<p>Also, are there other concise books on the subject?</p>

CC BY-SA 2.5
2010-12-04T23:31:49.560Z
added links to publisher pages for all books. might be useful for others seeking to browse.
Suresh Venkat
CC BY-SA 2.5
2010-12-05T02:43:33.803Z
What kind of semantics are you interested in? Denotational? Operational? An overview?
Ohad Kammar
CC BY-SA 2.5
2010-12-05T05:05:14.260Z
@Ohad Kammar: I'm interested in both.
Jay
<reference-request><pl.programming-languages><semantics><denotational-semantics><books>
Books on programming language semantics
Jay
# Books on programming language semantics

(Asked by: username_0 on 2010-12-04)

I've been reading Nielson & Nielson's "[Semantics with Applications](http://www.daimi.au.dk/~bra8130/Wiley_book/wiley.html)", and I really like the subject. I'd like to have one more book on programming language semantics -- but I really can get only one.

I took a look at the [Turbak/Gifford](http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=11656) book, but it's too long-winded; I thought Winskel would be fine, but I have no access to it (it's not in our University library, and I'm short on money), and I'm not even sure if it's not dated. [Slonneger](http://www.cs.uiowa.edu/~slonnegr/fsspl/Ordering.html) seems OK, but the practical part makes it somewhat too long, and I'm not very comfortable with his style.

So my question is -- is [Winskel](http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=7054) a good book? And is it dated?

Also, are there other concise books on the subject?

**Tags:** reference-request, pl.programming-languages, semantics, denotational-semantics, books

> **Comments:**
> **username_1**: added links to publisher pages for all books. might be useful for others seeking to browse.  
> **username_2**: What kind of semantics are you interested in? Denotational? Operational? An overview?  
> **username_0**: @username_2: I'm interested in both.  

---

## 7 answers

### Answer by username_3 on 2010-12-05. Score: 35

It all depends how deep you want to go, and how much you already know. For a beginner Winksel's book is really nice, but yes, it's not introducing you to the state of the art in semantics as it was written about 20 years ago. Nevertheless it's still a good first introduction to the subject. It might also be worthwhile pointing out that T. Nipkow has formalised a substantial chunk of Winskel's book in Isabelle/HOL, see [here](http://www4.informatik.tu-muenchen.de/~nipkow/pubs/fac98.html). So if you want to learn using interactive proof assistants together with understanding the semantics of programming languages, you have a lot of coherent material to draw on.

Other books that are more advanced are:

* Gunter, [Semantics of Programming Languages](http://books.google.co.uk/books?id=Gu2wh2TqVcUC&printsec=frontcover&dq=gunter+semantics+of+programming+languages&source=bl&ots=Iu927q2mHD&sig=swEhGNI8turYbuFOLkt2ilp3nxE&hl=en&ei=4MP7TPunK4W5hAfV6JmOCw&sa=X&oi=book_result&ct=result&resnum=1&ved=0CBoQ6AEwAA#v=onepage&q&f=false), a more advanced book focussing on denotational semantics, an approach to semantics, which hasn't lived up to expectations. Focusses on purely functional lanugages and ignores concurrency. This is the book that I taught myself semantics from as an undergraduate, and in retrospect I wish I had used Winksel's book instead. Gunter is not an easy read for a beginner.
* [Domains and lambda-calculi](http://books.google.co.uk/books?id=2FycO5h5SocC&printsec=frontcover&dq=amadio+curien&source=bl&ots=7rBGCSks2y&sig=HAljsWHG6BD6NJqG2EG925_-guM&hl=en&ei=euL8TJndFoXNhAfGztzgCg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CBYQ6AEwAA#v=onepage&q&f=false) by Amadio and Curien. Another book coming written more in the domain-theoretic tradition, although it discusses process calculi.
* John Mitchell's books which have already been mentioned above. They are also mostly about sequential computation.

Books like Pierce's TAPL are very nice, but focus narrowly on one aspect of programming languages, namely types, as important as that is. I would not recommend it as a first introduction to the general area of programming languages, but it is mandatory to read for anyone who wants to learn about types.

Truth be told, I think there's currently no up-to-date introductory book on language semantics that reflects the substantial progress the last decade has seen, with its decisive shift away from denotational methods and sequential computation to concurrency (process calculi and game semantics), axiomatics semantics and the use of interactive proof assistants in verification.

**Update 22. April 2014:** Tobias Nipkow and Gerwin Klein have published a new book

* [Concrete Semantics](http://www21.in.tum.de/~nipkow/Concrete-Semantics/)

which can be seen as 'Winskel in Isabelle/HOL'. It's an introduction to the
semantics of programming languages (primarily operational and
axiomatic) but unlike previous pen-and-paper-based approaches, this
book expresses all its mathematics in Isabelle/HOL. In other words,
it's at the same time a book about theorem proving.

The book is brand new so I have not used for teaching, but it looks really suitable
as an introduction that is pitched at a lower level than [Software Foundations](http://www.cis.upenn.edu/~bcpierce/sf/)
by
Pierce et al.

> **Comments:**
> **username_2**: Is there a shift away from denotational methods? Seems to me more like the kind of people who previously would use hand-wavy proofs, nowadays are expected to produce formal proofs. As denotational methods still cannot easily model everything we do, and require many more prerequisites, those researchers use more approachable methods such as games, process calculi, proof assistants. I'm not sure whether there is a decline in denotational methods.  
> **username_4**: Please do not confuse *denotational* semantics with *domain theory*. Game semantics can be, and usually is, perfectly denotational, i.e., the meaning of a program is a function of the meanings of its parts.  
> **username_2**: I've opened a new thread regarding this comment. But even if I'm not sure I agree with your definition, game semantics are denotational in nature. I think I should replace "games" with "operational semantics" in my comment, and include game semantics as possibly another form of denotational semantics research. http://cstheory.stackexchange.com/questions/3577/what-constitutes-denotational-semantics  
> **username_3**: Ohad, I don't think the shift away from order-theoretic methods had to do with "hand-wavy proofs", but rather has been coming about because it turned out to be difficult to model richer programming languages with interesting effects in an order-theoretic manner.  
> **username_2**: I'm not convinced there is a shift. See my first comment, in light of Andrej's comment.  
> **username_3**: Is there a shift? An interesting question. How can we measure a shift? There are so many criteria we could apply, from the relatively concrete ones like amount of resarch grants given to different approaches, to vague ideas like mind-share. Given how involved we, as researchers, as employees, as applicants for grant money, are in the outcome of such a question, it's unlikely that we'd agree on an answer.  

---

### Answer by username_5 on 2010-12-05. Score: 22

Here is a random sample of materials available for free online:

* Winskel, *The Formal Semantics of Programming Languages*, [Google Books preview](http://books.google.com/books?id=JzUNn6uUxm0C&lpg=PP1&dq=Glynn%20Winskel&pg=PP1#v=onepage&q&f=false). I don't know anything about this book. It's on the list because the question specifically asks about it's content, which is online, mostly.
* Morgan, *Programming from Specification*, [list of ps files](http://users.comlab.ox.ac.uk/carroll.morgan/PfS/). The subject is refinement, which is the process of starting with high-level non-executable descriptions and systematically morphing then into something executable. Of course, every refinement step must preserve semantics, so it discusses a certain type of semantics too (based on predicate treansformers mostly).
* Harper, *Practical Foundations of Programming Languages*, [pdf of draft](http://www-2.cs.cmu.edu/~rwh/plbook/book.pdf). See the comment by username_6 below.
* Remy, *Using, Understanding, and Unraveling the OCaml Language*, [pdf](http://gallium.inria.fr/~remy/cours/appsem/ocaml.pdf). This is the book from which I learned functional programming (OCaml, more precisely) and I liked it *a lot*. It presents the semantics of basic language features in a very nice way and in the process presents lambda calculus and type theory on a `needs to know' basis.
* Peyton Jones, *The Implementation of Functional Programming Languages*, [djvu](http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/slpj-book-1987.djvu). The first chapters describe lambda calculus (and its `operational semantics') and how higher level language features are desugared into lambda calculus. In this sense, the paper gives an operational semantics for functional languages.
* Pierce (ed), *Advanced Topics in Types and Programming Languages*, [Google Books preview](http://books.google.co.uk/books?id=A5ic1MPTvVsC&lpg=PA389&ots=PmwxiCcx6s&dq=book%20didier%20remy&pg=PP1#v=onepage&q&f=false).
* Slonneger, *Syntax and Semantics of Programming Languages*, [list of pdf files](http://www.cs.uiowa.edu/~slonnegr/plf/Book/). I looked at this briefly a long time ago and didn't like it much. It's on the list because it's mentioned in the question.
* Brookes, *A Semantics for Concurrent Separation Logic*, [pdf](http://www.eecs.qmul.ac.uk/~ohearn/papers/brookes_reynoldsfest_tcs.pdf). This is a big article (80 pages), not a book. I included it because it's a fairly recent development that I find interesting.

> **Comments:**
> **username_1**: that's a lot of links :)  
> **username_6**: This would be more useful if it had been presented as a list. Anyway, I'd recommend the Harper book: click "might".  
> **username_1**: I agree. Radu, could you list out the books, so we know what we're clicking on ? this would be an excellent resource.  
> **username_5**: It's a list now. (The first version was posted around 2am, after sleeping about 5h the previous night. :P)  

---

### Answer by username_7 on 2012-03-04. Score: 17

I would divide the books on programming language semantics into two classes: those that focus on *modelling* programming language concepts and those that focus on the *foundational aspects* of semantics. There is no reason a book can't do both. But, usually, there is only so much you can put into a book, and the authors also have their own predispositions about what is important.

Winskel's book, already mentioned, does a bit of both the aspects. And, it is a good beginner's book. An equally good, perhaps even better, book is the one I started with: Gordon's [Denotational description of programming languages](http://books.google.co.uk/books/about/The_denotational_description_of_programm.html?id=_QAnAAAAMAAJ&redir_esc=y). This was my first book on semantics, which I read soon after I finished my undergraduate work. I have to say it gave me a firm grounding in semantics and I never had to wonder how denotational semantics differs from operational semantics or axiomatic semantics etc. This book will remain my all-time favourite on denotational semantics.

Other books that focus on *modeling* aspects rather than foundational aspects are the following:

* Tennent's [Semantics of programming languages](http://books.google.co.uk/books?id=K7N7QgAACAAJ&source=gbs_slider_cls_metadata_9_mylibrary), which is a more-or-less uptodate book on the semantics of imperative programming languages. It is easy to read. However, it tends to be abstract in later parts of the book and you might have to struggle to see why things are being done in a particular way.
* Reynolds's [Theories of programming languages](http://books.google.co.uk/books?id=2OwlTC4SOccC&source=gbs_slider_cls_metadata_0_mylibrary). Anybody specializing in semantics should definitely read this book. It is after all by Reynolds. (David Schmidt once remarked to me, "even if Reynolds is reading out the morning newspaper to you, you want to listen carefully, because you might learn something important"!) It has good coverage of both the modelling aspects and foundational aspects.

The best books on foundational aspects are Gunter's (which I regard as a graduate text book), and Mitchell's (which is good reference book to have on your bookshelf because it is quite comprehensive).

> **Comments:**
> **username_5**: It's very nice to have you here, Uday!  
> **username_7**: I am glad to be here too.  This is a very nice resource!  
> **username_8**: How about:Transitions and Trees: An Introduction to Structural Operational Semantics from Hans Hüttel 2010. Seems to have goood reviews but no one mentions it here.  
> **username_7**: @ArturoHernandez.  It appears that the original question was regarding *denotational semantics*.  So, no answers dealing with operational semantics were given.  See the first couple of chapters of Gunter's book for the differences between denotational and operational semantics.  
> **username_9**: @Uday: Thanks for the answer. What do "modelling programming language concepts" and "the foundational aspects of semantics" mean?  What are their differences and relations?  
> **username_7**: @username_9: To give the semantics of a programming language, you need to some form mathematical structures, e.g., sets in the simplest case, but sophisticated structures like domains, categories, coalgebras etc. for issues that sets can't handle.  By "foundational aspects," I mean the theory of these more sophisticated structures.  In the former case, the focus is on programming languages and, in the latter case, it is on the mathematical foundations.  
> **username_9**: @Uday: (1) by "you need to some form mathematical structures, e.g., sets in the simplest case", do you mean "you need not only some mathematical structures e.g. set in the simplest case"? (2) by "In the former case", do you mean  "modelling programming language concepts" or "sets in the simplest case"? by " in the latter case", do you mean "the foundational aspects of semantics" or "sophisticated structures like domains, categories, coalgebras etc. for issues that sets can't handle"?  
> **username_7**: @username_9 (1) Sets are the simplest form of mathematical structures that we learn in high school.  For programming semantics, we need more sophisticated mathematical structures. (2) I was using "former" and "latter" for the two phrases you asked me about : "modelling programming language concepts" and "foundational aspects of semantics".  
> **username_10**: What do you think of Robert Milne’s and Christopher Strachey’s 1976 book [*A Theory of Programming Language Semantics*](https://www.springer.com/gp/book/9781504128339)?  

---

### Answer by username_11 on 2010-12-05. Score: 9

I really enjoyed reading Winskel when I was taking the undergrad course on semantics. I can't tell if it's dated, though, since I don't do research in this field. A plus of Winskel is that you can find it translated in other languages than English.

For a further reading, more at a graduate level, I'd suggest John Mitchell's [books](http://theory.stanford.edu/people/jcm/books.html) *Foundations for Programming Languages* and *Concepts in Programming Languages*. If you read only the first chapters, I guess they also meet your requirement of conciseness.

You will not find free drafts of these books, so if you have a restricted budget go for the "might" in Radu's answer.


---

### Answer by username_12 on 2010-12-05. Score: 6

Well, I'm not an expert on the subject, but there are some general pieces of advice I can give.

First, there are some people who have already read the book and provided reviews on it. For instance, for the Winskel book **The Formal Semantics of Programming Languages** (see [[1]](https://rads.stackoverflow.com/amzn/click/com/0262231697) and [[2]](https://rads.stackoverflow.com/amzn/click/com/0262731037)) I found reviews on Amazon.

Part of one review reads:

> This book confuses between syntax and semantics since the beginning, like separating the literals from its values. No special notations were used to differentiate them. This is a crucial issue that the author should address in a topic like this. Also, some other notations he used is quite confusing, like showing the premises and conclusions.
>
> The author seemed to assume that you have ALL the necessary prerequisites as he explained the background materials in a first few chapters (i.e. set theory, operational semantics, inductions, inductive definitions) very briefly. The style the author used in introduction is to put two or three paragraphs of texts and put some formulas then give exercises. Which is, for me, quite frustrating...

18/20 people find the review useful. You can seek Amazon (or other sources) to see more reviews.

Second, Amazon offers Types and Programming Languages and [Basic Category Theory for Computer Scientists](http://rads.stackoverflow.com/amzn/click/0262162288) along with this book. On [another topic](https://cstheory.stackexchange.com/questions/3253/what-books-should-everyone-read/3256#3256) username_6 offers these books as excellent ones on "Type Systems and Programming Language Semantics." Again, I'm not an expert, but those might be useful for you.

> **Comments:**
> **username_5**: TaPL goes a bit too slow for my taste. It's a good book, but I mentioned this because the person asking seems worried about "long winded" books.  
> **username_6**: @Radu: Certainly TAPL is slow, but it is a rather good introduction. The Harper book you mentioned in your links goes much quicker and covers a lot more ground, though it has not yet been completed.  
> **username_13**: Take that Amazon review of Winskel's book with a pinch of salt.  It's often used as a recommended text in undergraduate semantics courses and possibly attracts disgruntled students.  I've read the book and found the introductory chapters more than sufficient. His notation throughout seemed to be completely standard as well.  

---

### Answer by username_14 on 2014-12-27. Score: 4

For a complete beginner studying operational semantics, I would suggest **Programming Languages and Operational Semantics** by *Maribel Fernández*. Everything is explained in a very simple manner which is easy to understand.
<http://www.springer.com/computer/swe/book/978-1-4471-6367-1>


---

### Answer by username_0 on 2016-02-07. Score: 4

I would like to add two books not found on the answers given up to now:

* [Aaron Stump](http://homepage.cs.uiowa.edu/~astump/), *[Programming Language Foundations](http://homepage.cs.uiowa.edu/~astump/books.html)*
* [David Schmidt](http://people.cis.ksu.edu/~schmidt/), *[Denotational Semantics: A Methodology for Language Development](http://people.cis.ksu.edu/~schmidt/text/densem.html)*

Stump's book is concise but very clear.


---

