CS4536: Programming Languages (D-term 2016)

Lectures

You do not need to purchase a textbook. For much of the course, we will use Programming Languages: Application and Interpretation (2012 edition), which is available online. Some later material will come from published papers. Some will come from custom notes. Links will be provided as needed.

DateTopicChapters and Notes
May 2-3Lambda CalculusTextbook first edition, chapter 22
Apr 28-29Model Checking
Apr 25-26Garbage Collection11
Apr 22More Polymorphism, Typing Objects15.3.1, 15.3.8
Apr 21No class (Project Presentation Day)
Apr 19Type Soundness, Polymorphism15.2.7, 15.3.1
Apr 18No class (Patriot's Day)
Apr 14-15Type Inference15.3.2 (the implementation); the presentation in the first edition of the text (Chapter 30) matches the examples we did by hand, before looking at the implementation
April 12Typing Recursion, Normalization15.2.3
April 11The ML-style Functional Languages (guest lecture by Fred)
Apr 7-8Introduction to Type Checking15.1-15.2.3, 15.2.6; Friday starter
April 5Objects10; code from class
April 4Recursion, Lazines9.2, 17.1; starter code
April 1Passing Parameters8.4
March 31Implementing Mutation8.2-8.3; starter code
March 29Understanding Mutation8.1
March 28Mutating Structure8 (through roughly 8.1.5)
March 24-25First-class functions7; starter code
March 22Environments6
March 21Substitution5
March 18Top-Level Functions5; starter code
Extra Notes On Grammars and Parsing
March 17Desugaring4
March 15Basic Interpreters2 and 3; code so far
March 14Overview; Modeling Languages1 and 3.1

Racket Crash Course

For a really crash course (that might be enough combined with the text and lecture notes), see these two examples of functions over lists. I've added comments to help you know what to take from these examples.

For a bit more detail, the Racket Documentation provides a basic overview of Racket.

Neither of these sources cover the Racket type-annotation package that we will use (called plai-typed) -- the textbook provides a crash-course in plai-typed; we will also go over it in class during the first days of the term. Adding types affects the operators used to build lists (in section 2.4 of the tutorial): in plain Racket, (list 1 2 3) and '(1 2 3) are equivalent, but in plai-typed, the first produces data of type (listof number) and the second produces data of type s-expression. We will discuss the difference in lecture. Unless you are writing input to a parser, use list or cons to create lists.