dmd foreach loops throw exceptions on invalid UTF sequences, use replacementDchar instead

Walter Bright newshound2 at digitalmars.com
Fri Nov 5 06:15:44 UTC 2021


On 11/4/2021 9:11 PM, max haughton wrote:
> On Friday, 5 November 2021 at 04:02:44 UTC, Walter Bright wrote:
>> On 11/4/2021 7:41 PM, Mathias LANG wrote:
>>> If you want to fix it, just deprecate the special case and tell people to use 
>>> `foreach (dchar d; someString.byUTF!(dchar, No.useReplacementDchar))` and voilà.
>>> And if they don't want it to throw, it's shorter:
>>> `foreach (dchar d; someString.byUTF!dchar)` (or `byDChar`).
>>
>> People will always gravitate towards the smaller, simpler syntax. Like [] 
>> instead of std::vector<>.
> 
> I have never observed this mistake in any C++ cod,

You've never observed people write:

    int array[3];

in C++ code?

> unless you mean as a point of language design.

D (still) has a rather verbose way of doing lambdas. People constantly 
complained that D didn't have lambdas. Until the => syntax was added, and 
suddenly lambdas in D became noticed and useful.


> This decision should be guided by how current D programmers act rather than a 
> hyperreal ideal of someone encountering the language.

The only reason D's associative arrays continue to exist is because they are so 
darned syntactically convenient.

I've seen over and over and over that syntactic convenience matters a lot.


More information about the Digitalmars-d mailing list