COMP 325: Organization of Programing Languages, Fall 2019

This syllabus is subject to change based on specific class needs, especially the schedule. Significant deviations will be discussed in class. Individual exceptions to the policies and schedule are granted only in cases of true emergency. Please make arrangements with me if an emergency arises.

On November 1, 2021, I will start paternity leave. After this date, Marta Tucker will take over my classes, including this one. She will deviate from this syllabus as necessary.



This course is an exploration of modern programming languages through the study and implementation of interpreters for fundamental language features. By exploring, testing, and implementing small languages with common programming language features, students expand their skill set with both practical and theoretical knowledge. To understand programming languages is to understand programming and computation as a whole. A programming language is how we describe a computational process and study of the languages themselves helps to shed light on the inner workings of a computation.


The main textbook will be:

Be aware that the textbook is a constant work-in-progress. We may occasionally supplement this with:

Throughout the syllabus I refer to the main textbook as “PAPL” and the supplement textbook as “PLAI”. Other sources will be provided to you or will be available online.


This course will, for the most part, follow the text. Topics to be covered will include:

Programming Environment

We’ll be diving in with the Pyret language that accompanies PAPL. Pyret has an in-browser development environment and so may be used on any computer with a (modern) web-browser.

For the “Mystery Language” homework assignments we’ll mostly be using Racket. IMPORTANT: we will require Racket version 7.8 – other versions are not supported. Once installed, follow the setup instructions here, except you should use as the package source, NOT the one with samwaxman. A few mystery language assignments might link to a webpage instead of using Racket.

Submitting: Assignments will be submitted via Gradescope.



Assignments and Workload

The weekly workload for this course will vary by student but on average should be about 12.5 hours per week. The follow tables provides a rough estimate of the distribution of this time over different course components for a 16 week semester.

Category Amount Final Grade Weight Total Time Time/Week (Hours)
Meetings - 10% (Participation) - 2.5
Interpreters 5–8 40% 56 3.5
Homework/Mystery Languages 8–12 40% 8 4.5
Paper+Presentation 1 10% 24 1
Reading+Unstructured Study - - 16 1
    100%   12.5


Your participation grade is based mainly on your preparation and participation in the class meetings and on your homework presentations. During class, be prepared to use the Socrative app for in-class activies. Every day that a homework assignment is due (including mystery languages), one students will be randomly selected to present their solution to a portion of the assignment. You will be graded based on preparation and the thoroughness of your explanations, NOT on correctness, although you should of course strive for correctness. Students taking late days will be required to leave the classroom during these presentations. You must inform me BEFORE class if you are taking late days to avoid being randomly selected to present. Otherwise, if you are randomly selected to present but have not done the assignment, you will receive a 0.

The majority of the assignments in this course are derived from the Programming Languages course at Brown University. Homework assignments may include a variety of activies, but the core will be “mystery languages.” These require you to investigate the behavior of a mystery programming language and explain it. This gives you good practice for real life, where you will often be forced to learn new languages. Students aiming for A should get nearly all of the “Core” problems and some of the “Advanced” ones, and should have very good written summaries. Students aiming for a B should get most of the “Core” problems.

The other assignments are “interpreters,” which are programming assignments in which you create or extend programming language tools, giving you some experience in the design and creation of your own programming languages. Your grades on these assignments will be based not only on correctness, but also on quality – both of your implementation code AND your testing.

Your final grade is based on a weighted average of particular assignment categories. You can estimate your current grade based on your scores and these weights. You may always visit the instructor outside of class to discuss your current standing.

This courses uses a standard grading scale. Assignments and final grades will not be curved except in rare cases when its deemed necessary by the instructor. Percentage grades translate to letter grades as follows:

Score Grade
94–100 A
90–93 A-
88–89 B+
82–87 B
80–81 B-
78–79 C+
72–77 C
70–71 C-
68–69 D+
62–67 D
60–61 D-
0–59 F

You are always welcome to challenge a grade that you feel is unfair or calculated incorrectly. Mistakes made in your favor will never be corrected to lower your grade. Mistakes made not in your favor will be corrected. Basically, after the initial grading your score can only go up as the result of a challenge*.

You are always welcome to challenge a grade that you feel is unfair or calculated incorrectly. Mistakes made in your favor will never be corrected to lower your grade. Mistakes made not in your favor will be corrected. Basically, after the initial grading your score can only go up as the result of a challenge.


The following calendar should give you a feel for how work is distributed throughout the semester. Assignments and events are listed in the week they are due or when they occur. This calendar is subject to change based on the circumstances of the course.

Note: Readings should be completed BEFORE the start of class on the day on which they appear.

Date Topic Assignment/Reading
(Mon 08/23) (Week 1) (Freshman Orientation – No COMP325)  
Wed 08/25 Intro & Logistics PAPL 1-3, Hwk1 (Due 08/27)
Fri 08/27 Intro to Pyret PAPL 4-6, Prog1 (Pyret) (Due 09/03)
Mon 08/30 (Week 2) Lists in Pyret PAPL 7-10
Wed 09/01 Structured Data PAPL 11-12, Hwk2 (Due 09/08)
Fri 09/03 Recursive Data PAPL 13,15
Mon 09/06 (Week 3) Prog1 Review PAPL 16
Wed 09/08 Streams, Hwk2 Review PAPL 16
Fri 09/10 Parsing PAPL 24
Mon 09/13 (Week 4) Interpretation PAPL 25, Prog2 (Interp 1) (Due 09/20)
Wed 09/15 Conditionals PAPL 26
Fri 09/17 Functions with Substitution, Lazy PAPL 27.1
Mon 09/20 (Week 5) Functions, Eager Hwk3 (Due 09/24)
Wed 09/22 Functions with Environments PAPL 27.2
Fri 09/24 Hwk 3 + Interp 1 Review Hwk4 (Due 09/29)
Mon 09/27 (Week 6) Functions Anywhere PAPL 27.3-27.5, Prog3 (Interp 2) (Due 10/08) (Starter code)
Wed 09/29 Types I PAPL 28
Fri 10/01 Types II  
Mon 10/04 (Week 7) Safety and Soundness PAPL 29
Wed 10/06 Parametric Polymorphism PAPL 30
Fri 10/08 Prog3 Questions PAPL 31, (Prog3 Due)
Mon 10/11 (Week 8) Prog3 Solutions/Review Interp 2B (Due 10/20; optional) (Starter code)
(Wed 10/13) (Exam day for half-semester courses)  
(Fri 10/15) (Fall Break)  
Mon 10/18 (Week 9) Prog3 Solutions/Review Hwk5, Interp 3
Wed 10/20 More Prog3 Solutions  
Fri 10/22 Hwk5, Prog3B Solutions  
Mon 10/25 (Week 10) Type Inference PAPL 31
Wed 10/27 Sharing and Equality PAPL 20, Research Project
Fri 10/29 State PAPL 22, (Prog4 Due Saturday)
Mon 11/01 (Week 11) Mutation PAPL 32
Wed 11/03 Objects PAPL 33
Fri 11/05    
Mon 11/08 (Week 12) Control Operations PAPL 34
Wed 11/10    
Fri 11/12    
Mon 11/15 (Week 13)    
Wed 11/17    
Fri 11/19    
Mon 11/22 (Week 14)    
(Wed 11/24) (Thanksgiving Break)  
(Fri 11/26) (Thanksgiving Break)  
Mon 11/29 (Week 15)    
Wed 12/01    
Fri 12/03    
Mon 12/06 (Week 16)    
Wed 12/08    
Tue 12/14 6:30 PM Final Exam  

Monmouth College Services