Readme
This commit is contained in:
306
README.md
306
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<T>
|
||||||
|
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…
|
|
||||||
Reference in New Issue
Block a user