We meet every Tuesday and Thursday from 2pm to 3:20pm at Tech M164. Schedule provides more details for each meeting.
The starting point of this course is that we can describe what a programming language is with mathematics. We can specify (i) what are the valid programs of the language and (ii) what is the outcome when we run each one of them. These two pieces are the syntax and the semantics of the language. From this premise, this course explains how we can describe the semantics of a language by giving meaning to a program in terms of steps of simplifications of its syntax in a systematic and provably correct fashion; very similar to the way we give meaning to an arithmetic expression by using algebra calculations. Moreover, with the help of PLT Redex, we will see how we can turn the math into programs that we can run and test.
We will have two kinds of meetings. Theory meetings will be about the mathematical foundations. For those we will follow the Semantics Engineering with PLT Redex book. Redex meetings will be about mapping the math formalisms from the theory meetings to Redex programs.
For the first four weeks, there will be four assignments that will mix theoretical exercises and Redex programming. After that, with our help, you will pick a programming languages research paper and investigate it with Redex. You will also give two presentations in class: one to introduce us to the paper you picked and one to present your investigation of the paper.
Formally, the assignments, the two presentations and the Redex code you will produce will be the four factors that will determine your grade for the course.
Theory: From Syntax to Semantics
Sections 1 - 1.4
Theory: From Semantics to Questions
Sections 1.5 - 2.1
Theory: From Questions to Answers I
PLT Redex: The Basics
Theory: From Questions to Answers II
Theory: From Questions to Answers III
PLT Redex: λ Basics
PLT Redex: More on λ
Theory: Even more on λ
Sections 3.8 - 3.9
Theory: From λ to ISWIM
Sections 4.1 - 4.4
Sections 4.3 - 4.5
Theory: More on ISWIM
PLT Redex: Contexts
Theory: Standardization I
Theory: Standardization II
Theory: Standardization III
Sections 5.2 - 5.4
Wrap-up + Project Presentation
Working with others on assignments is a good way to learn the material and we encourage it. However, there are limits to the degree of cooperation that we will permit.
When working on assignments (theoretical or programming ones), you must work only with others whose understanding of the material is approximately equal to yours. In this situation, working together to find a good approach for solving a problem is cooperation; listening while someone dictates a solution is cheating. You must limit collaboration to a high-level discussion of solution strategies, and stop short of actually writing down a group answer. Anything that you hand in, whether it is a written problem or a computer program, must be entirely your own work. If you base your solution on any other written solution or program, you are cheating.
Note: allowing your work to be copied is cheating just as much as copying another’s work, and thus also subject to punishment.
If you have any questions about what constitutes cheating, please ask.