Schedule

The following is the planned lecture schedule for CS 273.

Date Topic Book Reading Assignments
Jan 21Course introduction, Syntax vs. SemanticsCh. 1, Ch. 2
Jan 23Basics of Small-step SemanticsSec. 3.1–3.2.4
Jan 26Progress RulesSec. 3.2.5
Jan 28Reduction SemanticsSec. 3.2.6
Jan 30Continuing Small-step SemanticsAssign. 1 released
Feb 2Big-step SemanticsSec. 3.3
Feb 4Interesting theoremsSec. 3.4–3.7
Feb 6""
Feb 9SNOW DAYAssign. 1 due
Feb 11Building a Denotational SemanticsSec. 4.1–4.2
Feb 13PostFix Denotational SemanticsSec. 4.3
Feb 16NO CLASS
Feb 18Denotational ReasoningSec. 4.4Assign. 2 released
Feb 20Relating Operational and Denotational SemanticsSec. 4.5
Feb 23Fixed PointsSec. 5.1–5.3
Feb 25""
Feb 27""Assign. 2 due
Mar 2FL/FLK Operational SemanticsCh. 6
Mar 4λJSλJS paper
Mar 6ClassicJavaClassicJava paperAssign. 3 released
Mar 9FLK Denotational SemanticsSec. 6.5
Mar 11""
Mar 13SmalltalkSmalltalk '76, Smalltalk '80
Mar 16Denotational Semantics for SmalltalkCh. 8 of William Cook's thesisAssign. 3 due
Mar 18Beta-style inheritenceSuper and Inner
Mar 20Denotational Semantics for Beta-style inheritenceCh.9 of William Cook's thesisAssign. 4 released
Mar 23NO CLASS
Mar 25NO CLASS
Mar 27NO CLASS
Mar 30Types as Judgments, Type Soundness in a Denotational World
Apr 1Wright-Felleisen Soundness (Progress and Preservation)Associated paper
Apr 3""
Apr 6The ClassicJava Type SystemClassicJava paperAssign. 4 due
Apr 8Typing Local Control and State using Flow AnalysisAssociated paper
Apr 10Student presentations
Apr 13Student presentations
Apr 15Student presentations
Apr 17Introduction to Redex, Implementing PostFix in Redex
Apr 20Implementing FLK in Redex
Apr 22Testing semantic properties and theorems in Redex
Apr 24Reading Period
Apr 27Reading Period
Apr 29Reading Period
May 1Reading Period
May 4Reading Period
May 6Final Exam Period
May 8Final Exam Period
May 11Final Exam Period
May 13Final Exam Period
May 15Final Exam Period

Supplemental Materials

Assignments

Final Project

Now that you've seen various representations of dynamic (and some static) semantics, it’s time to apply that knowledge to languages you may deal with in your day-to-day programming life! First, choose a language. It might be a regularly used language, like Scala, Ruby, or Python; a new up-and-comer like Swift or Rust; or maybe something not in the traditional class of languages like SQL or even CSS. Then pick a feature of that language to model: for example, the Ruby class system, variable binding in Swift, or CSS attributes.

During the first half of this course, keep this project in the back of your mind. You will need to submit an initial proposal for the project to us before class on March 9, describing the feature you plan on modeling and what end result you plan on giving to us—a model on paper, a model in Redex, or some other representation. We’ll provide feedback on your proposal and ask for revisions if needed, and by March 20 we should have a final agreement on what you’ll be doing. We’ll give you some time in class to talk about your selected feature and to discuss what’s interesting about it with your classmates after we talk about types, and the final product will be due during the final exam period.