Who wore it better?

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 15 14:04:39 PDT 2016


On 04/15/2016 04:47 PM, Marco Leise wrote:
> Am Fri, 15 Apr 2016 14:48:26 -0400
> schrieb Andrei Alexandrescu <SeeWebsiteForEmail at erdani.org>:
>
>> On 4/15/16 2:46 PM, Steven Schveighoffer wrote:
>>> On 4/15/16 1:24 PM, Andrei Alexandrescu wrote:
>>>> auto overlap(T, U)(T[] r1, U[] r2) @trusted pure nothrow
>>>> if (is(typeof(r1.ptr < r2.ptr) == bool))
>>>> {
>>>>       import std.algorithm : min, max;
>>>>       auto b = max(r1.ptr, r2.ptr);
>>>>       auto e = min(r1.ptr + r1.length, r2.ptr + r2.length);
>>>>       return b < e ? b[0 .. e - b] : null;
>>>> }
>>>>
>>>> Who wore it better?
>>>
>>> inout(T)[] overlap(T)(inout(T)[] r1, inout(T)[] r2) @trusted pure nothrow
>>> {
>>>       import std.algorithm: min, max;
>>>       auto b = max(r1.ptr, r2.ptr);
>>>       auto e = min(r1.ptr + r1.length, r2.ptr + r2.length);
>>>       return b < e ? b[0 .. e - b] : null;
>>> }
>>
>> Is that better or worse than the one without inout? -- Andrei
>
> I tend to write functions in the latter style, to avoid
> unneeded template instantiations. In this case it also
> documents the intent better. Both arrays are of the same type
> T and we wont modify the contents.

Thanks, this is a good point that needs keeping in mind.

> Even if the compiler can remove binary identical instances
> after the fact, the compile time and memory use increases.
> It also has implications on debugging. After duplicate
> removal, you cannot map a function address to a unique symbol
> name any more.

This is perhaps weaker.


Andrei



More information about the Digitalmars-d mailing list