"I agree there's much confusion about Erlang concurrency being related to it being a functional programming language,"
While the term "functional programming language" is sometimes abused to mean different things, isn't the canonical meaning "functional" == "no mutable state"?
If I've understood his rebuttal correctly, he's not adding mutable state, he's allowing a variable to be rebound to different (immutable) values. i.e. his multiple-assignement language is still functional in the sense above.
The difference is that if you have two bindings to the same value, mutable state means that both bindings see an update to that value.
This wouldn't happen with "multiple assignement and immutable values" (if you reassign the binding of one of the two, the other is still bound to the old value).
I consider the values of a program's variables to be part of its state.
It's somewhat odd (read "probably a mistake") if a variable can be visible before it is bound in a functional language. If the execution model does anything other than block until a variable's binding is available, its bind state is mutable state, with all of the problems that entails.
While the term "functional programming language" is sometimes abused to mean different things, isn't the canonical meaning "functional" == "no mutable state"?
If I've understood his rebuttal correctly, he's not adding mutable state, he's allowing a variable to be rebound to different (immutable) values. i.e. his multiple-assignement language is still functional in the sense above.
The difference is that if you have two bindings to the same value, mutable state means that both bindings see an update to that value.
This wouldn't happen with "multiple assignement and immutable values" (if you reassign the binding of one of the two, the other is still bound to the old value).