On Thursday, October 17, 2013 15:18:19 Dicebot 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? > > Allocation-free slicing would have been illegal/unsafe then as > someone could have possibly modified underlying chars via mutable > reference.
It wouldn't have to be illegal, and there's nothing unsafe about it. You can slice fully mutable arrays as much as you like without allocating any memory, and it's perfectly safe. However, you can't rely on the elements of a const array not being modified (because a mutable reference to the same data could modify it), and you can't share it across threads (as unlike immutable, const is not implicitly shared). So, dealing with strings if they were const(char)[] would probably be more bug-prone, and you'd be forced to dup your strings far more often in order to guarantee that they weren't being altered by a mutable reference somewhere. On top of that, you really wouldn't gain anything. So, it would definitely be a bad idea. Defaulting to immutable(char)[] makes a lot of sense, and you can still use const(char)[] or char[] if you want to, so it's not like it's particularly limiting either. - Jonathan M Davis