Instructors: Madhavan Mukund, S P Suresh
Teaching Assistants: TBA
Evaluation:
Quizzes (10%), assignments (30%), midsemester exam (20%), final exam (40%)
Copying is fatal
Course outline (tentative)
Storage allocation: scope, lifetime, activation records, call graphs and call stack, control and access link, heaps and dynamic allocation, memory management, garbage and dangling pointers
Object oriented programming: Classes, subclasses and inheritance, dynamic dispatch, runtime polymorphism, interfaces
Generic programming
Reference passing: ownership, moving and borrowing
Exception handling
Concurrent programming: threads, race conditions, mutual exclusion, semaphores, monitors, message passing, closures
Theory of functional programming
Untyped lambda calculus: syntax, reduction, encoding arithmetic, encoding recursive functions, normal forms, Church-Rosser theorem
Typed lambda calculus: Curry typing, weak and strong normalization, Hindley-Milner type inference, unification
Prerequisites
Exposure to some imperative and functional programming languages (e.g. Python, Haskell)
Java and Rust will be introduced to illustrate concepts listed above
Textbooks and lecture notes:
Alfred V Aho, Monica S Lam, Ravi Sethi, Jeffrey D Ullman: Compilers: Principles, Techniques, and Tools, Pearson (2013)
Steve Klabnik, Carol Nichols: The Rust Programming Language, No Starch Press (2023)
John C Mitchell: Concepts in Programming Languages, Cambridge University Press (2004)
Michael L Scott: Programming Language Pragmatics, (4th edition), Morgan Kaufmann (2016)
Madhavan Mukund: Lecture notes on Programming Language Concepts (2004)
Madhavan Mukund: Lecture notes on Generic Programming in Java (2006)
Assignment 1, 3 February 2025, due 12 February 2025.
Lecture 1, 7 Jan 2025 (Class Notes (pdf))
Lecture 2, 16 Jan 2025 (Class Notes (pdf))
Lecture 3, 21 Jan 2025 (Class Notes (pdf))
Lecture 4, 23 Jan 2025 (Class Notes (pdf))
Java: class hierarchy and polymorphism
Lecture 5, 28 Jan 2025 (Slides (pdf) )
Reading material: (Note, there will be details in the references below that were not discussed in class.)
Lecture 6, 30 Jan 2025 (Class Notes (pdf), Rust Notebook (source, pdf) )
Lecture 7, 4 Feb 2025 (Rust Notebook (source, pdf) )
Lecture 8, 6 Feb 2025 (Slides (pdf) )
Lecture 9, 11 Feb 2025 (Class Notes (pdf), Rust Notebook (source, pdf) )
Lecture 10, 13 Feb 2025 (Slides (pdf) )