My intuition on the phrase "message sending" is that it should be distinguished by immutable values. If I send you a message by writing it on a piece of paper, I don't expect that if you write on that note it will change any information I have on me. The message is passed by value, not by reference. I should be able to copy the message, send it over a network or store it to external memory, and have everything still work the same.
CLOS and Lisp inherently involve passing objects by reference. If they allow mutation operations, the receiver of a value can mutate it and that's visible to the caller.
These physical analogies also make me think that for it to be message sending then it must be asynchronous, because if I send you a letter then I'm not forcefully frozen from the instant I drop it into the postbox until I hear back.
Just like Smalltalk, which has no concept of immutable types, other than only providing accessor messages, which is an active decision by the class implementer.
Well, as I understand it, it achieves that by making the message passing extremely fine grained. So, in a sense all the messages are immutable, but only by creating a hairball of objects and messages.
Maybe I should be thinking about what sending references to objects in messages means.
CLOS and Lisp inherently involve passing objects by reference. If they allow mutation operations, the receiver of a value can mutate it and that's visible to the caller.