Useful reading
The following is a non-systematic and idiosyncratic list,
accumulated over time, of readings that I find useful for students
of programming systems (and, in particular, for one student:
me).
Textbooks, surveys, tutorials
Broad interest
- Types
and Programming Languages, textbook by
Benjamin C. Pierce
- The best introduction to the formal semantics of programming
languages that I've ever seen. Pierce's writing combines
lucidity, accessibility, and real technical meat in a way that
that few other authors can match. This book serves equally well
as a teaching tool and a reference, and belongs on the desk
(and, frequently, in the hands) of every serious student of
programming languages.
- Uniprocessor
Garbage Collection Techniques, survey paper by
Paul R. Wilson of the
UT Austin OOPS group
(Extended version; accepted to ACM Computing Surveys.)
- 90% of what the average programmer "knows" about dynamic
memory management (which includes garbage collection) is wrong.
If only everyone would read this survey...
Niche topics
- Tree
Automata Techniques and Applications, textbook in progress
by many authors (see foregoing link).
- I found this book useful when investigating some
XML-language issues (typed XML processing languages, notably XDuce, often use tree
automata as an underlying formalism).
- Elements of
Basic Category Theory; technical report by
Alfio Martini
- Helpful for those who can't be bothered to buy a textbook on
category theory until they know more about it. I keep hearing
about category theory in many contexts (mostly related to
monads), and I've been meaning to read this tech report Real
Soon Now for at least a year. Anyway, it appears to give an
accessible ground-up introduction to the subject.
Favorite research papers
- Self: The
Power of Simplicity, David Ungar and Randall B. Smith.
- Self is a language that repays study. I find that every
time I read this paper, I gain some new idea about programming
languages. I've probably read it about a dozen times now.
- FeatherWeight
Java: A Core Calculus for Java and GJ,
Atsushi Igarashi, Benjamin C. Pierce, and Philip Wadler.
(Technical report version; also appeared in
OOPSLA '99 and
TOPLAS.)
- A formal description of Java's "important" features that is
pleasingly simple and rigorous, yet looks nothing like the
lambda calculus. An inspiration to language designers
everywhere who don't want to base their language on the lambda
calculus, for whatever reason.
- Non-Dependent
Types for Standard ML Modules, Claudio Russo (PPDP'99)
- Dave
MacQueen's original paper on the Standard ML module system
claims that SML module types are dependent --- i.e.,
the types depend on terms. Attempts to extend this system to
higher-order modules have been notoriously hairy (interested
readers should begin with the classic
Harper/Lillibridge paper and citations
thereof). Russo's contribution is a formal account of SML
modules that cleanly eliminates dependent types
entirely. I find this result both surprising (it upsets
fifteen years of conventional wisdom) and natural (the
"dependence" of module types has always seemed a little
suspicious to me). If you sweat your way through Russo's
formalism --- which is actually easier than it initially appears
--- you'll understand ML modules far better than you did before.
I haven't gotten around to the recursive and higher-order
extensions though.
- ML
Modules and Haskell Type Classes: A Constructive Comparison,
Stefan Wehr and Manuel M. T. Chakravarty (in submission, 2006)
- Fills a major longstanding hole in the module systems
literature, and bridges the gap between two of the four major
currents in contemporary module systems research: parameterized
modules and type classes (the other two are virtual types and
aspects). Also a decent introduction to either modules or type
classes if you know one but not the other.
Miscellany
- The Early History of Smalltalk, Alan Kay (alternate HTML version)
- Required reading for every langage designer.
- The Expression Problem,
Philip Wadler
- A classic post to the java-genericity mailing list.
- Who Says C is Simple?,
George Necula
- Section from the manual for CIL,
an infrastructure for analyzing and processing C programs. The
next time some hackers tell you that C's a clean and simple
programming language (unlike those weird, complicated
languages like ML and Haskell), send them to this document.
- Notes on SML97's Value Restriction, Geoffrey S. Smith
- What it sounds like. The Commentary on Standard ML
has not been updated for SML'97; The Definition of Standard
ML, Revised is rather terse; and the SML/NJ notes on
SML'97 Types and Type Checking may not be enough for some
readers.