why $ is need to access array [negative index]?

claptrap clap at trap.com
Sun Sep 20 14:01:58 UTC 2020


On Friday, 18 September 2020 at 21:31:53 UTC, IGotD- wrote:
> On Friday, 18 September 2020 at 20:46:00 UTC, mw wrote:
>>
>> Currently we have range check on every single indexing 
>> operation already; so the trade-off here is: adding one more 
>> check v.s. the convenience it buys.
>>
>
> We want as few range checks as possible because indexing arrays 
> are not too seldom done it loops. Adding an extra check could 
> affect performance in this case.

You dont need an extra check, you just do an unsigned comparison, 
negative values will interpreted as larger. IE...

int idx = length-i;
assert(cast(unsigned) idx < length)

catches anything outside the valid range.

Yes you have the issue that the index could wrap around and end 
up valid, but you already have that anyway. I mean if (idx-1) is 
going to cause a problem so will (idx+0xFFFFFFFF)




More information about the Digitalmars-d mailing list