The following schedule lists the topics we plan to cover and approximately the number of meetings we plan to spend on each topic. The schedule is tentative. Most likely, some things will change during the semester, and the schedule will be revised as necessary. This class is yours, so feel free to make suggestions.

The exam dates are fixed, so you may plan accordingly.

The Skills column references the skills you should acquire to help you focus your study.

The Reading column lists the assigned reading for the meeting. You should do the reading before attending class and view it as an introduction to spark discussion in class.

The Assignment column lists the due date for each assignment.

Date Topic Skills Reading Assignment
T 8/25 Welcome and course overview [slides]
No recitation
R 8/27 Evaluating languages [slides] 1: Evaluating languages
Sebesta, 1.1-1.4 (inclusive), 1.6
Controversial editorial (optional). Joel Spolsky. The Perils of JavaSchools.
Fun (optional). O'Reilly. History of Programming Languages Poster.
Sign up on the course moodle and introduce yourself.
T 9/1 Syntax: context-free grammars [slides] 2: Describing syntax
Sebesta, 3.1, 3.2, 3.3 up to and including 3.3.1.6
Evaluating languages: Table 1.1
R 9/3 Syntax: parse trees and derivations, ambiguous grammars, precedence and associativity [slides] 3: Concrete and abstract syntax
Sebesta, 3.3.1.7 until the end of 3.3.1
HW1 Due
T 9/8 Names and binding [slides] 4: Binding
Sebesta, 5.1-5.4 (inclusive)
Syntax: if-then-else ambiguity
R 9/10 Scoping [slides] 5: Scoping
Sebesta, 5.5-5.8 (inclusive). Note it's 5.8-5.11 in the 8th edition.
HW2 Due
T 9/15 Introduction to functional languages [slides] 6: Functional concepts
Sebesta, 15.1-15.3 (inclusive), 15.7
Textbook supplement (optional). Harper, Chapter 2. Here's another take on the functional versus imperative computational models using ML as an example.
Lifetime and scoping
R 9/17 SML: Declarations, functions, and tuples [slides, sample code] 7: SML
Harper, 3.1-3.4 (inclusive), 3.5 (optional), Chapter 4, Chapter 5
Textbook supplement (optional). Hansen and Rischel, Chapter 2, Chapter 3.
HW3 Due
T 9/22 SML: Recursion, pattern matching, and datatypes [slides, sample code from class, answers to sample code] 7: SML
Harper, Chapter 6, Chapter 7, Chapter 9 (optional), Chapter 10
Textbook supplement (optional). Hansel and Rischel, Chapter 5, 7.1-7.5 (inclusive)
SML
R 9/24 SML: Polymorphism and higher-order functions [slides, sample code from class, answers to sample code] 7: SML
Harper, Chapter 8, Chapter 11
Textbook supplement (optional). Hansel and Rischel, Chapter 9
HW4 Due
T 9/29 SML: Higher-order functions [slides, sample code from class, answers to sample code] 7: SML
Harper, Chapter 24, Chapter 25 (optional), Chapter 26. You may also want to review 7.3 before reading these chapters. Pay special attention to Chapter 25. Also, we will not look too closely at time and space complexity brought up in this reading.
Midterm review
R 10/1 Midterm 1. Please bring blue books.
T 10/6 SML: Structural induction and correctness of code [slides, review code] 8: Induction
No new reading. Read Harper, Chapters 24 and 26, if you have not yet done so.
Midterm and project discussion
R 10/8 Lambda calculus [slides, sample code from class, answers to sample code] 9: Lambda
Benjamin Pierce. Foundational Calculi for Programming Languages, up to and including 2.2.
Supplement (optional) Wikipedia. Lambda Calculus, Informal Description. Wikipedia's overview of the lambda calculus is not bad.
PROJ1 Checkpoint Due
T 10/13 Type checking introduction [slides] 10: Types
Project discussion
R 10/15 Data types [slides, unions example in C, unions example in SML] 11: Data
Sebesta, 6.1-6.8 inclusive (skip 6.3.5 and 6.5.3-6.5.8, focus on 6.5-6.8)
Su 10/18 PROJ1 Due
T 10/20 Pointers and Expressions [slides] 12:Pointers, 13:Expressions
Sebesta, 6.9, 7.1, 7.2, 7.3.
Structural induction
R 10/22 Iteration and conditionals [slides, project 1 sample solutions with discussion notes] 14: Control
Sebesta 7.6, Chapter 8 (quite long so please allocate time accordingly).
HW5 Due
T 10/27 Subtyping [slides] 15: Subtyping
Pointers and memory management
R 10/29 Subtyping [slides] 15: Subtyping
F 10/30 HW6 Due
T 11/3 Midterm review and subtyping [slides, references: SML, C, C++] 15: Subtyping
Midterm review
R 11/5 Midterm 2
T 11/10 Parameter passing [slides] 16: Parameters
Sebesta, Chapter 9 up to but not including 9.5.3, skip 9.2.4 and 9.2.5.
Subtyping
R 11/12 Parameter passing [slides] 16: Parameters
Sebesta, 9.5.3 up to and including 9.6, 9.7 (optional)
HW7 Due
T 11/17 Parameter passing: eager vs. lazy evaluation [slides] 16: Parameters
Midterm discussion
R 11/19 Parametric polymorphism [slides] 17: Generics
Sebesta, 9.8.
Sebesta, 10.1, 10.2, and 10.3.
Review (optional). Harper, 8.2.
HW8 Due
T 11/24 No class, Fall break
No recitation, Fall break
R 11/26 No class, Thanksgiving
T 12/1 Abstract data types [slides] 18: ADTs
Sebesta, 11.1, 11.2, 11.3, 11.4.3, rest of 11.4 (optional), 11.5.3, rest of 11.5 (optional).
Harper, Chapter 18, 19, 20 (optional), 32.
Parameter passing and generics
R 12/3 Data abstraction and object-oriented concepts [slides, SML stack ADT sample code] 19: OO
Sebesta, 12.1, 12.2, 12.3
Supplement (optional). William R. Cook. On Understanding Data Abstraction, Revisited, OOPSLA/Onward! 2009. This essay has a nice discussion clarifying the difference between abstract data types (ADTs) and data abstraction with objects. The essay also points out where this issue is confused in the textbook. It's optional reading but highly recommended. [blog discussions: cook, ltu]
HW9 Due
T 12/8 Object-oriented concepts [slides, Java stack sample code] 19: OO
Sebesta, 12.5, 12.7, rest of 12 (optional)
Generics and ADTs
R 12/10 Review: Bring your questions!
M 12/14 Final exam, 7:30pm-10:00pm, ECCR 105