This course covers basic and advanced topics in programming languages, and
shows how good programming languages and tools can significantly improve
the reliability of software systems.
Introduction
L1
Sep 06
Course Overview
Functional Programming
L2
Sep 11
Scheme
L3
Sep 13
Scheme
L4
Sep 18
Scheme+
Software
Scheme+
(This only works with MIT/GNU Scheme version 7.7.90.)
L5
Sep 20
Syntax and Semantics
Reading
Turbak & Gifford: Chapters 1-3
L6
Sep 25
Syntax and Semantics
Reading
Turbak & Gifford: Chapters 1-3
Homework Due
Assignment 1
L7
Sep 27
Lambda Calculus
Reading
Pierce: Chapter 5 (Sections 5.1-5.2)
L8
Oct 02
Lambda Calculus
Reading
Pierce: Chapter 5 (Sections 5.1-5.2)
Homework Due
Assignment 2
Object-Oriented Programming and Type Systems
L9
Oct 04
Syntax & Semantics
Reading
Pierce: Chapter 3 (Sections 3.1-3.5)
L10
Oct 09
Semantics
Reading
Pierce: Chapter 3 (Sections 3.4-3.5)
Homework Due
Assignment 3
L11
Oct 11
Type Systems
Reading
Pierce: Chapter 8
Optional Reading
Pierce: Chapter 9
Fall Study Break
L12
Oct 23
Type System for Java Bytecodes
Homework Due
Assignment 4
--
Oct 25
No Class
L13
Oct 30
Java Tutorial
L14
Nov 01
Type System for Java
Homework Due
Assignment 5
L15
Nov 06
Type System for Java
L16
Nov 08
Type System for Generic Java
--
Nov 13
No Class
L17
Nov 15
Type System for Generic Java
Homework Due
Assignment 6
L18
Nov 20
Types for Information Flow Control
L19
Nov 22
Concurrent Programming in Java
Happy Thanksgiving!
L20
Nov 27
Types for Preventing Data Races
L21
Nov 29
Type Safety for Legacy Code
Homework Due
Assignment 7
Program Verification
L22
Dec 04
Axiomatic Semantics
Reading
Winskel: Chapters 2, 6.1-6.4
L23
Dec 06
Axiomatic Semantics
Reading
Winskel: Chapters 6.5-6.7, 7.1-7.6
L24
Dec 11
Verifying Program Properties Using Theorem Provers
Conclusions
L25
Dec 13
Conclusions
Homework Due
Assignment 8
Final Exam: Dec 15, 4pm-6pm, 3427 EECS (
Exam)