Ruling out arbitrary cost copy construction?
Michel Fortin
michel.fortin at michelf.com
Wed Oct 6 16:13:59 PDT 2010
On 2010-10-06 19:03:45 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> said:
> On 10/6/10 16:38 CDT, Michel Fortin wrote:
>> On 2010-10-06 16:14:58 -0400, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> said:
>>
>>> On 10/6/10 13:59 CDT, Michel Fortin wrote:
>>>> Could algorithms use "move" when possible (when "front" returns a ref)
>>>> and do a copy when move isn't available? That'd be a good compromise I
>>>> think.
>>>>
>>>> T tmp = moveOrCopy(r1.front);
>>>> r1.front = moveOrCopy(r2.front);
>>>> r2.front = moveOrCopy(tmp);
>>>
>>> Then problem is, people sort ranges of their own objects and are
>>> amazed at the unbearable performance.
>>
>> I'll repeat myself in clearer terms:
>>
>> I agree with you that copy-constructor should be of linear complexity.
>
> But I'm asking for constant complexity. We can only simplify if copy
> construction has no impact on overall complexity.
Sorry, I was just confused and said linear when I meant constant.
>> I agree that you should use a copy when you can't do a move (when front
>> doesn't return a ref).
>
> But that makes it impossible for an algorithm to guarantee good complexities.
Given my "by linear I meant constant" correction above, that should be
the same as you're proposing?
>> I disagree that you should use a copy even when you can do a move (when
>> front *does* return a ref).
>
> Alright.
>
>> Therefore, I suggest that you use "move" when you can (when front
>> returns a ref) and fallback to a copy otherwise (when front doesn't
>> return a ref). Hence "moveOrCopy", which moves when it can move and
>> copies when it cannot move.
>>
>> How can this result in poorer performances than to always copy? It can
>> only increase performance because you're copying less. (I understand
>> that it was probably just a misunderstanding of my suggestion.)
>
> It doesn't lead to poorer performance than copying. The only issue is
> that now you need to carry cost of copy everywhere as a possible
> term/factor. Also, many algorithms would approach things differently if
> the copy were O(n). This complicates, not simplifies, things.
Does this still apply given my correction above?
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d
mailing list