Languages like J make this distinction: `=` is equals in the mathematical sense [1], while `=.` and `=:` are the assignment operators (the former being local and the latter global) [2].
Although the assignment operator and the equals operator are similar there is a preference to have the equals sign retain its original meaning.
So do Pascal and Ada, but using "the = character with a tiny dot next to it" doesn't sound like it will avoid the fundamental issue here. That's just extra syntax to help remind the programmer whether they're assigning or comparing. It still basically looks like "=". That's why it was chosen.
(I wouldn't call J's = "the mathematical sense", either, as I don't know any mathematicians who would say that = is an operator that evaluates to 1 when the two sides are within 2⁻⁴⁴. The mathematical sense is merely a statement of fact, e.g., "x+10=y+10", when x is 5 and y is unknown, should mathematically result in knowing that y is also 5. Wolfram is the only language I know offhand that does anything like this.)
Forth, Lisp, Scheme, APL, R, Logo, Cobol, and assembly all have a variable assignment syntax that doesn't use the "=" character at all. Only 2 of them even use the form "varname SYMBOL expression".
I probably wouldn't recommend assembly language as a teaching language, but you have to admit no assembly programmer ever confused LDA and CMP.
(I wouldn't call J's = "the mathematical sense", either, as I don't know any mathematicians who would say that = is an operator that evaluates to 1 when the two sides are within 2⁻⁴⁴. The mathematical sense is merely a statement of fact, e.g., "x+10=y+10", when x is 5 and y is unknown, should mathematically result in knowing that y is also 5. Wolfram is the only language I know offhand that does anything like this.)
Forth, Lisp, Scheme, APL, R, Logo, Cobol, and assembly all have a variable assignment syntax that doesn't use the "=" character at all. Only 2 of them even use the form "varname SYMBOL expression".
I probably wouldn't recommend assembly language as a teaching language, but you have to admit no assembly programmer ever confused LDA and CMP.