Course Information
Difficult programming problems call for the creation of domain-specific languages (DSLs) to express concise solutions—like React.js for web UIs, TensorFlow for machine learning, or D3.js for data visualization.
This course will introduce DSL design and implementation techniques including embedding, macros, and compilation. We’ll use Racket’s advanced language-oriented programming tools: its macro system and the syntax-spec metalanguage. These technologies are developed by researchers at Northeastern and have influenced features in other programming languages such as the macro systems in Rust and Lean 4.
The first half of the course will build your knowledge with weekly programming assignments. In the second half, you will design implement and present your own DSL with a partner.
Information about a similar previous offering of the course is available here including previous student student projects.
Prerequisite
This course will mostly rely on a rock-solid understanding of Fundamentals I, but students will benefit from additional coding experience (prior to college, as a hobby, or via co-op).
Registration
The 3620 course number is used for a number of different electives with different topics under the generic title "Building Extensible Systems". The course description in the course catalog and Banner corresponds to a previous offering of the course with a different subject. The description on this page is accurate for the Spring 2025 offering.
If you would like to register for this course but encounter problems because you have taken last year’s offering of 3620, please email me.
If you would like to register for this course but encounter problems because the prerequisite on Banner is listed as CS 2510 rather than CS 2500, please email me for an override.
Relationship to other courses
Northeastern offers two other courses related to programming languages: CS 4400 Programming Languages and CS 4410 Compiler Design. These other courses focus on PL concepts and implementation for languages with general-purpose features like functions and classes.
In contrast, "Hack Your Own Language" shows how to build domain-specific languages within or as an extension to a general-purpose language using embedding and macros. You’ll also see examples of DSLs for many applications such as database query, web scraping, interactive UIs, animation, and parsing.
Instructor
Michael Ballantyne. Please email me if you have any questions about the course.
Time
Mondays, Wednesdays, and Thursdays 10:30-11:35am.