COMP 325: Organization of Programing Languages, Fall 2017

This syllabus is subject to change based on specific class needs, especially the schedule. Significant deviations will be discussed in class.



This course is an exploration of modern programming languages through the study and implementation of interpreters for fundamental language features. By implementing small languages with common PL 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:

We will supplement this with:


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.

We might, from time to time, look at some Racket as its used in PLAI. If you need or want to update your DrRacket installation, here’s the link.




The course workload is as follows:

Category Number of Assignments
Interpreters 5–7
Homework 2–3
Paper+Presentation 1
Exams 2


The weekly workload for this course will vary by student but on average should be about 11 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 Total Time Time/week (hours)
Lectures   3
Homework/Interpreters 64 4
Exam Study 8 0.5
Paper/Presentation 24 1.5
Reading+Unstructured Study   2


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.

Category Weight
Homework 5%
Interpreters 30%
Paper + Presentation 20%
Midterm Exam 15%
Final Exam 20%
Participation 10%

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.


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.

Date Topic Assignment
Tue 08/22 Intro to programming languages HW 1 out
Wed 08/23 Design of Programming Languages Read Ritchie and McCarthy
Fri 08/25   Watch Steele, Read Steele
Mon 08/28 Programming language paradigms; Intro to Pyret Read Floyd and Van Roy
Tue 08/29 Intro to Pyret Read PAPL 1-2
Wed 08/30 Lists, recursion, higher-order functions HW 1 due, HW 2 out, Read PAPL 5.3-5.4, 6
Fri 09/01 Structured and Recursive Data HW 2 out, Read PAPL 7-9
Mon 09/04 Functions as Data Read PAPL 13
Tue 09/05 Parsing Read PAPL 23
Wed 09/06 Interpretation Read PAPL 24
Fri 09/08   HW 2 due, Interp 1 out
Mon 09/11 Conditionals Read PAPL 25
Tue 09/12    
Wed 09/13    
Fri 09/15 Fortran HW 3 (Anno. Bib.) out
Mon 09/18 Interpreting Functions Read PAPL 26
Tue 09/19    
Wed 09/20   Interp 1 due
Fri 09/22    
Mon 09/25 Sharing and Quality Interp 2 out (Starter code), Read PAPL 18
Tue 09/26 Programming with state Read PAPL 20
Wed 09/27    
Fri 09/29 Bash  
Mon 10/02 Mutable State Read PAPL 31
Tue 10/03 Implementing Boxes (code)  
Wed 10/04    
Fri 10/06 Memory Management Interp 2 due, Read PLAI 11
Mon 10/09 Automatic GC: Mark and Sweep Interp 3 out
Tue 10/10 Copying Garbage Collectors HW 3 (Anno. Bib.) due
(10/11–10/15) (Fall Break) (Fall Break)
Mon 10/16 Non-Copying and Incremental GC  
Tue 10/17 Generational GC  
Wed 10/18 Modern C++ Memory Management  
Fri 10/20 Rust: Ownership and Borrowing Read this and this
Mon 10/23 First Look at Types Read PAPL 27
Tue 10/24    
Wed 10/25 (Mentoring Day – No class)  
Fri 10/27 Type Safety Interp 3 due, Interp 4 out, Read PAPL 28
Mon 10/30 Parametric Polymorphism Read PAPL 29
Tue 10/31 Type Inference I: Constraint Generation Read PAPL 30
Wed 11/01 Unification  
Fri 11/03    
Mon 11/06 Intro to Objects Read PAPL 32
Tue 11/07 More Object Features using Desugaring  
Wed 11/08 Inheritance Interp 4 due, Interp 5 out
Fri 11/10 Types for Objects  
Mon 11/13 Union and Intersection Types  
Tue 11/14 Contracts Read PLAI 16
Wed 11/15    
Fri 11/17    
Mon 11/20 Control Operations: CPS Read PAPL 33.1-2
Tue 11/21 CPS with Desugaring Paper Due, read PAPL 33.3
(11/22–11/26) (Thanksgiving Break) (Thanksgiving Break)
Mon 11/27 CPS in the Core  
Tue 11/28 Generators  
Wed 11/29   Paper Presentation
Fri 12/01 Lazy argument evaluation  
Mon 12/04 Prolog Interp 5 due
Tue 12/05    
Wed 12/06    
Sat 12/09 8:00 AM   Final Exam

Monmouth College Services