- Feb 1, 2021: Course Page re-opens.
- Feb 23, 2021: First tutorial and assignment released. The assignment 1 is due this Saturday. Please email your submission to Bran.
- Mar 1, 2021: Assignment 2 is released.
- Mar 18, 2021: Tutorial 3 and 4 released. Course website is back.
- Mar 24, 2021: Tutorial 4 and 5 released.
- Mar 30, 2021: Assignment 6 and Tutorial 6 released.
- Apr 13, 2021: Project is released below!
- Apr 13, 2021: Assignment 7 and tutorial 7 also released.
- Apr 21, 2021: Assignment 8 and tutorial 8 also released.
- Apr 28, 2021: Assignment 9 and tutorial 9 released.
- May 7, 2021: Assignment 10 and tutorial 10 released.
- May 11, 2021: Assignment 11 released.
- May 17, 2021: Assignment 12 and tutorial 12 released.
- May 24, 2021: Assignment 13 and tutorial 13 released. Exam will be on week 16. Last 100 mins. Assignment type of questions.
- May 31, 2021: Assignment 14 and tutorial 14 released. The final exam will be from 1:40 to 3:40 pm next Monday.

**Lectures**: Mon 12:55-3:40, Dongshangyuan 206.

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

Email: likaijian[at]sjtu[dot]edu[dot]cn

Office hours: Thu 16:00-17:00 @ SEIEE 03-329

**Reference Textbooks**:

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

- Practical Foundations for Programming Languages by Robert Harper, Cambridge University Press.

- Types and Programming Languages by Benjamin C. Pierce, The MIT Press.
- 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/22/2021 | Introduction | [lecture] [tutorial] | Tucker Ch.1 | hw1 (pdf) hw1 (tex) |

2 | 03/10/2021 | Inductive Definition and Proofs | [lecture] [tutorial] | Harper Ch. 1-4 | hw2 (pdf) hw2 (tex) |

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

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

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

6 | 04/16/2021 | Extension to Simply-typed Lambda Calculus (II) | [lecture] [tutorial] | Pierce Ch. 11 | hw6 (pdf) hw6 (tex) |

7 | 04/12/2021 | Going Imperative | [lecture] [tutorial] | Pierce Ch. 12 | hw7 (pdf) hw7 (tex) |

8 | 04/19/2021 | Memory Management | [lecture] [tutorial] | Tucker Ch. 11 | hw8 (pdf) hw8 (tex) |

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

10 | 05/10/2021 | Type Inference (II) | [lecture] [tutorial] | Pierce Ch. 22, 23 | hw10 (pdf) hw10 (tex) |

11 | 05/12/2021 | Subtyping | [lecture] | Pierce Ch. 15 | hw11 (pdf) hw11 (tex) |

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

13 | 05/24/2021 | Functional Programming | [lecture] [tutorial] | Tucker Ch. 14 | hw13 (pdf) hw13 (zip) |

20 | 06/02/2021 | Logic Programming | [lecture] [tutorial] | Tucker Ch. 15 | hw14 (pdf) hw14 (tex) |