String Prefix Predicate
    "Nordlöw" via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Mon Aug 18 13:50:54 PDT 2014
    
    
  
On Monday, 18 August 2014 at 12:42:25 UTC, monarch_dodra wrote:
> On Monday, 18 August 2014 at 11:28:25 UTC, Nordlöw wrote:
>> On Saturday, 16 August 2014 at 20:59:47 UTC, monarch_dodra 
>> wrote:
>>> I don't get it? If you use "byDchar", you are *explicitly* 
>>> decoding. How is that any better? If anything, you are 
>>> *preventing* the (many) opportunities phobos has to *avoid* 
>>> decoding when it can...
>>
>> byDchar and alikes are lazy ranges, ie they don't allocate.
>
> Lazy does NOT mean does not allocate. You are making a terrible 
> mistake if you assume that.
Ok, sorry about that. My mistake. And thanks for correcting me on 
this matter.
> Furthermore decoding does NOT allocate either. At worst, it can 
> throw an exception, but that's exceptional.
>
>> They also don't throw exceptions which is preferably in some 
>> cases.
>
> Even then, "startsWith(string1, string2)" will *NOT* decode. It 
> will do a binary comparison of the codeunits. A fast one at 
> that, since you'll use SIMD vector comparison. Because of this, 
> it won't throw any exceptions either. This compiles just fine:
> void main() nothrow
> {
>     bool b = "foobar".startsWith("foo");
> }
Ok, so decoding is needed only when whole and part have different 
encodings,
> In contrast, with:
> whole.byDchar().startsWith(part.byDchar())
> You *will* decode. *THAT* will be painfully slow.
Ok.
>
>> Read the details at
>> https://github.com/D-Programming-Language/phobos/pull/2043
>
> If you are using a string, the only thing helpful in there is 
> `byCodeunit`. The rest is only useful if you have actual ranges.
Actual ranges of...characters and strings? Could you gives some 
examples? I'm curious.
> If you are using phobos, you should really trust the 
> implementation that decoding will only happen on a "as needed" 
> basis.
Ok, got it.
    
    
More information about the Digitalmars-d-learn
mailing list