I happen to agree with Jens, though Dave Abrahams (and Crusty) might disagree 
with me. The number one consideration for choosing between a value type and a 
reference type is “do I want value semantics or reference semantics?” If I want 
to talk about a particular shape, talk about “that one”, I can only do that if 
there’s some notion of identity. So yes, if that’s part of my app, I would 
start with reference types.

Now, that doesn’t have to apply to rendering. As shown in the presentation, if 
you’re generating the shapes, there’s no need to refer to a particular shape 
afterwards…especially if the shapes are immutable. Any individual shape is just 
data to be rendered. But if I want a command like “change the color of that 
square”, then I need a way to know what “that square” refers to, and an object 
with persistent identity—a class instance—is one way to do it.

You can get a notion of “identity” in ways other than reference semantics—say, 
by generating unique IDs that go with a particular shape, and then looking them 
up later. But it’s a perfectly fine choice to make your model use reference 
semantics.

All of that said, reference semantics do have traps: mutation makes things 
harder to test in isolation, and mutation with shared state makes things not 
thread-safe. So you have to decide what trade-off you want to make in your app.

Jordan


> On Aug 1, 2016, at 19:18, Jack Lawrence via swift-users 
> <[email protected]> wrote:
> 
> Jens: Why? There are significant benefits to value semantics for this type of 
> problem, for the reasons laid out in the WWDC videos. It would be helpful to 
> know why you disagree in this case—maybe there are solutions to the issues 
> you’re thinking of.
> 
> Rick: I’d think that value semantics would be the right choice here. When you 
> do a mutation, you would copy the state of the entire diagram. It should be 
> efficient via COW, but if not you can implement you own more fine-grained COW 
> types with isUniquelyReferenced(). This would allow you to easily support 
> things like undo.
> 
> Jack
>> On Aug 1, 2016, at 4:32 PM, Jens Alfke via swift-users 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> 
>>> On Aug 1, 2016, at 1:19 AM, Rick Mann via swift-users 
>>> <[email protected] <mailto:[email protected]>> wrote:
>>> 
>>> It seems like reference semantics are more appropriate here.
>> 
>> Yes, they are. (Just because structs exist doesn’t mean you have to use them 
>> everywhere.)
>> 
>> —Jens
>> _______________________________________________
>> swift-users mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-users
> 
> _______________________________________________
> swift-users mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to