Madhavan Mukund



Programming Language Concepts
Jan-Apr 2026

Programming Language Concepts

January-April, 2026


Administrative details

  • 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:


Assignments

  • TBA

Lecture summary

  • Lecture 1, 6 Jan 2026 (Class Notes (pdf))

    • Introduction
    • Declarative vs imperative programming
    • Call by value, call by reference
    • Datatypes, storage
  • Lecture 2, 8 Jan 2026 (Class Notes (pdf))

    • Object-oriented programming: abstraction, subtyping, inheritance
    • Classes and objects: Python examples and the need for public/private modifiers
    • Introduction to Java
  • Lecture 3, 13 Jan 2026 (Class Notes (pdf))

    • Introduction to Java: basic datatypes, control flow
  • Lecture 4, 20 Jan 2026 (Class Notes (pdf))

    Java: classes, inheritance, polymorphism

    • Subclasses and inheritance
    • Overloading and overriding methods
    • Dynamic dispatch and runtime polymorphism
  • Lecture 5, 22 Jan 2026 (Class Notes (pdf))

    Java: inheritance

    • Abstract methods and abstract classes
    • Simple generic programming
    • Interfaces and implementations

    Storage allocation

    • Scope and lifetime of variables, activation records, call graph, call stack
  • Lecture 6, 27 Jan 2026 (Class Notes(pdf))

    • Storage allocation: scope and lifetime of variables, activation records, call graphs and call stack, control and access link, heaps and dynamic allocation, memory management, garbage and dangling pointers

    Reading material: (Note, there will be details in the references below that were not discussed in class.)

    • Mitchell: Chapter 7, 7.1, 7.2, 7.3.1, 7.3.3
    • Scott: Chapter 3.1, 3.2, 3.3.1, 3.3.2
    • Aho et al: Chapter 7.1–7.4