On Thursday, 17 October 2013 at 18:28:31 UTC, Meta wrote:
On Thursday, 17 October 2013 at 13:08:18 UTC, Daniel Davidson wrote:
If it would be no different then why prefer immutable(char)[] for string?

Strings are immutable in quite a few other languages. Ex: Java, Python. I found this old article written by Walter:

http://www.drdobbs.com/architecture-and-design/invariant-strings/228700475

True and I believe they do it without an immutable keyword. I'm not questioning the value of a non-mutable type, just trying to get to the heart of why the keyword immutable is preferred over const in this example. Dicebot clarified it - essentially it is because sharing can creep in before it gets settled into a const(char)[] context. And once sharing has potentially happened you can't undo it except for transitive deep copy.

Had D gone with:

struct String {
   const(char)[] s_;
   this(char[] s) { s_ = s.dup; }
}

and not allowed any modification of elements you would still have immutable without the keyword. Granted, it would not be efficient so I see the benefit.

Strings/slices have sharing. Can the same issue/benefit occur with primitives? Would you ever have a need for `immutable(int)` over `const(int)`?

Reply via email to