"It's really easy to make fun of C++, but everyone has that one feature of C++ that they like. And they want to put it in Zig. If everyone had their favorite feature from C++ in Zig, Zig would just be C++. But I'm not going to let that happen."
a language with first class cross-compilation alone is enough for me to respect you as a language designer and zig have so many features like this. i am a huge fan.
i have only one favourite feature in c++ and it is templates/ctfe. without the function/operator-overloading templates are incomplete, i would then use c instead. i am still using c++ with all its failures, with all its complexity, with all its uglyness|ineleganceonly because c++ got one thing right. you can at least somehow modify the language.
edit: i have to point out that i have never worked in a big team (more than 10) and you can (probably should) safely ignore my ideas/opinions.
Meta-programming can be super powerful and practical, and the current trend of reusing the language itself is clearly better than previous attempt.
But meta-programming in itself is not a novel idea, C macros and C++ templates are past well studied examples, and both produced awful results.
I am not sure they can prevent a new cycle of this nightmare.
I have no doubt about how powerful metaprogramming is, but it makes me feel that understanding and contributing to libraries that use it is out of my reach.
I have found that when any project gets to a certain size, it's almost inevitable that metaprogramming will be required, unless you want to make everything super dynamic and sacrifice performance. The idea of being able to do metaprogramming in the language I used to write the program itself is an interesting one.
What's wrong with templates ? They give you a compile-time functional language that operates on types, isn't that great ?
With something like that:
var x = a [+] b;
There is no possible mistake.
It is probably better to have native support for small vector operations, as this can also help to streamline SIMD optimization.
In practice (as a video game dev) I only use operators overloading to have infix notation on vector maths.
When trying to understand a codebase, it is much easier to not worry about hidden indirections.
being able to misuse a PL i believe is not a bug but a feature. we really suck at predicting the future.
But it is better to avoid giving them too many ways to shoot themselves in the foot.
Forcing the code to be explicit is good design, in my opinion, simply because it is much easier to write code than to read it, we have to put more weight on the clarity side.
i have nothing against having strong opinions, i am the biggest offender but completely disallowing some features, some of the best features static typing can offer is just nonsense.
every language designer should study common-lisp and start with the operators : and :: these two operators alone tell you that the language designed for practical use.
for me overloading the operator + and function 'add' is exactly same. you should then forbid function overloading as well now. you can argue about the weakness of operator overloading but disabling completely, not even a workaround?
why not just enable oo and have safe alternatives instead? . safe(a + b) . a s+ b