Creeping Bloat in Phobos

Peter Alexander via Digitalmars-d digitalmars-d at puremagic.com
Sun Sep 28 03:17:56 PDT 2014


On Sunday, 28 September 2014 at 00:13:59 UTC, Andrei Alexandrescu 
wrote:
> On 9/27/14, 3:40 PM, H. S. Teoh via Digitalmars-d wrote:
>> If we can get Andrei on board, I'm all for killing off 
>> autodecoding.
>
> That's rather vague; it's unclear what would replace it. -- 
> Andrei

No autodecoding ;-)

Specifically:

1. ref T front(T[] r) always returns r[0]
2. popFront(ref T[] r) always does { ++r.ptr; --r.length; }
3. Narrow string will be hasLength, hasSlicing, 
isRandomAccessRange (i.e. they are just like any other array).

Also:

4. Disallow implicit conversions, comparisons, or any operation 
among char, wchar, dchar. This makes things like "foo".find('π') 
compile time errors (or better, errors until we specialize to it 
to do "foo".find("π"), as it should)
5. Provide byCodePoint for narrow strings (although I suspect 
this will be rarely used).

The argument is as follows:
* First, this is a hell of a lot simpler for the implementation.
* People rarely ever search for single, non-ASCII characters in 
strings, and #4 makes it an error if they do (until we specialize 
to make it work).
* Searching, comparison, joining, and splitting functions will be 
fast and correct by default.

One possible counter argument is that this makes it easier to 
corrupt strings (since you could, e.g. insert a substring into 
the middle of a multi-byte code point). To that I say that it's 
unlikely. When inserting into a string, you're either doing it at 
the front or back (which is safe), or to some point that you've 
found by some other means (e.g. using find). I can't imagine a 
scenario where you could find a point in the middle of a string, 
that is in the middle of a code point.

Of course, I'd probably say this change isn't practical right 
now, but this is how I'd do things if I were to start over.


More information about the Digitalmars-d mailing list