From 40e1541c10138d1a7f5c86b2b6a28f5074e82250 Mon Sep 17 00:00:00 2001 From: kaj dijkstra Date: Mon, 17 Nov 2025 10:33:35 +0100 Subject: [PATCH] Readme --- README.md | 306 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 304 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 63dc52a..09e1d11 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,305 @@ -# c-prime +Perfect. I’ll use: + +**Project Name:** C′ +**License:** MIT +**Style:** Developer-Friendly & Enthusiastic + +--- + +### 🚀 Your new README.md (ready to commit) + +You can copy this directly into `README.md` in your repo: + +--- + +# C′ — C with Classes. Zero Bloat. + +**C′ (C-Prime)** is a tiny object-oriented extension to the C language. +It adds **classes, methods, constructors, operator overloads, inheritance, templates, reflection**, and more — while still compiling to **pure, readable, high-performance C99**. + +You write modern OOP code. +C′ rewrites it into C. +The C compiler does the rest. + +⚡ **Instant preprocessing speeds** (just a few milliseconds) +📦 **Tiny compiler** (written in clean C99) +🧩 **Drop-in compatibility** with existing C toolchains +🛠 Uses **TinyCC**, GCC, or Clang to compile the output + +--- + +### Why C′? + +C++ gives you a lot… and a lot of baggage. + +C′ gives you **just the power of classes** without templates nightmares, ABI chaos, or hidden runtime behavior. +Everything turns into **transparent C functions and structs** you can read and debug directly. + +> **Write like OOP — ship like C.** + +--- + +## 🧠 How it works + +C′ is a **source-to-source compiler**: + +``` +C′ source → C′ Preprocessor → Pure C output → Normal C compiler +``` + +Under the hood: + +1. **Parse code** (via custom tokenizing lexer) +2. Extract **classes, methods, properties** +3. Replace OOP syntax with **C99 equivalents** +4. Generate `.c` + `.h` files +5. Compile with TinyCC (or any C99 compiler) + +Output remains beautiful C that **you can read**. + +--- + +## ✨ Language Features + +✔ Classes +✔ Methods +✔ Constructors +✔ Operator Overloading (`+`, `+=`, `==`, …) +✔ Property access via `this->field` +✔ Inheritance (multiple!) +✔ Templates / generics +✔ Reflection +✔ SQLite3 support +✔ Console logging with automatic pretty-printing +✔ File manipulation +✔ HTTP server utilities +✔ Zero runtime dependencies + +--- + +## 🔤 Example: Hello Classes + +**Input C′ code:** + +```c +#include "console.h" + +class application { + + sayHi(char * name) { + console.log("Hi ", name); + } + + launch() { + this->sayHi("John"); + } +} + +void main() { + application * app = new application(); + app->launch(); +} +``` + +**Generated C:** + +```c +// pseudo-simplified +typedef struct application {} application; + +void application_sayHi(application * this, char * name) { ... } +void application_launch(application * this) { ... } + +int main() { + application * a = application_new(); + application_launch(a); +} +``` + +Readable. Fast. Pure C. + +--- + +## 🕹 Constructors + +```c +class vector3 { + float x; + float y; + float z; + + constructor(float x, float y, float z) { + this->x = x; + this->y = y; + this->z = z; + } + + display() { + printf("x: %f, y: %f, z: %f", this->x, this->y, this->z); + } +} + +void main() { + vector3 * v = new vector3(1.0, 0.0, 1.0); + v->display(); +} +``` + +--- + +## 🌐 Minimal HTTP Server + +```c +#include "../http.h" + +void handleRequest(struct request * req, struct text * res) { + res += "HTTP/1.0 200 OK\r\n\r\nHello from C′!\r\n"; +} + +void main() { + http * server = new http(); + server->createServer(handleRequest); + server->listen(8080); +} +``` + +--- + +## 📁 Filesystem Handling + +Full directory scanning + file reads/writes with class APIs. + +--- + +## 🔧 Templates (Generics) + +```c +template +class vector { + T * items; + int total; + void add(T item) { ... } +} +``` + +Compiler generates correct type-specialized C. + +--- + +## 🧱 Multi-Inheritance + +```c +class B { ... } +class C { ... } + +class A extends B, C { + ... +} +``` + +Properties + methods are merged cleanly and deterministically. + +--- + +## 🧩 SQL via SQLite3 + +One-liner in-memory database setup: + +```c +sqlite * sql = new sqlite(":memory:"); +sql->selectModel("user"); +sql->createTable(); +``` + +Full CRUD built-in. + +--- + +# 🛠 Installation & Build + +### Requirements + +* **TinyCC** OR GCC/Clang +* **Linux** or macOS + +### Build + +```bash +make +./cprime input.cprime +``` + +This generates `.c` + `.h` files in `/output`. + +--- + +# 🔍 Internals + +### Lexer → Struct Model → Transform → Emit C + +``` +Lexer + ⮡ Tokens + ⮡ Syntax Data (structs) + ⮡ Rewrite rules + ⮡ Generators +``` + +The compiler itself is written in **clean C99** using a tiny standard library of: + +* arrays +* text utilities +* reflection metadata +* class loaders + +--- + +# 🤝 Contributing + +C′ is young — contributions are very welcome! + +Ideas: + +✔ Better diagnostics +✔ More docs & examples +✔ Editor syntax support +✔ Windows support +✔ More standard library components + +--- + +# 📜 License + +MIT License — do what you want, just keep the copyright notice. + +--- + +# ⭐ Clone C′ + +Publicly available: + +```sh +git clone https://code.kajdijkstra.com/kaj/c-prime.git +``` + +Or SSH: + +```sh +git clone git@code.kajdijkstra.com:kaj/c-prime.git +``` + +--- + +## 💬 Final words + +Thank you for checking out C′! + +If you’ve ever wondered +*“How does a compiler **really** work?”* + +C′ is a simple but powerful place to learn — and create. + +Future of C coding: +**Object-oriented when you want it — pure C where it counts.** + -A C-like compiled language with modern class-based features… \ No newline at end of file