[swift-evolution] Should we rename "class" when referring to protocol conformance?

Dave Abrahams dabrahams at apple.com
Sat May 7 16:07:34 CDT 2016


on Sat May 07 2016, Tyler Fleming Cloutier <cloutiertyler-AT-aol.com> wrote:

>     No, I'm sorry; this “deep-vs-shallow” thing is a fallacy that comes from
>     not understanding the boundaries of your value. Or, put more
>     solicitously: sure, you can look at the world that way, but it just
>     makes everything prohibitively complicated, so why would you want to?
>
>     In my world, there's no such thing as a “deep copy” or a “shallow copy;”
>     there's just “copy,” which logically creates an independent version of
>     everything up to the boundaries of the value. Likewise, there's no
>     “deep value semantics” or “shallow value semantics.” Equality defines
>     value semantics, and the boundaries of an Array value always includes
>     the values of its elements. The *only* problem here is that we have no
>     way to do equality comparison on some arrays because some types aren't
>     Equatable. IMO the costs of not having everything be equatable, in
>     complexity-of-programming-model terms, are too high.
>
> My point with this is, in case I was a bit rambling, if you’re going to draw
> boundaries around a value, for the purpose of copying or immutability, then
> equality should always match with those boundaries. 

Quite.

> As you say, “Equality defines value semantics, and the boundaries of
> an Array value always includes the values of its elements.”
>
> Under this reasoning, custom equality violates these boundaries. 

No, it defines those boundaries.

> And without custom equality, equality checks on reference types are
> essentially useless. 

No, comparing reference identity is completely useful.  That's why “===”
exists.  We just spelled it wrong :-)



-- 
-Dave


More information about the swift-evolution mailing list