Build your own Lisp interpreter step by step to understand how parsers, evaluators, environments, and macros work under the hood.
Compare how interpreter concepts like tail calls and closures look across very different languages by browsing the 89 implementations.
Use the self-hosting final step to verify your interpreter is fully functional by running mal code written in mal itself.
Follow the 11 testable milestones to systematically learn language implementation with a structured process guide.
Mal, which stands for Make a Lisp, is a project designed to teach people how programming languages work by having them build one. Specifically, it guides you through creating an interpreter for a dialect of Lisp, a family of programming languages with a long history in computer science. Lisp is known for its simple, highly regular syntax, which makes it an ideal subject for a language-building exercise. The project breaks the work into 11 incremental steps, each self-contained and testable. You start with a basic read-evaluate-print loop (a shell that accepts input and shows output), then gradually add evaluation, variables, functions, error handling, file loading, macros, and more. The final step results in an interpreter that can run mal written in mal itself, which is called self-hosting. This is a meaningful milestone in language design. What makes this project unusual is the breadth of languages it has been implemented in. The repository contains 89 different language implementations, covering everything from common choices like Python, JavaScript, Java, and Rust, to unusual ones like Bash, GNU Make, PostScript, PL/pgSQL (a database query language), LaTeX3, and NASM assembly. Each implementation follows the same 11-step structure, so you can compare how the same concepts look across very different languages. For anyone learning about interpreters, compilers, or how programming languages actually work under the hood, mal serves as a structured guided project rather than just a finished piece of software. A detailed process guide walks through each step with explanations and architectural diagrams. There is also a Discord community for people building or studying implementations. The README is primarily a reference index listing all implementations and their contributors. The full README is longer than what was shown.
← kanaka on gitmyhub — every repo by this author, as a profile.
Verify against the repo before relying on details.