[swift-evolution] Should we rename "class" when referring to protocol conformance?
Dave Abrahams
dabrahams at apple.com
Mon May 16 10:14:52 CDT 2016
on Mon May 16 2016, Matthew Johnson <matthew-AT-anandabits.com> wrote:
>> On May 15, 2016, at 1:53 PM, Dave Abrahams <dabrahams at apple.com> wrote:
>>
>>
>> on Fri May 13 2016, Matthew Johnson <matthew-AT-anandabits.com <http://matthew-at-anandabits.com/>> wrote:
>>
>>>>> If we’re going to hide the implementation details maybe it’s worth
>>>>> taking advantage of the type by making the props var and using CoW.
>>>>>
>>>>> What do you think about a proposal to enhance “indirect” for value
>>>>> types and / or instances of them. I can think of a few approaches to
>>>>> this that we could consider. I would be much more comfortable with
>>>>> what you want to do if we tackle that as well.
>>>>
>>>> It's a good idea that can help to make CoW easy to implement; I have
>>>> advocated for it (not in public) in the past.
>>>
>>> Glad to hear this. Maybe in Swift 4? (I know it's too early to say)
>>>
>>>> People should be aware
>>>> that the resulting automatic CoW will be suboptimal in many cases,
>>>> because when you discover you need new storage it's usually better to
>>>> build a new value than to copy the old one and overwrite it.
>>>
>>> How big a difference does that usually make, especially when compared
>>> to the reasons you would use indirect in the first place?
>>
>> Usually a big difference.
>>
>>> Wouldn't the compiler be able to do this in the automatic
>>> implementation in some cases
>>
>> Not in any interesting cases I know of. If you're inserting into an
>> array and you discover you need new storage because there is more than
>> one reference, starting by copying can double the cost of the insertion
>> (on a large array when memory allocation is fast).
>
> Of course this is true of data structures. I wouldn’t expect the
> compiler to provide a reasonable implementation of CoW for data
> structures.
>
> Maybe I wasn’t clear. I was talking about domain model objects like the following:
>
> struct Person {
> var firstName: String
> var lastName: String
> // …
> }
>
> I find it hard to believe the compiler CoW implementation would do
> something so suboptimal as to be significant when you write to
> firstName through an indirect instance in cases like this (which are
> pervasive in application code).
Oh, OK. And you want to CoW this because...? Reducing refcount
traffic?
>>> (such as writing to a stored var)?
>>
>> I don't know what you mean here.
>
> Continuing with the previous example, if the CoW implementation is
> significantly better when using a memberwise initializer to construct
> the new box rather than copy the value over from the old box and then
> update the property that was written to it seems like the compiler
> should be able to make that optimization in some cases. (i.e. when
> there exists a memberwise initializer which exposes all stored
> properties).
Sure.
--
-Dave
More information about the swift-evolution
mailing list