The following is the planned lecture schedule for CS 273.
Date | Topic | Book Reading | Assignments |
---|---|---|---|
Jan 21 | Course introduction, Syntax vs. Semantics | Ch. 1, Ch. 2 | |
Jan 23 | Basics of Small-step Semantics | Sec. 3.1–3.2.4 | |
Jan 26 | Progress Rules | Sec. 3.2.5 | |
Jan 28 | Reduction Semantics | Sec. 3.2.6 | |
Jan 30 | Continuing Small-step Semantics | Assign. 1 released | |
Feb 2 | Big-step Semantics | Sec. 3.3 | |
Feb 4 | Interesting theorems | Sec. 3.4–3.7 | |
Feb 6 | "" | ||
Feb 9 | SNOW DAY | Assign. 1 due | |
Feb 11 | Building a Denotational Semantics | Sec. 4.1–4.2 | |
Feb 13 | PostFix Denotational Semantics | Sec. 4.3 | |
Feb 16 | NO CLASS | ||
Feb 18 | Denotational Reasoning | Sec. 4.4 | Assign. 2 released |
Feb 20 | Relating Operational and Denotational Semantics | Sec. 4.5 | |
Feb 23 | Fixed Points | Sec. 5.1–5.3 | |
Feb 25 | "" | ||
Feb 27 | "" | Assign. 2 due | |
Mar 2 | FL/FLK Operational Semantics | Ch. 6 | |
Mar 4 | λJS | λJS paper | |
Mar 6 | ClassicJava | ClassicJava paper | Assign. 3 released |
Mar 9 | FLK Denotational Semantics | Sec. 6.5 | |
Mar 11 | "" | ||
Mar 13 | Smalltalk | Smalltalk '76, Smalltalk '80 | |
Mar 16 | Denotational Semantics for Smalltalk | Ch. 8 of William Cook's thesis | Assign. 3 due |
Mar 18 | Beta-style inheritence | Super and Inner | |
Mar 20 | Denotational Semantics for Beta-style inheritence | Ch.9 of William Cook's thesis | Assign. 4 released |
Mar 23 | NO CLASS | ||
Mar 25 | NO CLASS | ||
Mar 27 | NO CLASS | ||
Mar 30 | Types as Judgments, Type Soundness in a Denotational World | ||
Apr 1 | Wright-Felleisen Soundness (Progress and Preservation) | Associated paper | |
Apr 3 | "" | ||
Apr 6 | The ClassicJava Type System | ClassicJava paper | Assign. 4 due |
Apr 8 | Typing Local Control and State using Flow Analysis | Associated paper | |
Apr 10 | Student presentations | ||
Apr 13 | Student presentations | ||
Apr 15 | Student presentations | ||
Apr 17 | Introduction to Redex, Implementing PostFix in Redex | ||
Apr 20 | Implementing FLK in Redex | ||
Apr 22 | Testing semantic properties and theorems in Redex | ||
Apr 24 | Reading Period | ||
Apr 27 | Reading Period | ||
Apr 29 | Reading Period | ||
May 1 | Reading Period | ||
May 4 | Reading Period | ||
May 6 | Final Exam Period | ||
May 8 | Final Exam Period | ||
May 11 | Final Exam Period | ||
May 13 | Final Exam Period | ||
May 15 | Final Exam Period |
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.