C* Programming Language
The number of programming languages is constantly growing, but most of them aren’t solving any issues. Furthermore, most of the general-purpose languages fail to introduce any new design ideas and just shuffle/sample features of older siblings.
The definition of insanity is doing the same thing over and over again and expecting a different result. Albert Einstein.
So why design a language in the first place?
- For efficient code generation we need tailor-made compilers, but C++ is too hard to parse and has many other issues.
- Languages like LISP are dynamically typed, which makes them too slow for HPC.
- C doesn’t have RAII, overload resolution, templates or generics.
- Languages like Rust, Swift and D are also overcomplicated with enums and modern pattern matching.
- OpenCL and many other parallel programming language are not properly maintained any more.
- Performance higher than in C++/C… thanks to kernel fusion, the next evolutionary step after inlining.
- Parsing speed similar to Common LISP.
- Simple prototyping and optimization like in Halide.
- Context-free grammar. (In unique way)
- Extendable keywords set. (In unique way)
- Static typing and manual memory control.
- Interpretable to C, OpenCL and CUDA.
- Support for compact wrapper classes.
- Modular compiler.
- Compile-time reflections for consistent data exchanges.
- Implicit Array-of-Structs to Struct-of-Arrays optimizations.
- Functions allow multiple input arguments and multiple outputs.
- Functions can be partially specialized and overloaded.
- Functions can be serialized into IR, just like data.
Most modern languages are built around the LLVM toolchain, which makes it easy to target many platforms out-of-the-box. LLVM is a good starting point, but like most modern compilers - it’s humongous!
Here is the number of files in LLVM and GCC repositories: