mirror of
https://github.com/Theaninova/DynamicC.git
synced 2025-12-11 01:36:14 +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