On this page:
Hack Your Own Language
8.14

Hack Your Own Language🔗

(aka 3620 Building Extensible Systems, Spring 2025)

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.

Edit April 27: Thanks for a great semester! Here are the completed projects:

Alexander Chang-Davidson and Collin McKinley

SkyJack: The flight navigation programming language

Aiden Sato

Tuplet: A slightly silly drum sequencer

Brendan Brady and Robert Patterson

midilang: Musically Impractical DSL Implementation

Ari Prakash and Zack Eisbach

miniDusa: Finite-choice logic programming

Matthew Coscia and Dilan Piscatello

Options Trading: Test complex options trades before executing them

Smaran Teja Penikelapati and Luke Christenson

TradingDSL: A DSL for defining, testing, and analyzing stock trading strategies

Andrey Piterkin and Luke Jianu

Logical Student Language V2: A student language with contracts and property-based testing

Joshua Goldberg and Will Du

Elements: A DSL for optimizing and calculating Genshin Impact damage rotations

Nate White and Jordan Zedeck

CA-DSL: A DSL for expressing and simulating Cellular Automata

Owen Duckham and Kesava Chandra Vedula

Orbital: 3D Molecular Rendering

Joshua Torre and Nikhil Khot

Fractalang: Iterative and escape-time fractals

Rishikesh Kanabar and Aryan Kalaskar

ASMR: Assembly-Racket

    Course Information

    Readings

    Lectures

    Assignments

      1 Research a DSL

      2 Embedded DSLs A

      3 Embedded DSLs B

      4 Project idea meeting

      5 Simple Macros

      6 Match

      7 Project design presentation and write-up

      8 syntax-spec DSLs A

      9 Project Syntax Implementation Code Walk

      10 Final Project Presentation and Code Walk

      11 Project Documentation and Revisions