Notice/Warning on narrowStrings .length

bearophile bearophileHUGS at lycos.com
Mon Apr 23 16:52:39 PDT 2012


James Miller:

> I realised that when you want the number of characters, you 
> normally actually want to use walkLength, not length.

As with strlen() in C, unfortunately the result of 
walkLength(somestring) is computed every time you call it... 
because it's doesn't get cached.
A partial improvement for this situation is to assure 
walkLength(somestring) to be strongly pure, and to assure the D 
compiler is able to move this invariant pure computation out of 
loops.


> Is is reasonable for the compiler to pick this up during 
> semantic analysis and point out this situation?

This is not easy to do, because sometimes you want to know the 
number of code points, and sometimes of code units.
I remember even a proposal to rename the "length" field to 
another name for narrow strings, to avoid such bugs.

-----------------------

Adam D. Ruppe:

> Maybe... but it is important that this works:
>
> string s;
>
> if(s.length)
>    do_something(s);
>
> since that's always right and quite common.

Better:

if (!s.empty)
     do_something(s);

(or even better, built-in non-ulls, usable for strings too).

Bye,
bearophile


More information about the Digitalmars-d mailing list