On Mon, Jun 28, 2010 at 14:35, Steven Schveighoffer <schveiguy@yahoo.com> wrote:
On Mon, 28 Jun 2010 08:14:12 -0400, Philippe Sigaud <philippe.sigaud@gmail.com> wrote:

On Mon, Jun 28, 2010 at 10:56, Jacob Carlborg <doob@me.com> wrote:

Something to keep in mind: as of 2.04x (.045? maybe), the way UTF-8 / UTF-32
is managed was changed. "asd" is an array of immutable(dchar), not
imutable(char). At least DMD tells me that its element type is 'dchar'.

No, that is not true.  It's still an array of immutable(char).  The compiler still sees it as an array of immutable(char).  However, std.range forces the element type of char[] and wchar[] to be bidirectional ranges of dchar.  The tests such as isRandomAccessRange and ElementType are fudged to say string is *not* a random access range, and its element type is dchar.  This was one of Andrei's changes because without such shoehorning, std.algorithm could possible start shearing off strings that weren't valid.


Ah yes, indeed, you're right.

 
Whether that was the right decision remains to be seen.  I personally would rather have special ranges that do those things.  If I have a string that's always in English, why do I need to generate the dchars based on the characters in that array?


All that I can say is that it instantly broke dozens of unit tests in my projects, which were using strings a simple random-access ranges. It took me 2 DMD releases to work my way uout of it.

Maybe I should have a look at byCodeUnit or somesuch. But for clueless users like me, strings suddenly became much more complicated to use. Maybe I was using them in unsafe ways, I don't know. I just hope for a way to get my simple strings back.