EECS 490: Programming Languages (Fall 2006)

Basic Information
Instructor Chandra Boyapati
GSI Paul Darga
Lectures M W 3:00-4:30, 3433 EECS
Chandra's Office Hours M 4:30-5:30, 4628 CSE (or by appointment)
Paul's Office Hours F 3:00-5:00, 4917 CSE / 1637 CSE (or by appointment)
Credits 4
For CS-ENGR and CS-LSA undergrads Counts as an upper-level CS technical elective
For CE undergrads Counts as a flexible technical elective and EECS elective
For CSE grads Counts as a software kernel course

Course Overview
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.

Recommended Textbooks
Benjamin Pierce: Types and Programming Languages
Franklyn Turbak & David Gifford: Design Concepts in Programming Languages
Glynn Winskel: Formal Semantics of Programming Languages

Grading
70%: Individual Written and Programming Assignments
30%: Final Exam

Schedule

Introduction
L1 Sep 06 Course Overview
    Optional Reading
Hoare: Hints for Programming Language Design
Wegner: Programming Languages - The First 25 Years
Wirth: On the Design of Programming Languages
Functional Programming
L2 Sep 11 Scheme
    Reading
Scheme examples discussed in class
Turbak & Gifford: Scheme+ Tutorial: Appendix A.1
    Software
MIT/GNU Scheme (Please use Scheme version 7.7.90.)
    Optional Reading
Abelson et al: Revised Report on the Algorithmic Language Scheme
Abelson & Sussman: Structure and Interpretation of Computer Programs
L3 Sep 13 Scheme
    Reading
Scheme examples discussed in class
Turbak & Gifford: Scheme+ Tutorial: Appendix A.1
    Software
MIT/GNU Scheme (Please use Scheme version 7.7.90.)
    Optional Reading
Abelson et al: Revised Report on the Algorithmic Language Scheme
Abelson & Sussman: Structure and Interpretation of Computer Programs
L4 Sep 18 Scheme+
    Reading
Turbak & Gifford: Scheme+ Tutorial: Appendix A.2
    Software
Scheme+ (This only works with MIT/GNU Scheme version 7.7.90.)
    Handout
Assignment 1
L5 Sep 20 Syntax and Semantics
    Reading
Turbak & Gifford: Chapters 1-3
L6 Sep 25 Syntax and Semantics
    Reading
Turbak & Gifford: Chapters 1-3
    Handout
Assignment 2
    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)
    Handout
Assignment 3
    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)
    Handout
Assignment 4
    Homework Due
Assignment 3
L11 Oct 11 Type Systems
    Reading
Pierce: Chapter 8
    Optional Reading
Pierce: Chapter 9
    Handout
Assignment 5
Fall Study Break
L12 Oct 23 Type System for Java Bytecodes
    Reading
Stata & Abadi: A Type System for Java Bytecode Subroutines (POPL 1998): Sections 1-4, 8, 9, 10
    Optional Reading
Freund & Mitchell: A Type System for the Java Bytecode Language and Verifier (JAR 2003)
    Homework Due
Assignment 4
--
Oct 25
No Class
    Optional Reading
Check out OOPSLA 2006
L13 Oct 30 Java Tutorial
    Optional Reading
Gosling et al: The Java Language Specification, Third Edition
L14 Nov 01 Type System for Java
    Reading
Igarashi et al: FeatherWeight Java (TOPLAS 2001): Sections 1-2
    Optional Reading
Liskov & Wing: A Behavioral Notion of Subtyping (TOPLAS 1994)
    Homework Due
Assignment 5
L15 Nov 06 Type System for Java
    Reading
Igarashi et al: FeatherWeight Java (TOPLAS 2001): Sections 1-2
    Optional Reading
Cardelli: Type Systems
    Handout
Assignment 6
L16 Nov 08 Type System for Generic Java
    Reading
Igarashi et al: FeatherWeight Java (TOPLAS 2001): Sections 3-6
    Optional Reading
Myers et al: Parameterized Types for Java (POPL 1997)
--
Nov 13
No Class
    Optional Reading
Check out PLDI 2006, POPL 2006.
L17 Nov 15 Type System for Generic Java
    Reading
Igarashi et al: FeatherWeight Java (TOPLAS 2001): Sections 3-6
    Optional Reading
Kennedy et al: Design and Implementation of Generics for the .NET Common Language Runtime (PLDI 2001)
    Handout
Assignment 7
    Homework Due
Assignment 6
L18 Nov 20 Types for Information Flow Control
    Reading
Myers & Liskov: A Decentralized Model for Information Flow Control (SOSP 1997)
    Optional Reading
DeLine & Fahndrich: Enforcing High Level Protocols in Low-Level Software (PLDI 2001)
L19 Nov 22 Concurrent Programming in Java
    Reading
Gosling et al: The Java Language Specification: Chapter 17
    Optional Reading
Manson & Pugh: The Java Memory Model (JavaOne 2004)
Happy Thanksgiving!
L20 Nov 27 Types for Preventing Data Races
    Reading
Boyapati & Rinard: A Parameterized Type System for Race-Free Java Programs (OOPSLA 2001)
    Optional Reading
Boyapati: SafeJava: A Unified Type System for Safe Programming (MIT 2004): Chapters 2-4
L21 Nov 29 Type Safety for Legacy Code
    Reading
Necula: CCured: Type-Safe Retrofitting of Legacy Code (POPL 2002)
    Optional Reading
Shankar et al: Detecting Format-String Vulnerabilities with Type Qualifiers (Usenix Security 2001)
    Homework Due
Assignment 7
Program Verification
L22 Dec 04 Axiomatic Semantics
    Reading
Winskel: Chapters 2, 6.1-6.4
    Optional Reading
Floyd: Assigning Meaning to Programs (Symposium in Applied Mathematics 1967)
Hoare: An Axiomatic Basis for Computer Programming (CACM 1969)
L23 Dec 06 Axiomatic Semantics
    Reading
Winskel: Chapters 6.5-6.7, 7.1-7.6
    Optional Reading
Hoare: Proof of a Program FIND (CACM 1971)
Dijkstra: Guarded Commands, Nondeterminancy and Formal Derivation of Programs (CACM 1975)
    Handout
Assignment 8
L24 Dec 11 Verifying Program Properties Using Theorem Provers
    Reading
Flanagan et al: Extended Static Checking for Java (PLDI 2002)
Necula et al: Safe Kernel Extensions Without Run-Time Checking (OSDI 1996)
Conclusions
L25 Dec 13 Conclusions
    Homework Due
Assignment 8
Final Exam: Dec 15, 4pm-6pm, 3427 EECS (Exam)


[Mail] [bchandra at eecs dot umich dot edu]