- Feb 14, 2022: Assignment 1 released, due Feb 19.
- Feb 21, 2022: Assignment 2 released, due Feb 26.
- Mar 1, 2022: Assignment 3 released, due Mar 5.
- Mar 7, 2022: Assignment 4 released, due Mar 12.
- Mar 15, 2022: Assignment 5 released, due Mar 19.
- Mar 22, 2022: Assignment 6 released, due Mar 26.
- Mar 29, 2022: Assignment 7 released, due Apr 2.
- Apr 2, 2022: Assignment 8 released, due Apr 9.
- Apr 11, 2022: Assignment 9 released, due Apr 16.
- Apr 14, 2022: Project released. Please check out the Project Website.
- Apr 21, 2022: Assignment 10 released, due Apr 23.
- Apr 26, 2022: Assignment 11 released, due Apr 30.
- Apr 27, 2022: Our class next Monday will be as usual in spite of the Labor day holiday.
- May 02, 2022: Assignment 12 released, due May 7.
- May 09, 2022: Assignment 13 released, due May 14.
- May 16, 2022: Assignment 14 released, due May 21.
- May 24, 2022: Slides of Lecture 15 and previous tutorials released.

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

- Types and Programming Languages by Benjamin C. Pierce, The MIT Press.
- Practical Foundations for Programming Languages by Robert Harper, Cambridge University Press.

- 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).

- Programming Languages: Application and Interpretation by Shriram Krishnamurthi, Brown, Online.

**Assessment**:

- In-class quizzes: 10%
- Tutorial participation: 5%
- Assignments: 30%
- Project: 25% Project Website
- Final Exam: 30%

Class | Date | Topic |
Slides | Resources | Homework |

1 | 02/15/2022 | Introduction | [lecture] [tutorial] | Tucker Ch.1 | hw1 (pdf) hw1 (tex) hw1 (sol) |

2 | 02/21/2022 | Inductive Definition and Proofs | [lecture] [tutorial] | Harper Ch. 1-4 | hw2 (pdf) hw2 (tex) hw2 (sol) |

3 | 2/29/2022 | Untyped Lambda Calculus | [lecture] [tutorial] | Pierce Ch 5, 8, 9 | hw3 (pdf) hw3 (tex) hw3 (sol) |

4 | 3/7/2022 | Untyped Lambda Calculus (II), Simply-typed Lambda Calculus | [lecture] [tutorial] | Pierce Ch 8, 9 | hw4 (pdf) hw4 (tex) hw4 (sol) |

5 | 03/30/2022 | Extension to Simply-typed Lambda Calculus (I) | [lecture] [tutorial] | Pierce Ch. 11 | hw5 (pdf) hw5 (tex) hw5 (sol) |

6 | 03/21/2022 | Extension to Simply-typed Lambda Calculus (II) | [lecture] [tutorial] | Pierce Ch. 11 | hw6 (pdf) hw6 (tex) hw6 (sol) |

7 | 03/28/2022 | Going Imperative | [lecture] [tutorial] | Pierce Ch. 12 | hw7 (pdf) hw7 (tex) hw7 (sol) |

8 | 04/02/2022 | Memory Management | [lecture] [tutorial] | Tucker Ch. 11 | hw8 (pdf) hw8 (tex) hw8 (sol) |

9 | 04/11/2022 | Type Inference (I) | [lecture] [tutorial] | Pierce Ch. 22, 23 | hw9 (pdf) hw9 (tex) hw9 (sol) |

10 | 04/20/2022 | Type Inference (II) | [lecture] [tutorial] | Pierce Ch. 22, 23 | hw10 (pdf) hw10 (tex) hw10 (sol) |

11 | 04/25/2022 | Subtyping | [lecture] [tutorial] | Pierce Ch. 15 | hw11 (pdf) hw11 (tex) hw11 (sol) |

12 | 05/17/2022 | Object-Oriented Programming | [lecture] [tutorial] | Tucker Ch. 14 | hw12 (pdf) hw12 (tex) hw12 (sol) |

13 | 05/09/2022 | Logic Programming | [lecture] [tutorial] | Tucker Ch. 15 | hw13 (zip) hw13 (sol) |

14 | 05/15/2022 | OCaml (I) | [lecture] [tutorial] | N/A | hw13 (zip) |

15 | 05/23/2022 | OCaml (II) | [lecture] [tutorial] | N/A | |

15 | 06/09/2022 | Concurrent Programming | [lecture] [video] [tutorial] | Tucker Ch. 18 | hw15 (pdf) hw15 (tex) |