This is the Web site for Programming Languages: Application and Interpretation, often referred to by its initials as PLAI (pronounce it like “play”). Over the years well over fifty academic institutions (that I know of) have used PLAI.
PLAI is designed for upper-level courses that introduce the main ideas of programming languages. In the US, it is designed for students in their second- through fourth-years of college, as well as starting graduate students. However, PLAI has been used with students much younger, including in a few select high school classes.
The third edition finally came out in December 2022! The latest version is 3.2.5.
We have a Zulip chat for people who want to discuss the book. Note that the chat is primarily intended for educators, where we discuss conceptual topics, organization, design decisions, related materials, etc. It is not designed for asking homework questions, and people who abuse it may be banned.
The current public release is version 3.2.5 (2025-07-14). You can choose between two formats:
It fixes lots of small errors, incorporates a few great pedagogic suggestions, and more thoroughly integrates the SMoL Tutor and Stacker (but not as much as it should!).
The EPUB version is “experimental”:
Ideally, please use a reader that supports both. The monospace should become evident very quickly (look at any of the code in the book: e.g., search for define
). For background colors, go to the section on “Judgments and Errors” and see whether you see any background colors as you flip through the pages.
3.2.2 (2023-02-26) fixes a few annoying typos in version 3.2.1 (2023-01-10):
The “electronic-friendly” version has hyperlinks in the Table of Contents, while the “print” version has page numbers. Unfortunately, cross-references within the latter document are still hyperlinks (blame Google Docs), and will hence likely be useless on paper. Sorry.
Its main difference from 3.2.0 (2022-12-08) is, in addition to numerous typo fixes, now including links to the full SMoL Tutor by Kuang-Chen Lu. Please be sure to do this self-paced tutor!
A central part of the book’s revised pedagogy is to do the SMoL Tutor. You can learn about its background from this blog post, and directly access it here:
The material is intentionally broken down into a collection of short tutors so none should take too long (estimate 10—20 minutes each).
We strongly recommend that you do the tutors before you start on the book!
Is the book free?
Yes, the book is available free-of-cost under a CC BY-NC-SA license.
Is there a paper edition?
Not yet. Every channel creates extra work, so I don’t want to take on the responsibility of making and maintaining this until I know it’s worthwhile. (You can always print a copy for yourself!)
If you’re interested in being able to purchase a printed copy, please vote on this issue. That will tell me that it’s worth the time to make one!
I thought you said you wouldn’t publish an EPUB version?
I did! I was trying to generate EPUB directly from Google Docs, and the result was pretty awful; I couldn’t imagine anyone using it. Then Jamie Cooper suggested Calibre. That didn’t seem any better…going from PDF. But generating HTML from Google Docs and having Calibre convert that to EPUB worked well enough that I was happy to make the result public. But I was still having frustrating monospace font problems, which are significant in this book. But then Pradeep Gowda dove in to figure it out, making the result extremely good!
What changed in the third edition?
Many, many things. Please read the Preface.
How often do you intend to release versions? When will the next version come out?
While it’s attractive to authors to push new versions on a regular basis, treating books like software, that can be very disruptive to users.
Anyway, my plan had been to release a new version every year. Unfortunately, I had an injury in 2023 that completely threw me off my schedule. Hence the long gap between 3.2.2 and 3.2.5.
That said, I am also thinking of new ideas for the book. As a result, this may be the end of the road for version 3, and there may be a whole new type of version 4! PLAI itself is nowhere near done; I’ve only just figured out how to write it!
How do I stay up-to-date with releases and the like?
Please join the group plai-notifications. It will be very low volume: postings only when there is something significant (on the order of at most a few a year). It is expressly not a discussion forum, to keep volume low.
How do I report problems, errors, suggestions, etc.?
Please file issues at this repository. Thank you!
The first edition was written between 2000 and 2007.
The second edition was written in 2012. It has much of the same content as the first edition. The major changes include:
Switching to a statically typed (and type-inferred) language.
Over the years, teaching the material had taught me newer and better ways of presenting some of the content. These changes were reflected in the prose.
Low-level rewriting of the prose in several places.
Reducing a bit of the content, in part because it was not entirely compatible with the typed language.
Accompanied by an online course, with videos.
I am absolutely flattered that the second edition of the book has been translated into Chinese by volunteers. You can find it on GitHub. The translators are Lotuc and Chongkai Zhu / 朱崇恺. I’m immensely grateful to them.
A phylogenetic branch, Programming and Programming Languages (PAPL), was constructed between 2013 and 2020:
The first half of PAPL is suited for an accelerated introduction to computer science.
The second half of PAPL is a further revision of PLAI’s second edition. However, there is no real need to read this part any more. The relevant parts are mostly incorporated into PLAI’s 3/e.
A major difference is that PAPL is completely written in Pyret.
PAPL is co-authored with Joe Politz and Ben Lerner, two amazing co-authors.