There is one thing where I would like to add my two cents:
Copy and move semantic which are a delight to use when writing performance
critical code specially. I think Nim is poor in that regards as it deeps copies
seq (vectors) and string by default
It is true that Nim does not have move semantics like Rust, but I see a clear
advantage that arguments to functions are passed probably by const reference.
++
struct MyStruct {
int64_t a,b,c,d;
};
void foo(const MyStruct& arg) {
// ...
}
Is in Nim:
type
MyObject = object
a,b,c,d: int64
proc foo(arg: MyObject): void =
#...
Therefore a lot of copying is avoided by default. Instances wher you actually
need to copy a value are rare. And there is less visual noise compared to the
Rust and C++ version.