On Mon, Jun 28, 2010 at 14:35, Steven Schveighoffer <schvei...@yahoo.com>wrote:
> On Mon, 28 Jun 2010 08:14:12 -0400, Philippe Sigaud < > philippe.sig...@gmail.com> wrote: > > On Mon, Jun 28, 2010 at 10:56, Jacob Carlborg <d...@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.