diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 38 |
1 files changed, 2 insertions, 36 deletions
@@ -1,10 +1,6 @@ -# P4Dcc +# Ducc -P4Dcc is a tiny, but self-hosted C compiler. It takes C source code and compiles it to assembly language. For assembling and linking, it deletegates to gcc as-is. - -This project was started to prove the hypothesis: "Could a self-hostable C compiler be built in four days, if the feature set is carefully limited?" - "P4D" stands for the ISO 8601 notation meaning "four days." However, I actually completed the project by the morning of the third day. - -The code is written following the instructions at https://www.sigbus.info/compilerbook, and several key design decisions were inspired by the book. +Ducc is a toy C compiler, based on [my another tiny C compiler](https://github.com/nsfisis/P4Dcc). ## Dependencies @@ -24,39 +20,9 @@ $ just build ``` $ just test -$ just test-all # test all things, including binary equiality between generations ``` -## Design - -To meet the four-day goal, many design decisions were made to reduce complexity (ideas directly taken from https://www.sigbus.info/compilerbook are not listed): - -* Simplified declaration syntax - * No support for `typedef` - * Structs always begin with `struct` keyword - * No support for array types - * No stack-allocated arrays - * All arrays are heap-allocated and accessed via pointers - * No support for function types - * Type information always precede the variable name -* Minimal syntax sugar - * ~~No increment/decrement operators~~ - * Partially implemented after self-hosting - * ~~No compound assignment operators~~ - * Implemented after self-hosting - * ~~No `while`~~ - * Implemented after self-hosting - * No `switch` -* Limited preprocessor - * Supports only simple `#define` that replaces identifiers with single integer or identifier -* No global variables - * Including `stdin`, `stdout`, and `stderr` - * Only function/struct definitions/declarations are allowed at the top level -* No variable shadowing - * All variables are function-scoped - - ## License See [LICENSE](./LICENSE). |
