The Case Against Autodecode
Andrew Godfrey via Digitalmars-d
digitalmars-d at puremagic.com
Sat May 28 15:29:12 PDT 2016
On Saturday, 28 May 2016 at 19:04:14 UTC, Walter Bright wrote:
> On 5/28/2016 5:04 AM, Andrei Alexandrescu wrote:
>> So it harkens back to the original mistake: strings should NOT
>> be arrays with
>> the respective primitives.
>
> An array of code units provides consistency, predictability,
> flexibility, and performance. It's a solid base upon which the
> programmer can build what he needs as required.
>
> A string class does not do that (from the article: "I admit the
> correct answer is not always clear").
You're right. An "array of code units" is a very useful low-level
primitive. I've dealt with a lot of code that uses these (more or
less correctly) in various languages.
But when providing such a thing, I think it's very important to
make it *look* like a low-level primitive, and use the type
system to distinguish it from higher-level ones.
E.g. A string literal should not implicitly convert into an array
of code units. What should it implicitly convert to? I'm not
sure. Something close to how it looks in the source code,
probably. A sequential range of graphemes? From all the detail in
this thread, I wonder now if "a grapheme" is even an unambiguous
concept across different environments. But one thing I'm sure of
(and this is from other languages/API's, not from D
specifically): A function which converts from one representation
to another, but doesn't keep track of the change (e.g. Different
compile-time type; e.g. State in a "string" class about whether
it is in normalized form), is a "bug farm".
More information about the Digitalmars-d
mailing list