Final by default?
Don
x at nospam.com
Fri Mar 14 03:06:41 PDT 2014
On Thursday, 13 March 2014 at 19:28:59 UTC, Walter Bright wrote:
> On 3/13/2014 1:43 AM, Don wrote:
>> The worst breaking change in D2, by far, is the prevention of
>> array stomping.
>>
>> After that change, our code still runs, and produces exactly
>> the same results,
>> but it is so slow that it's completely unusable. This one of
>> the main reasons
>> we're still using D1.
>
> I didn't know this. I'd like more details - perhaps I can help
> with how to deal with it.
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.
More information about the Digitalmars-d
mailing list