I have always disliked the := as assignment operator convention. In these declarative languages, assignment is done frequently. There is little cognitive load to using '=' as assignment, although perhaps a bit jarring for math folk.
<- is somewhat better, but, again, for such a common operation, a single character is just more convenient. Sure, we could have editors that turn "=" into := or <- but now we're getting too fancy especially for something pedagogical.
I also don't mind the -> for C pointers; and certainly don't mind the <= >= or even == conventions (although at least today's compilers warn when they see "if (a=b) ...".
Ultimately, humans won't be writing code anymore anyway ( ;-) ?) so maybe the issue is entirely moot.
> I have always disliked the := as assignment operator convention. In these declarative languages, assignment is done frequently.
> I also don't mind the -> for C pointers
Mmm. These two opinions should be contradictory if held on principle as opposed being held out of impression.
it = next(it);
if ((*it)->node->op == EQ) ...
vs. it := next(it);
if it.node.op = EQ ...
Eh. I don't really mind either of those except for the stupid parens after the "if" in the first case.Technically, if you don't make assignment an expression, you can even get away with using "=" for both. And "->" exists only because structs originally weren't really typechecked; you could take any pointer and just do "->struct_field" at it, and the compiler would auto-cast.
Using '=' for both assignment and comparison is awkward when parsing incomplete code. Consider e.g.:
The user starts writing (<|> is the cursor position): This is a valid expression (i is a boolean). But the user probably intends to finish writing something like: So in the intermediate state we would like to emit a single warning about an incomplete statement. But since it is valid as written, we instead end up warning about e.g. j being unbound.