char array weirdness

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Mar 29 17:05:29 PDT 2016


On 3/29/16 7:42 PM, H. S. Teoh via Digitalmars-d-learn wrote:
> On Tue, Mar 29, 2016 at 11:15:26PM +0000, Basile B. via Digitalmars-d-learn wrote:
>> On Monday, 28 March 2016 at 22:34:31 UTC, Jack Stouffer wrote:
>>> void main () {
>>>     import std.range.primitives;
>>>     char[] val = ['1', '0', 'h', '3', '6', 'm', '2', '8', 's'];
>>>     pragma(msg, ElementEncodingType!(typeof(val)));
>>>     pragma(msg, typeof(val.front));
>>> }
>>>
>>> prints
>>>
>>>     char
>>>     dchar
>>>
>>> Why?
>>
>> I've seen you so many time as a reviewer on dlang that I belive this Q
>> is a joke.
>> Even if obviously nobody can know everything...
>>
>> https://www.youtube.com/watch?v=l97MxTx0nzs
>>
>> seriously you didn't know that auto decoding is on and that it gives
>> you a dchar...
>
> Believe it or not, it was only last year (IIRC, maybe the year before)
> that Walter "discovered" that Phobos does autodecoding, and got pretty
> upset over it.  If even Walter wasn't aware of this for that long...

Phobos treats narrow strings (wchar[], char[]) as ranges of dchar. It 
was discovered that auto decoding strings isn't always the smartest 
thing to do, especially for performance.

So you get things like this: 
https://github.com/D-Programming-Language/phobos/blob/master/std/algorithm/searching.d#L1622

That's right. Phobos insists that auto decoding must happen for narrow 
strings. Except that's not the best thing to do so it inserts lots of 
exceptions -- for narrow strings.

Mind blown?

-Steve


More information about the Digitalmars-d-learn mailing list