# 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; ### Tuples Todo; ``` val a: (int8, byte32) = (7, 9) ``` ### Named Maps We all know these are just structs. ``` map A { a: int8 b: byte32 } ``` ### Named Function Parameter Access Todo; ``` fun foo(a: int8, b: int32?, c: byte8) { ... } foo(c: 16, a: 63) ``` ### Default Parameters Todo; ``` fun foo(a: int8 = 16) { ... } // a will be 16 foo() // a will be 32 foo(32) ``` ### Template Strings Todo; ``` val a: int32 = 16 "This int is {a}" ``` ### Generics Todo; ``` fun foo(a: T): G { ... } foo(23, 54) ``` ### 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 ```