mirror of
https://github.com/Theaninova/DynamicC.git
synced 2025-12-12 10:06:18 +00:00
Create README.md
This commit is contained in:
55
README.md
Normal file
55
README.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# DynamicC
|
||||||
|
A syntactically nice language that compiles to C99
|
||||||
|
|
||||||
|
Built using JetBrains MPS, Code is written in a *projectional editor*.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
### Modern Syntax
|
||||||
|
Syntax is heavily inspired by Kotlin, and does not aim for compatibility with C.
|
||||||
|
|
||||||
|
### Safe Memory Access
|
||||||
|
Todo;
|
||||||
|
|
||||||
|
### Cleaned Up Types
|
||||||
|
C99 comes with so many unclear types, it's actually insane to keep track of. We use instead `uint8..128`, `int8..128`, `byte8..128` and `float32..128` for most things.
|
||||||
|
|
||||||
|
### Rudimentary Classes
|
||||||
|
I promise, these are optional. In many cases it can be useful if a struct can posess a function that does stuff on it, so it
|
||||||
|
essentially just creates a function that takes the struct as an additional parameter. I don't really plan to add inheritance or
|
||||||
|
any of the more advanced features though.
|
||||||
|
|
||||||
|
### Strong and weak types
|
||||||
|
Coming from TypeScript, it was especially important to me to be able to define types aliases that are incompatible (`strong type`)
|
||||||
|
and type aliases that can be used interchangeably (`weak type`).
|
||||||
|
```
|
||||||
|
strong type ReturnCode from int8
|
||||||
|
|
||||||
|
var a: ReturnCode = 0
|
||||||
|
val b: int8 = 1
|
||||||
|
|
||||||
|
// Error: ReturnCode can't be assigned to int8
|
||||||
|
a = b
|
||||||
|
|
||||||
|
// Use this if you want to assign it anyways
|
||||||
|
a = b as int8
|
||||||
|
```
|
||||||
|
|
||||||
|
### Multi Assignments
|
||||||
|
I saw this feature in Crystal, and wanted it here.
|
||||||
|
```
|
||||||
|
int a: int8 = 1;
|
||||||
|
int b: int8 = 2;
|
||||||
|
|
||||||
|
a, b = b, a
|
||||||
|
```
|
||||||
|
|
||||||
|
### Null Safety
|
||||||
|
Similar to Kotlin, you can't assign a variable the value `null` unless you mark it nullable:
|
||||||
|
```
|
||||||
|
// Error: a can't be null
|
||||||
|
val a: int8 = null
|
||||||
|
|
||||||
|
// If you need it to be null, use this instead
|
||||||
|
val b: int8? = null
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user