Foundations of Programming Languages

Last updated: 2021-12-31

Course Information

Abstract

In this course we study concepts of programming languages, develop better programming skills, and learn to design your own languages.

Time

Tuesday and Thursday, 15:20 - 16:55, starting from Sep. 14

Classroom

Room 1118 | Zoom: 361 038 6975, pw: BIMSA

TA

Meng Cao and Pipi Hu

Schedule and Notes

We borrow courseware of CS242@Stanford. Below are local copies of lecture notes, given for your convenience.

DateTopicReading
Sep. 14Course overview and HaskellChap. 5
Sep. 16FoundationsRef. 2
Sep. 21Mid-Autumn holiday
Sep. 23Foundations, continued: operational semantics.
Sep. 26Scopes
Sep. 28TypesChap. 6
Sep. 30Type ClassesChap. 7
Oct. 05Holiday
Oct. 07Holiday
Oct. 12Type Classes, continued
Oct. 14IO MonadChap. 1-2 of Ref.7, Chap. 7 of Ref. 3
Oct. 19Exceptions and Continuations; Garbage collectionChap. 8, 3. Sec. 7.3 of Ref. 4
Oct. 21Memory management and garbage collectionRef. 5
Oct. 26Computability and ModularityChap. 2, 9
Oct. 28Object-Oriented LanguagesChap. 10-13
Nov. 02C++ and Java
Nov. 04Subtyping
Nov. 09Java implementation
Nov. 11Templates and GenericsRef. 8, 9, 10
Nov. 16Concurrency, notes from Herlihy and Shavit. )
Nov. 18Concurrency: Linearizability
Nov. 23Concurrency: List algorithms
Nov. 25Concurrency: List algorithms, continued
Nov. 30Relaxed memory modelRef. 6
Dec. 02Relaxed memory model, continued

References

  1. Textbook: Concepts in Programming Languages by John C. Mitchell.
  2. Lecture Notes on the Lambda Calculus by Peter Selinger.
  3. Real-World Haskell
  4. Exception Handling in the I/O Monad
  5. Java Garbage Collection handbook
  6. WMC Course by Ori Lahav and Viktor Vafeiadis
  7. Tackling the Awkward Squad
  8. Meta-programming in C++
  9. Java Generics
  10. F-Bounded Polymorphism