This course surveys the principles of modern programming languages and provides a glimpse of contemporary programming languages research. This is an implementation-heavy course, where you will build typical language-based tools such as interpreters, type-checkers, and type inference algorithms. You will also implement emerging technologies, such as program verifiers and 'fancy' type systems.
This course shares lectures with COMPSCI 631, which is the graduate programming languages course. See the 631 web pages for more information on course content. The assignments in 497P are a significant subset of 631 assignments. The official prerequisites for 497P are to have all As in 220, 230, 250, and permission of the instructor. Grades are just a first-pass filter. Beyond the grade requirements, you need to love programming, love mathematical logic, and have the tenacity to spend days debugging code, whether it be assembly language or generated formulas for an automated theorem prover.