michael-lehn / not-abc
git clone https://github.com/michael-lehn/not-abc.git
β
+3
stars, 24h Β· #7,835
+~21
stars, 7 days Β· #7,601
+~90
stars, 30 days Β· #7,530
55
β
total Β· +21% this week
5
forks Β· 0 open issues
Star history (as recorded here)
LanguageLLVM
LicenseGPL-3.0
Created2026-07-24 (3mo ago)
Last push1d ago
Watchers0
OwnerUser
Links
- GitHub: github.com/michael-lehn/not-abc
- Releases Β· Issues Β· Hacker News mentions
README excerpt
# not-abc `not-abc` is a tiny, self-hosting programming language and compiler. The language is deliberately minimal: it has only 64-bit values, no static type checking, and only a handful of built-in functions. The entire compiler is written in `not-abc` itself. The project is intended for educational purposes. It demonstrates that a surprisingly small language is sufficient to implement a complete compiler. **Note:** This project uses hard tabs with a tab width of 8. If the code looks misaligned on GitHub, append `?ts=8` to the URL or configure your GitHub tab width accordingly. ## A note on the name Why *not-abc*? Because it is not ABC. Well, not quite. ABC (*A Better C*) is my educational programming language, implemented in C++ with an LLVM backend. *not-abc*, on the other hand, is a deliberately minimal language and a self-hosting compiler developed for my undergraduate HPC course. The original compiler was written in ABC, so the two projects are closely related after all. The naming follows a long tradition of confusion: Bell Labs had B, CWI developed an unrelated language originally called B (later ABC), and I developed yet another unrelated ABC. Now there is *not-abc*, which is related to my ABC but insists on not being it. Any remaining confusion is entirely intentional. ## Teaching Material I am currently translating the teaching material for my undergraduate course **Introduction to High Performance Computing (HPC0)** into English. This is an ongoing effort and will take some time, but I try to make regular progress whenever my schedule allows. The translated worksheets, lecturer notes, and additional teaching material can be found here: - HPC0 Sessions - Session 00 β Getting Ready - Session 01 β Top-Down: Experiments with ABC - Session 02 β Bottom-Up: Logic Gates - Session 03 β Top-Down: Control Flow and Function Calls - Session 04 β Bottom-Up: Building a simple ALU (Part 1 of 2) - Session 05 - Top-Down: Control Structures, Arrays and Local Variables - Session 06 β Bottom-Up: Building a simple ALU (Part 2 of 2) - Session 07 β Top-Down: Pointers, Structs, Lists, ... - Session 08 β Bottom-Up: ULM (Ulm Lecture Machine) on Paper - Session 09 β Top-Down: Building a Symbol Table - Session 10 β Bottom-Up: Assembly & Code Generation - Session 11 - Not A Bloody Compiler Project: Let There Be a Lexer - Session 12 - Top-Down: Strings, Pointers, and Unique String - Session 13 - Not A Bloody Compiler Project: Let There Be Trees β¦ and a Parser - Session 14 β Bottom-Up: Function Calls and the Stack - Session 15 β Not A Bloody Compiler Project: Build System & Pimpin' the Grammar - Session 16 - Top-Down: Unions, Memory Layout, and Type Design - Session 17 - Not A Bloody Compiler Project: From Parsing to Code Generation - Session 18 - Not A Bloody Compiler Project: From Expressions to Programs - Session 19 - Bottom-Up: Calling Conventions (Part II)β¨ - Session 20 - Not A Bloody Compiler Project: Variables and Return Statements - Se