Can't use std.algorithm.remove on a char[]?
TheGag96 via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun May 1 16:51:54 PDT 2016
On Sunday, 1 May 2016 at 09:11:22 UTC, ag0aep6g wrote:
> It's because of auto-decoding. char[] is an array of chars, but
> it's been made a range of dchars. Calling front on a char[]
> decodes up to four chars into one dchar.
>
> Obviously you can't take the address of the dchar, because it's
> just a return value.
>
> You can't assign through front, because the number of chars
> could be different from what's currently there. The whole array
> would have to be re-arranged then, which would be unexpectedly
> costly for the user.
>
> The auto-decoding behavior was chosen to make dealing with
> char[] less bug-prone. With auto-decoding you don't have to
> worry about cutting a multibyte sequence in half (can still cut
> a grapheme cluster in half, though). However, as you see, it
> creates other headaches, and it's considered a mistake by many.
> Getting rid of it now would be a major breaking change. Could
> be worthwhile, though.
That's a shame. I'd really like to be able to remove a character
from a character array... I supplier I just have to get used to
casting to ubyte[] or maybe just using dchar[] instead. I'm
honestly surprised I haven't encountered this behavior sooner.
It's interesting - as I keep coding in D and learning about how
amazing it is to use, I always find these weird quirks here and
there to remind me that it isn't flawless... I guess it can't be
perfect, haha.
More information about the Digitalmars-d-learn
mailing list