[review] new string type

Steven Schveighoffer schveiguy at yahoo.com
Thu Jan 13 07:55:54 PST 2011


On Wed, 12 Jan 2011 04:49:26 -0500, Steven Wawryk <stevenw at acres.com.au>  
wrote:

>
> I like the direction you're taking but have some quibbles about details.  
>   Specifically, I'd go for a more complete separation into random-access  
> code-unit ranges and bidirectional code-point ranges:

Thanks for taking the time.  I will respond to your points, but please  
make your rebuttals to the new thread I'm about to create with an updated  
string type.

> Is there a reason not to include is(Unqual!T == dchar)?

It's defined at the bottom as a simple alias to T[], since you do not need  
these features for a dchar[] string (it's correct to treat a dchar string  
as an array).

>
> An opAssign from a T[] could facilitate conversion back and forth  
> between code-point and code-unit ranges.

Yes, that would be a good feature.

> There is the alternative of deferring decoding to the user and returning  
> T[]'s holding exactly 1 code-point instead of dchars.  I'm not sure  
> which is best, but I'd be interested in seeing a case for choosing one  
> or the other.

Definitely returning decoding and returning dchar is best.  The whole  
point of this string type is to handle the decoding for you.  If you want  
to do decoding manually, you can just stick with arrays.

>
> I don't see a need for _charStart, opIndex, opSlice and codeUnits.  If  
> the underlying T[] can be returned by a property, then these can be done  
> through the code-unit array, which is random-access.

But that puts extra pain on the user for not much reason.  Currently,  
strings slice in one operation, you are proposing that we slice in three  
operations:

1. get the underlying array
2. slice it
3. reconstruct a string based on the slice.

Plus, if you remove opIndex, you are restricting the usefulness of the  
range.  Note that this string type already will decode dchars out of the  
front and back, why not just give that ability to the middle of the string?

>> template string_t(T) if (is(Unqual!T == dchar))
>> {
>> alias T[] string_t;
>> }

Note the definition of string_t!dchar here ^^^^

-Steve


More information about the Digitalmars-d mailing list