June 28, 2010 Re: Why doesn't this work in D2? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | Hello Jacob, > On 2010-06-28 02:28, BCS wrote: > >> One solution would be to have templates strip off const/immutable >> from the top level of args. >> [...] >> This solution would match the proposal that popped up a while ago to >> allow value assignment from const/immutable to mutable. >> > I don't think I understand what you're showing here. How would I strip > off the const/immutable with a template ? > I was proposing a language change Sorry for any confusion. The idea is that unless the user ask for it explicitly, there is no particular reason to preserve const/immutable for the value portion (true value types and the first level of references/pointers) of arguments. -- ... <IXOYE>< |
June 28, 2010 Re: Why doesn't this work in D2? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer Attachments:
| 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. |
June 28, 2010 Re: Why doesn't this work in D2? | ||||
---|---|---|---|---|
| ||||
Posted in reply to BCS | On 2010-06-28 15:48, BCS wrote: > Hello Jacob, > >> On 2010-06-28 02:28, BCS wrote: >> >>> One solution would be to have templates strip off const/immutable >>> from the top level of args. >>> > [...] >>> This solution would match the proposal that popped up a while ago to >>> allow value assignment from const/immutable to mutable. >>> >> I don't think I understand what you're showing here. How would I strip >> off the const/immutable with a template ? >> > > I was proposing a language change Sorry for any confusion. The idea is > that unless the user ask for it explicitly, there is no particular > reason to preserve const/immutable for the value portion (true value > types and the first level of references/pointers) of arguments. Ok, now I understand. -- /Jacob Carlborg |
Copyright © 1999-2021 by the D Language Foundation