Why doesn't this work in D2?
philippe.sigaud at gmail.com
Mon Jun 28 06:51:43 PDT 2010
On Mon, Jun 28, 2010 at 14:35, Steven Schveighoffer <schveiguy at yahoo.com>wrote:
> On Mon, 28 Jun 2010 08:14:12 -0400, Philippe Sigaud <
> philippe.sigaud at gmail.com> wrote:
> On Mon, Jun 28, 2010 at 10:56, Jacob Carlborg <doob at me.com> wrote:
>> Something to keep in mind: as of 2.04x (.045? maybe), the way UTF-8 /
>> 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.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Digitalmars-d-learn