11,967
stars
+0+1+28
1,079
forks
172
watchers
43
prs
123
issues
0
releases
–
discussions
README
chibicc: A Small C Compiler (The old master has moved to historical/old branch. This is a new one uploaded in September 2020.) chibicc is yet another small C compiler that implements most C11 features. Even though it still probably falls into the "toy compilers" category just like other small compilers do, chibicc can compile several real-world programs, including Git, SQLite, libpng and chibicc itself, without making modifications to the compiled programs. Generated executables of these programs pass their corresponding test suites. So, chibicc actually supports a wide variety of C11 features and is able to compile hundreds of thousands of lines of real-world C code correctly. chibicc is developed as the reference implementation for a book I'm currently writing about the C compiler and the low-level programming. The book covers the vast topic with an incremental approach; in the first chapter, readers will implement a "compiler" that accepts just a single number as a "language", which will then gain one feature at a time in each section of the book until the language that the compiler accepts matches what the C11 spec specifies. I took this incremental approach from the paper by Abdulaziz Ghuloum. Each commit of this project corresponds to a section of the book. For this purpose, not only the final state of the project but each commit was carefully written with readability in mind. Readers should be able to learn how a C language feature can be implemented just by reading one or a few commits of this project. For example, this is how while, [[]](https://github.com/rui314/chibicc/commit/75fbd3dd6efde12eac8225d8b5723093836170a5), ?:, and thread-local variable are implemented. If you have plenty of spare time, it might be fun to read it from the first commit. If you like this project, please consider purchasing a copy of the book when it becomes available! 😀 I publish the source code here to give people early access to it, because I was planing to do that anyway with a permissive open-source license after publishing the book. If I don't charge for the source code, it doesn't make much sense to me to keep it private. I hope to publish the book in 2021. You can sign up here to receive a notification when a free chapter is available online or the book is published. I pronounce chibicc as _chee bee cee cee_. "chibi" means "mini" or "small" in Japanese. "cc" stands for C compiler. Status chibicc supports almost all mandatory features and most optional features of C11 as well as a few GCC language extensions. Features that are often missing in a small compiler but supported by chibicc include (but not limited to): - Preprocessor - float, double and long double (x87 80-bit floating point numbers) - Bit-fields - alloca() - Variable-length arrays - Compound literals - Thread-local variables - Atomic variables - Common symbols - Designated initializers - L, u, U and u8 string literals - Functions that take or return structs as values, as specified