diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-05-07 09:18:21 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-05-07 09:18:21 +0900 |
| commit | f427d5c99f0380d7f547101878e36ef5008e248b (patch) | |
| tree | c88435dabe710d9592a7b081cdb48922e5f96ffe /README.md | |
| parent | 68d9da9746d235e2d9a7d0ba61310c533b355847 (diff) | |
| download | ducc-f427d5c99f0380d7f547101878e36ef5008e248b.tar.gz ducc-f427d5c99f0380d7f547101878e36ef5008e248b.tar.zst ducc-f427d5c99f0380d7f547101878e36ef5008e248b.zip | |
start ducc project
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). |
