[swift-dev] Value-type bound protocols?

Ben Cohen ben_cohen at apple.com
Mon Sep 18 16:54:52 CDT 2017



> On Sep 13, 2017, at 1:06 PM, David Zarzycki via swift-dev <swift-dev at swift.org> wrote:
> 
> 
> 
>> On Sep 13, 2017, at 15:23, Matthew Johnson via swift-dev <swift-dev at swift.org> wrote:
>> 
>> 
>> 
>> Sent from my iPhone
>> 
>>> On Sep 13, 2017, at 11:56 AM, David Zarzycki via swift-dev <swift-dev at swift.org> wrote:
>>> 
>>> 
>>> 
>>>> On Sep 13, 2017, at 13:53, David Sweeris <davesweeris at mac.com> wrote:
>>>> 
>>>> 
>>>>> On Sep 13, 2017, at 09:54, David Zarzycki via swift-dev <swift-dev at swift.org> wrote:
>>>>> 
>>>>> Hello,
>>>>> 
>>>>> As a part of a research project that I’m working on, I’ve started bumping into the need for value-type bound protocols (as opposed to the existing class bound protocols). Is this something that would be worth proposing formally? Or should I just keep the patch I have on my research branch?
>>>> 
>>>> I think it'd be worth a proposal, especially if can talk about why you needed it.
>>> 
>>> While I look forward to talking about my research, I’m not ready to do in the near future.
>>> 
>>> That being said, value-type bound protocols seem independently useful and that is why I emailed the list.
>>> 
>>> I think the use case for this is generic algorithms. Why? Because it can be hard to impossible to write *robust* generic code when you don’t know whether an abstract type copies by value or by reference during assignment/initialization. With class-bound protocols, you can guarantee reference semantics, but there is no analogous feature for ensuring value semantics. I have a small (~150 line) patch that fixes this.
>> 
>> Value types and value semantics are not the same.  Most people who have asked for this capability actually want a constraint for value semantics, not value types.  Is that what you're asking for as well?
> 
> The patch that I’m ready to put forth is only a value-type bound. In other words only structs and enums would be able to conform to a value-type bound protocol. Enforcing value semantics is arguably a separable language goal.
> 

But knowing something is a value type isn’t particularly useful, given it doesn’t guarantee value semantics. It could even do more harm than good, by being confusable with enforcing value semantics. 

Can you go into the use cases you have where you would use the knowledge that a type is a value type?


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20170918/ffaf01f2/attachment.html>


More information about the swift-dev mailing list