CS383 Programming Languages

Course Summary

A small number of concepts underline the hundreds of programming languages that have been designed and implemented. This course introduces the concepts that serve as a basis for programming languages. It aims to provide the students with a basic understanding and appreciation of the various essential programming language constructs, programming paradigms, evaluation criteria and language implementation issues. The course covers concepts from functional, imperative, object-oriented, logic programming and optionally scripting languages. These concepts are demonstrated by incrementally adding more features to a simple functional language called Lambda Calculus to eventually arrive at a full-fledged, user-friendly general purpose programming language. At the end of the course, a number of modern programming languages from various paradigms are presented as case studies.

Latest News and Announcements

Administrative Information

Lectures: Mon 12:55-3:40, Dongshangyuan 105.

Instructor: Kenny Zhu - SEIEE 03-407 Phone: 3420-4592 Email: kzhu[at]cs[dot]sjtu[dot]edu[dot]cn
Office hours: by appointment via email or ask after class

Teaching Assistant: Bran Li, Yvonne Huang
Email: likaijian[at]sjtu[dot]edu[dot]cn, huang_yvonne[at]foxmail[dot]com
Office hours: Thu 16:00-17:00 @ SEIEE 03-341

Reference Textbooks:

  1. Types and Programming Languages by Benjamin C. Pierce, The MIT Press.
  2. Practical Foundations for Programming Languages by Robert Harper, Cambridge University Press.
  3. Programming Languages Principles and Paradigms by Allen Tucker and Robert Noonan, McGraw Hill / 2009-5-1 (Also published by Tsinghua University Press and available at the University Textbook Office).
  4. Programming Languages: Application and Interpretation by Shriram Krishnamurthi, Brown, Online.


  1. In-class quizzes: 10%
  2. Tutorial participation: 5%
  3. Assignments: 30%
  4. Project: 25% Project Website
  5. Final Exam: 30%


ClassDateTopic SlidesResourcesHomework
102/15/2022 Introduction[lecture] [tutorial] Tucker Ch.1 hw1 (pdf) hw1 (tex) hw1 (sol)
202/21/2022 Inductive Definition and Proofs [lecture] [tutorial] Harper Ch. 1-4 hw2 (pdf) hw2 (tex) hw2 (sol)
32/29/2022 Untyped Lambda Calculus [lecture] [tutorial] Pierce Ch 5, 8, 9 hw3 (pdf) hw3 (tex) hw3 (sol)
43/7/2022 Untyped Lambda Calculus (II), Simply-typed Lambda Calculus [lecture] [tutorial] Pierce Ch 8, 9 hw4 (pdf) hw4 (tex) hw4 (sol)
503/30/2022 Extension to Simply-typed Lambda Calculus (I) [lecture] [tutorial] Pierce Ch. 11 hw5 (pdf) hw5 (tex) hw5 (sol)
603/21/2022 Extension to Simply-typed Lambda Calculus (II) [lecture] [tutorial] Pierce Ch. 11 hw6 (pdf) hw6 (tex) hw6 (sol)
703/28/2022 Going Imperative [lecture] [tutorial] Pierce Ch. 12 hw7 (pdf) hw7 (tex) hw7 (sol)
804/02/2022 Memory Management [lecture] [tutorial] Tucker Ch. 11 hw8 (pdf) hw8 (tex) hw8 (sol)
904/11/2022 Type Inference (I)[lecture] [tutorial] Pierce Ch. 22, 23 hw9 (pdf) hw9 (tex) hw9 (sol)
1004/20/2022 Type Inference (II) [lecture] [tutorial] Pierce Ch. 22, 23 hw10 (pdf) hw10 (tex) hw10 (sol)
1104/25/2022 Subtyping [lecture] [tutorial] Pierce Ch. 15 hw11 (pdf) hw11 (tex) hw11 (sol)
1205/17/2022 Object-Oriented Programming [lecture] [tutorial] Tucker Ch. 14 hw12 (pdf) hw12 (tex) hw12 (sol)
1305/09/2022 Logic Programming [lecture] [tutorial] Tucker Ch. 15 hw13 (zip) hw13 (sol)
1405/15/2022 OCaml (I) [lecture] [tutorial] N/A hw13 (zip)
1505/23/2022 OCaml (II) [lecture] [tutorial] N/A
1506/09/2022 Concurrent Programming [lecture] [video] [tutorial] Tucker Ch. 18 hw15 (pdf) hw15 (tex)
Copyright (c) Kenny Q. Zhu, 2012-2022.