[review] new string type

Steven Wawryk stevenw at acres.com.au
Wed Jan 12 01:33:49 PST 2011


On 02/12/10 12:43, Ellery Newcomer wrote:
> On 12/01/2010 03:35 PM, Steven Schveighoffer wrote:
>>
>> I find that iteration over string characters using index is a very rare
>> thing anyways, you either use foreach, which should give you dchars, or
>> you use something like find, which should never give you an invalid
>> index.
>>
>> -Steve
>
> find was the counterargument I had in mind for keeping the operator
> overload, as something like
>
> s[find(s,'\u2729') .. s.codeUnits]
>
> is just a bit better than
>
> s.codePointSliceAt(find(s,'\u2729'), s.codeUnits);
>
> I really don't know.

I don't like either.  I'd prefer (from std.algorithm)

s = find(s, '\u2729');

I still don't see a need for any random-access methods, including 
slicing, on the code-point range.

The ability to convert back and forth between the string_t and T[] would 
be useful to allow the user to choose between random-access code-unit 
range and bidirectional code-point range (or grapheme/glyph/etc).  For 
example a T[] accessor property and an opAssign from a T[].

So if there are efficiencies to be had with random-access (and slicing), 
then the user could choose

s = find(s.codeUnits, '\u2729');

Are there any other reasons to slice on a code-point range?  Or have any 
capabilities beyond a bidirectional range?  Unless there are compelling 
reasons, I'd have to say that slicing and indexing on the code-point 
level is not much more than a hack.


More information about the Digitalmars-d mailing list