This question is kind of tricky to answer, because it's for both. On the machine side of things, the overall goal is to give you much more expressive power in regards to how your data is laid out in memory and the relationships between pieces of that data. Contrary to popular opinion, I care very much about this, because data locality has a huge impact on performance.alexfru wrote:Where does your language stand w.r.t. this problem? Is it for machines or for people?
On the human side of things, I've gone far out of my way to provide abstractions that exist solely to reduce complexity.For example, being able to bake parameters into functions to reduce the number of parameters that a function takes, being able to "use" substructs to flatten nested data structures, adding import bundling to flatten nested namespaces, allowing members of structures and function arguments to express meaningful relationships between each other via DAGs, separating interfaces from structures so that you can very easily add / remove / change components of a system without requiring a cascading recompilation, being able to use "use" to steal () and [] operators from functions and arrays to allow for extremely simple implementation of generators / coroutines / continuations / sparse arrays / dictionaries / etc.
In a lot of ways, the language is both far lower-level than C and far higher-level than C++; and syntactically, it's not even 1/4th as complex as C++ to comprehend. Much like C, what you see is what you get, and there's no surprises.
EDIT:
To be honest, if I had to put my finger on it, I'd say that a majority of my design decisions are guided by looking at how real-world problems are solved at a low-level, and then figuring out how to simplify the implementation of those specific solutions. For example, in my previous post, I was looking at the problem of "how can I pipe functions together in such a way that the size of the input and output data varies?". This is actually a fairly complicated problem to tackle, but it matters when you're dealing with data that's being streamed or generated; for example, in the implementation of a graphics pipeline.
And as I mentioned, although it's possible to do with the current syntax of the language, I'm not entirely happy about it specifically because it's complex to implement; so I'm working on making that more intelligible on the human side.