Madhavan Mukund



Programming Language Concepts
Jan-Apr 2025

Programming Language Concepts

January-April, 2025


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, 7 Jan 2025 (Class Notes (pdf))

    • Introduction
    • Declarative vs imperative programming
    • Storage, passing references
    • Abstract datatypes and objects
  • Lecture 2, 16 Jan 2025 (Class Notes (pdf))

    • Object-oriented programming: abstraction, subtyping, dynamic dispatch, inheritance
    • Classes and objects: Python examples and the need for public/private modifiers
    • Introduction to Java