- Dead-simple concurrency model. Even if it won’t be the most performing one for some (or most) situations, it should be built into the language and be very easy to use. Ideally built with functions alone, requiring no special syntactic constructs. Advanced concurrency possible via STM.
Most of the other design considerations sound like a description of Clojure:
- Plain and simple syntax, minimal boilerplate, few keywords, no need for OOP constructs. The code must be very easy to read through. (this one is subjective I suppose. :-))
- Everything is an expression, no statements. The program itself is just a single expression.
- First-class functions and modules. Modules are simply sets of functions and records. Modules can be further organized into packages. Function calls supporting tail-call optimizations.
- Few data types. Yatta comes with the following built-in types: integer (64 bit), floating point number (64 bit), character (UTF-8), symbol, sequence (variable length, constant-time access to both ends), tuple (fixed length), dictionary, set and STM (Software Transactional Memory – coming in beta). No implicit conversions between types though!
- Custom data types, or records. Records are basically just tuples with named fields, and syntax sugar that goes with it.
- Run on JVM (GraalVM) and allow polyglot cooperation with other JVM languages. Very important if integrating with existing code-bases.