Programming Languages 2020

This course has been developed by Alexander Kurz and Samuel Balco for the students of Chapman University and will be taught by Alexander Kurz.

Notes and Materials for a course on Programming Languages Fall 2020 at Chapman University.

Quick links:

Acknowledgements:

The specific way we intertwine theory and practice may be original, but we build on a long tradition of teaching courses on principles of programming languages. The idea that the best way to understand how programming languages work under the hood is to learn how to build your own, goes back at least to the MIT course/"Wizard Book" by Abelson and Sussman, Structure and Interpretation of Computer Programs, which is still worth reading today. Our use of the parser generator BNFC for the language LambdaNat follows Aarne Ranta's book Implementing Programming Langugages, which forms the basis for the Programming Language Technology course at Chalmers University. We will hear more about this in our course on Compiler Construction next semester. LambdaNat itself is a lambda calculus with just enough additional syntactic sugar so that writing programs in LambdaNat is similar enough to mainstream functional programming. The way we then extend LambdaNat to our second language, LambdaFun, by adding while loops, memory allocation, assignment, and pointers is inspired by Michael Spivey's course on Programming Languages at Oxford University.

I am also grateful to my friends and colleagues from the Midlands Graduate School in the Foundations of Computing Science who have influenced with their graduate level courses from 2002 onwards the choice of material. In fact, it is one of the aims of this course to provide at the undergraduate level the foundations that will equip interested students with the knowledge needed to study more advanced topics in programming languages. Many of the paragraphs labelled "Further Study'' are meant to provide bridges to such graduate level courses.

Many thanks to all with whom I had the opportunity to discuss the contents of the course, including (but not limited to) Roy Crole, Peter Jipsen, Drew Moshier, Paula Severi, and Fer-Jan de Vries; to the students of 2018 and 19 for continuing challenge and feedback; to all the colleagues from whom I have been learning over the years.

Some links

These links should go somewhere else in the end but I keep them here for now ...

Bob Martin - "The Future of Programming"

Compiling Lisp to JavaScript From Scratch in 350 LOC

Bjarne Stroustrup - The Essence of C++