> This is indeed a problem with languages without mandatory variable declaration.
Typos affect everyone. It is not a function of the language that causes you to mistype. It is that the program is long and you cannot see the whole thing that causes you to miss it.
> Is it the case of K, Q or whatever its name is?
{foo}[] generates an error because foo is unbound. What's the difference between {foox} and {fooy}? They both might be variables, and yet it is only by reading the program that you can tell which one is correct.
> Typos affect everyone. It is not a function of the language that causes you to mistype. It is that the program is long and you cannot see the whole thing that causes you to miss it.
In any language with mandatory variable declaration the code wouldn't even compile. And any decent IDE would even flag this while writing the code.
> In any language with mandatory variable declaration the code wouldn't even compile.
Nonsense. memmove and memcpy are both defined, and if you choose the wrong one your program compiles and runs, but it simply produces the wrong result.
> And any decent IDE would even flag this while writing the code.
There is no IDE that will flag this. Advanced whole-program static analysis has a hard time with this problem and I'm not aware of any general solutions.