I noticed that the documentation for << and concat both state that the result of each operation is a new string.
However, while doing some experimenting myself I noticed that this doesn't seem to be the case. The result has the same object id and memory address as the initial string.
I also noticed that the underlying C code fore both of these does seem to return the original string pointer at the end.
Is this a documentation issue, or is there something else going on that I'm missing? If the former, I'm happy to put up a PR to fix. If it's the latter, I'd appreciate any explanation.
edit: to be clear, I'm making a distinction between "new string" in the contents-sense, and "new string" in the memory location sense.
For example, the << operation on Array inserts an array entry and returns self, which is why I was initially confused when I saw that the result of String#<< was a new string.