I've recent been reading about immutable strings Why can't strings be mutable in Java and .NET? and Why .NET String is immutable? as well some stuff about why D chose immutable strings. There seem to be many advantages.
- trivially thread safe
- more secure
- more memory efficient in most use cases.
- cheap substrings (tokenizing and slicing)
Not to mention most new languages have immutable strings, D2.0, Java, C#, Python, etc.
Would C++ benefit from immutable strings?
Is it possible to implement an immutable string class in c++ (or c++0x) that would have all of these advantages?
update:
There are two attempts at immutable strings const_string and fix_str. Neither have been updated in half a decade. Are they even used? Why didn't const_string ever make it into boost?
Best Answer
I found most people in this thread do not really understand what
immutable_string
is. It is not only about the constness. The really power ofimmutable_string
is the performance (even in single thread program) and the memory usage.Imagine that, if all strings are immutable, and all string are implemented like
How can we implement a sub-str operation? We don't need to copy any char. All we have to do is assign the
_head
and the_len
. Then the sub-string shares the same memory segment with the source string.Of course we can not really implement a immutable_string only with the two data members. The real implementation might need a reference-counted(or fly-weighted) memory block. Like this
Both the memory and the performance would be better than the traditional string in most cases, especially when you know what you are doing.
Of course C++ can benefit from immutable string, and it is nice to have one. I have checked the
boost::const_string
and thefix_str
mentioned by Cubbi. Those should be what I am talking about.