Final by default?

Walter Bright newshound2 at digitalmars.com
Fri Mar 14 11:22:12 PDT 2014


On 3/14/2014 3:06 AM, Don wrote:
> Our entire codebase assumes that stomping will happen. Simplest example:
>
> T[] dupArray(T)(ref T[] dest, T[] src)
> {
>      dest.length = src.length;
>      if (src.length) {
>          dest[] = src[];
>      }
>      return dest;
> }
>
> This is equivalent to dest = src.dup, but if dest was already long enough to
> contain src, no allocation occurs.
>
> Sure, we can add a call to "assumeSafeAppend()" everywhere. And I mean
> *everywhere*. Every single instance of array creation or concatentation, without
> exception. Almost every array in our codebase is affected by this.

I see. I'd start by replacing T[] with:

    alias T[] Q;

and then using Q instead of T[]. Once that is done, you can experiment with 
different implementations of Q. In my own D code, I've found this to be very 
effective. It's great to be able to swap in/out utterly different 
implementations of Q and measure performance.


More information about the Digitalmars-d mailing list