Syllabus
This is the syllabus for CST 372. Please read the syllabus in its entirety.
1 Logistics
Blackboard: This course will post announcements and submit assignments on Blackboard.
Discord: Async Q&A, as well as announcments will happen on the Discord server.
This course will be taught primarily using the Racket programming environment.
You are expected to attend all lectures in-person. Lectures consist of live programming, whiteboard work, and group activities. Lecture notes will be posted online on this webpage the day of class.
2 Course description
Our goal in this course is to study the essentials of programming languages: their purpose, their design, and their implementation. You have all programmed before, probably in multiple programming languages. You may have noticed differences and similarities between the programming languages and wondered: why are there so many languages? Why are they different and similar in these particular ways? Why is programming in one language sometimes easier than others? How (and why) are new programming languages made? We will study these questions bottom-up: we will grow a tiny language and add features to it iteratively, along the way encountering many of the core ingredients that go into today’s modern programming languages. We will also see some of the core formal notions that have been so effective in designing many of today’s languages: in particular, we will see formal language semantics and type systems. Finally, we will go beyond our tiny language and explore some exotic languages that are radically different from ones you may have seen before. In the end, you should be equipped to learn new programming languages quickly, understand the key design decisions made by many of today’s languages, and be prepared for a world where new programming languages are being made all the time.
Module 1: Introduction. Our goal of this module is to introduce and motivate the topic of programming languages and become familiar programming in Racket. We will learn how to program in functional style, program with inductively defined datatypes, and become familiar with notation for describing induction.
Module 2: The λ-calculus. Our goal in this module is to grow a small but surprisingly rich programming language. We will add features slowly: first, we will add let-bindings and study scope and substitution. Then, we will introduce the λ-calculus, and become familiar with programming in it: we will see how to compile programs into the λ-calculus (Church encoding), how to program with recursion (Y-combinator), and how to implement the λ-calculus efficiently on a Von-Neumann architecture (environments and closures). Along the way, we will learn how to implement interpreters from big-step style inductive notation, and how to draw a derivation tree for an interpreter.
Module 3: Types. Our goal in this module is to implement and design type systems for practical programming languages. Many of today’s modern programming languages have types: it is important to understand what they are and how they are made. We will start by adding simple types to the λ-calculus and implementing a type-checker. We will see how to describe type systems using inductive notation, and how to draw a derivation tree for well-typed programs. Then we will slowly grow the underlying features of the language.
Module 4: Control and effects. Our goal in this module is to be able to implement programming languages with rich control-flow primitives. We will study continuations and and understand how to write programs in tail-form. We will use these ideas to implement interpreters for languages with exceptions, coroutines, or non-determinism. Then, we will see how to compile continuation-passing style, and understand how it is used to add exotic control-flow constructs into languages that don’t natively have them.
Module 5: Abstract machines. Our goal in this module is to be able to describe the low-level behavior of how programs are executed on a simple model of a CPU called an abstract machine. We will develop an increasingly rich hierarchy of CPU models and describe how to evaluate programs on these models. We will explore memory safety, performance, and dynamic safety.
Module 6: Proof assistants. Our goal in this module is to explore proof assistants and how they can be used to proof properties of and reason about programming languages. We will use a proof assistant to state and prove basic meta-theoretic properties of the languages we have developed so far in the course.
3 Reference materials
There is no required text for this course.
The primary reference for this course will be the course notes, provided after each lecture and available on this website. You are strongly encouraged to review the course notes after each lecture. The following textbooks are good additional resources and will be occasionally referenced in class:
Krishnamurthy, Shriram. Programming Languages: Application and Interpretation. Link
Friedman, Daniel P. and Mitchell Wand. Essentials of programming languages. Third edition. MIT press, 2008.
Pierce, Benjamin C. Types and programming languages. MIT press, 2002.
Harper, Robert. Practical foundations for programming languages. Cambridge University Press, 2016.
Ramsey, Norman. Programming Languages: Build, Prove, and Compare. Cambridge University Press, 2022.
4 Coursework and Grading Policies
The course will consist of the following graded material, subject to change as the semester progresses (all changes to the grading scale will be announced in class, on Discord, and Blackboard):
Assignments (30% Of Total): About 8 in total. Posted on this webpage, turned in on Blackboard. You may discuss the problems with other students, but you must submit your own solutions.
Concept Check Quizzes (10% Of Total): Once a week due at 1:00PM Thursday each week, released Tuesday night typically unless announced otherwise. Each should take between 20-30 minutes, and will be released on Blackboard no later than Wednesday morning at 9AM on Monday. The lowest concept check quiz score will be dropped.
Exams (60% of total): There will an in-class written midterm exam on October 12 and an in-person final exam during the scheduled final exam period. Each exam will be worth 30% of the total for this category.
Grades are allocated by points, and the percentage is determined by the percentage of total points within each category.
4.1 Late work policy
Assignments will be due at 11:59PM, and late work will be penalized according to the following scale:
Less than 24 hours late: 5% penalty
24 – 48 hours late: 20% penalty
More than 48 hours late: no longer accepted (at this point grading will begin and we require all work to be turned in).
This timeline is in place to ensure timely return of grades. If you require special accommodations or a grading extension, please post a private message on Discord or email a question to me in advance of the deadline; I am very willing to work with you to find a suitable accomodation.
Late work for exams and concept check quizzes will not be accepted.
4.2 Credit system
In addition to the late policy, there will also be a credit system in place for grading in this class.
Each student will be given two "credits" for assignments. These credits will allow you to extend a deadline by one week with no questions asked, after which the late policy will apply. Credits can compound, so you can apply both credits to a single assignment to get a two-week extension.
Unused credits will add 1% to your final grade in this class. So having a calculated grade of 88.4% with two credits remaining will mean that your final computed grade is 90.4%, which will be rounded down to 90%. Having one credit with a calculated grade of 88.4 will result in a final computed grade of 89.4% rounded down to 89%.
As pointed out, this is a "no questions asked" policy, but you will need to inform me if you are using a credit for your assignment. This policy allows for some flexiblity, but be please be careful about overlapping deadlines.
4.3 Grading thresholds
Letter grades will be assigned according to a standard grading threshold based on percentage of total points:
Score range | Letter grade |
>90 | A |
≥85 | A- |
≥80 | B+ |
≥75 | B |
≥70 | B- |
≥65 | C+ |
≥60 | C |
≥55 | C- |
≥50 | D+ |
≥45 | D |
≥40 | D- |
<40 | F |
Computed grades will be rounded down, if in the <0.5 and rounded up for >= 0.5. Remaining credits for each student will increment your final grade by +1% per token.
The instructor may curve final grades up based on course circumstances. Individual assignments and exams may be curved up as well; in the event that this is necessary, the curving scheme will be explained in an announcment.
5 Withdrawal date
The final date for an official withdrawal from this class (meaning a “W” would appear on your transcript) is Friday, October 30, 2026.
6 Academic integrity
The university’s academic integrity policies (available at: University Policies Webpage and Academic Integrity Guide for Students) will be strictly enforced. Specifically:
On assignments, you must properly cite all sources when relevant. If using any AI tools (see AI policy below), these must be cited and disclosed.
On exams and concept checks, you may not use any outside materials, only what is written on the quiz. All electronic devices such as cell phones, tablets, smart watches, and computers must be silent and clearly out of sight. When room size allows, students will be required to sit at least one seat’s width apart from each other (i.e., at least one unoccupied seat between every student) during quizzes. When deemed necessary, the instructor reserves the right to implement additional quiz integrity measures, such as checking student IDs, assigning seats, and/or recording quiz sessions.
When caught committing any form of academic dishonesty, the penalty for a first offense will be a zero grade for the assignment, quiz, or exam (in the case of a minor infraction or a simple misunderstanding, you might have the opportunity to redo the assignment). If a second offense occurs, then the penalty will be a failing grade for the course.
7 Usage of code generation tools.
Code generation tools like ChatGPT and Claude are now widely available. You may use these tools if you find them helpful to you. However, be warned that these tools can be a crutch: you will likely find yourself struggling in the course if you rely too heavily on these tools to automatically produce your code for your assignments, since many of the assignments are cumulative. You are encouraged to first attempt all assignments yourself, without any assistance. That said, the use of generative tools for autocomplete (ie: codex) or the use of agentic workflows is prohibited.
Which model was used (e.g., GPT-5.5, GPT-5.6 Sol, Opus 5, Sonnet 5, etc);
Which portions of the assignment used it (e.g., specific section of a document, cleanup of presentation slides, use of codex-autocomplete); and
The complete chat log used for the AI tool (e.g., “Proofread this software design document.”).
In general, AI tools are most effective and accurate when performing small, manageable tasks rather than solving entire assignments in full. Thus, if you decide to use AI, try to approach it as an assistant for completing work rather than a replacement! Failure to fully disclose all use of AI in the manner described above will be treated as academic dishonesty (see above).
7.1 Title IX
Roosevelt University is committed to creating and maintaining a campus culture that upholds respect, civility, honor, and nonviolence. The University recognizes that each member of the community shares responsibility for ensuring that the learning and working environment is free from all forms of sexual harassment, including sexual assault, stalking, and intimate-partner violence. In particular, the University recognizes that sexual harassment can function as discrimination by preventing people from participating fully in an educational or professional enterprise. Thus, to create a culture of respect, support, and empowerment, the University will address instances of sexual harassment promptly and equitably and educate all community members to prevent instances of sexual harassment. In these ways, Roosevelt will ensure a safe and open environment for working and learning in which all individuals—faculty, staff, students, administrators, and visitors—are free from discrimination. The University reserves the right to modify or amend this Policy and Procedure at any time designated above, and the changes will apply to both any person attempting to or participating in Roosevelt University’s educational program or activity. This Policy does not constitute an express or implied contract between Roosevelt University and any past, present, or prospective student, employee (including administrator, faculty, or staff), contractor, or volunteer. This Policy governs conduct on all the University’s properties, including but not limited to the Auditorium Theatre of Roosevelt University (“ATRU”). Unless otherwise stated, the term “Employee” as used in this Policy shall refer to all employees (including administrators, faculty, and staff), contractors, and volunteers
Consistent with the University’s Non-Discrimination Notice and the U.S. Department of Education’s implementing regulations for Title IX of the Education Amendments of 1972 (“Title IX”) (see 34 C.F.R. § 106 et seq.), the University prohibits Sexual Harassment that occurs within its education programs or activities.
For purposes of this policy, Sexual Harassment includes Quid Pro Quo Sexual Harassment, Hostile Environment Sexual Harassment, Sexual Assault, Domestic Violence, Dating Violence, and Stalking.
Alleged violations can be reported to the Title IX Coordinator at mailto:[email protected].
In case of an emergency, please call 911.
Please visit https://www.roosevelt.edu/policies for a complete list of our policies and reporting options.