Dynamics of Programming Languages
Christos Dimoulas and Robby Findler
1 When and Where
We meet every Tuesday and Thursday from 2pm to 3:20pm at Tech M164. Schedule provides more details for each meeting.
2 What
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.
3 How
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.
4 Schedule
When 
 What 
 Reading 
 
4/02 
 Theory: From Syntax to Semantics 
 Sections 1  1.4 
 
4/04 
 Theory: From Semantics to Questions 
 Sections 1.5  2.1 
 
4/09 
 Theory: From Questions to Answers I 
 Section 2.2 
 
4/11 
 PLT Redex: The Basics 

 
4/16 
 Theory: From Questions to Answers II 
 Section 2.2 
 
4/18 
 Theory: From Questions to Answers III 
 Sections 2.2 
 
4/23 
 PLT Redex: λ Basics 

 
4/25 
 PLT Redex: More on λ 

 
4/30 
 Theory: Even more on λ 
 Sections 3.8  3.9 
 
5/02 
 Theory: From λ to ISWIM 
 Sections 4.1  4.4 
 
5/07 
 Theory: ISWIM 
 Sections 4.3  4.5 
 
5/09 
 Theory: More on ISWIM 
 Section 4.6 
 
5/14 
 PLT Redex: Contexts 

 
5/16 
 Paper Presentations 

 
5/21 
 Theory: Standardization I 
 Section 5.2 
 
5/23 
 Theory: Standardization II 
 Section 5.2 
 
5/28 
 Theory: Standardization III 
 Sections 5.2  5.4 
 
5/30 
 Wrapup + Project Presentation 

 
6/04 
 Project Presentations 

 
6/06 
 Project Presentations 


5 Project suggestions
6 Collaboration Policy
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 highlevel 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.