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)
TBA
Lecture 1, 7 Jan 2025 (Class Notes (pdf))
Lecture 2, 16 Jan 2025 (Class Notes (pdf))