Array bound checks removal increasing importance

Rikki Cattermole via Digitalmars-d digitalmars-d at puremagic.com
Sat May 31 04:07:20 PDT 2014


On 31/05/2014 10:56 p.m., bearophile wrote:
> My opinions about D array bound checks are slowly changing. I still
> think "-boundscheck=off" is useful and good to have. But now I am giving
> increasing importance to compiler logic that optimizes away bound checks
> safely. People more and more want a safe system language, more and more
> persons don't disable array bound tests. This means that optimizing away
> bound checks is becoming more and more important in D. And D can't
> ignore this need any more. Even adding logic to remove 20% of the bound
> checks in numeric code is going to help D because I think more and more
> people will not disable bound checks in D.
>
>
> The following notes are derived from a post by Chris in D.learn:
> http://forum.dlang.org/thread/kwkccgdymkpbpyzolumy@forum.dlang.org
>
>
> Is it possible to optimize away all array bound checks in code like this?
>
> void main() {
>      int[5] data;
>      foreach (const i; 0 .. 10)
>          data[i] = 0;
>      foreach (immutable i; 0 .. 10)
>          data[i] = 0;
>      int[10] big;
>      foreach (const i, x; big)
>          data[i] = x;
> }
>
>
> But the compiler must recognize this as correct code:
>
>
> void main() {
>      int[5] data;
>      foreach (const i; 0 .. 10)
>          if (i < 5)
>              data[i] = 0;
> }
>
>
> Can this logic be added to D?
>
>
> More info on the topic:
> http://en.wikipedia.org/wiki/Bounds-checking_elimination
> http://ssw.jku.at/Research/Papers/Wuerthinger07/Wuerthinger07.pdf
>
> Bye,
> bearophile

The first two foreach statements assignment statements should be compile 
errors.
I'm actually a little bit surprised that we don't already test for this.
But I spose that would actually be quite hard.
Perhaps if the foreach statement value is ctfe'able we can compare it 
upon assignment as a value.

Hmm I wonder if there is any more CTFE'able tricks we can do in the 
compiler.. to improve error checking.


More information about the Digitalmars-d mailing list