NG: Next generation Programming language
This is about the detailed description of ng-lang and for now it's still work in progress.
core concept
ng is a programming language which may be different from today's programming languages, it won't be object-oriented, and it is strong and static-typed. It is also not so much like modern functional programming language, no such FP things annoying you. No vars, no macros, and no MONADs! and every function should be explicitly annotated with types.
And ng inherites template from C++/D with much powerful enhancement to let you do CTFE (Compile time function execution).
Types
Here we have to different kinds of types, everything with out
the ref
modifier is an value type, which is on value semantics.
and ones with ref
, is reference type, and on ref semantics.
Let me explain you what is this about in following details.
Simple type:
- Primitives:
- Num (what? float?? sorry, make it yourself!)
- Bool
- Char
- Unit
- Composites:
- Tuples (a.k.a. Product types)
- Records
- Sum types
Parameterized type:
Let's say we want build a thing that may useful like an array.
which can support different type with fixed size. How could
you represent this? I got Array<Int, 3>
here.
The Int and 3 in Array<Int, 3>
are the parameters of this
type. And for the prototype of array, should looks like
type Array<'t, 'arity: Num> where 'arity >= 0
The where clause is a constraints for 'arity parameter which indicates that field cannot be negative.
Here is another syntax to do this checking
type NonNegative<'num: Num> where 'num >= 0
type Array<'t, 'arity: NonNegative>
NonNegative is like typeclass / type traits / concepts in other languages such like Haskell/C++/D.
Here is another constraint example in ng.
type ValueType<'t: * 'a> = 'a
Here we can use ValueType to represent Int now.