Course Information

This is a course about the foundations of programming languages. A programming language is defined by its syntax, static semantics, and dynamic semantics. Each of these components of the language is based on familiar mathematical and logical foundations. Studying the foundations of programming languages has at least the following benefits: We will study everything in the context of Java. The mathematical foundations of Java are not that different from those of other modern languages, but Java is interesting for three reasons. First it is widely accessible and popular. Second it has several subtle points that programmers can easily misunderstand or overlook. And third it became popular by making claims about the safety of applets. Because software practice is moving away from monolothic applications to dynamically-loaded distributed components, this safety claim was particularly interesting. For our purposes, it is even more interesting that the initial claim that Java applets are safe is wrong and the entire class-loading architecture had to be redesigned from scratch!

In summary, the Java language, with its important safety properties, provides a good context for the study of the foundations of programming languages.

In more detail, the course will proceed as follows:

This development closely follows the Jbook but skips most of Part II which is related to the compiler and its correctness. This material is also interesting but I don't think we have time to cover it. See the schedule for more details.