<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">Might have a look at this thread, where value semantics is been discussed already:&nbsp;<a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160502/016286.html">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160502/016286.html</a>&nbsp;(Should we rename "class" when referring to<span class="Apple-tab-span" style="white-space: pre;">        </span>protocol conformance?)</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">I’m also proposing for a `Type` merging mechanism with the potential to replace `protocol&lt;&gt;` called `type&lt;&gt;` aka. `all&lt;&gt;` aka. `All&lt;&gt;` (and in some point the core team names a portion of it `Any&lt;&gt;` in their docs: https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md).</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">My proposal thread is here:&nbsp;<a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160502/016523.html">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160502/016523.html</a>&nbsp;([Pitch] merge types and protocols back together with type&lt;Type, Protocol, …&gt;)</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">If you want to read my detailed design, take a look at this WIP draft:&nbsp;<a href="https://github.com/DevAndArtist/swift-evolution/blob/master/proposals/nnnn-merging-types-with-protocols.md">https://github.com/DevAndArtist/swift-evolution/blob/master/proposals/nnnn-merging-types-with-protocols.md</a>&nbsp;</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">I will rewrite a few things when I find some time to match a few things from the GenericsManifesto.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">Anyways may I sum a few of my thoughts up for you:</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">- from the GenericsManifesto we “might“ see something like “Generalized `class` constraints“ in Swifts future: `typealias AnyObject = protocol&lt;class&gt;`</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">- if my proposal will be accepted and `class` is generalized already we’ll have something like this: `typealias AnyObject = All&lt;class&gt;`</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">&nbsp; &nbsp; &nbsp; &nbsp; * `All&lt;&gt;` will create a type from all constraints inside the angle brackets, this will create a new `Type` like `All&lt;UIView, SomeProtocol&gt;` where `SomeProtocol` sits on the .dynamicType rather than on `UIView`</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">&nbsp; &nbsp; &nbsp; &nbsp; * this will solve this problem <a href="https://openradar.appspot.com/20990743">https://openradar.appspot.com/20990743</a></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">&nbsp; &nbsp; &nbsp; &nbsp; * future flattened version of `All&lt;&gt;` might have operators and could be expressed like this: `func foo(value: UIView &amp; SomeProtocol)`</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">- there are two future directions in my proposal:&nbsp;</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">&nbsp; &nbsp; &nbsp; &nbsp;(1) `Any&lt;&gt;` which takes only one type from the angle brackets: `Any&lt;String, Int&gt;` or `String | Int`</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">&nbsp; &nbsp; &nbsp; &nbsp;(2) if we already have a generalized `class` keyword, so why we don’t get `struct` and `enum` as well?</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">With this we can create a typealias for `AnyValue` like this (at least for generalized extendable types):&nbsp;</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">&nbsp; &nbsp; &nbsp; &nbsp;`typealias AnyStruct = All&lt;struct&gt;`</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">&nbsp; &nbsp; &nbsp; &nbsp;`typealias AnyEnum = All&lt;enum&gt;`</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">&nbsp; &nbsp; &nbsp; &nbsp;`typealias AnyValue = Any&lt;All&lt;struct&gt;, All&lt;enum&gt;&gt;`</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">&nbsp; &nbsp; &nbsp; &nbsp;`typealias AnyValue = AnyStruct | AnyEnum`</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">The future might also see: &nbsp;`typealias AnyValue = Any&lt;All&lt;struct&gt;, All&lt;enum&gt;, All&lt;tuple&gt;&gt;`</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">But again I have to rewrite a lot of things in my proposal towards this direction. ;)</div> <br> <div id="bloop_sign_1463295209350265856" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 15. Mai 2016 bei 05:20:29, Karl via swift-evolution (<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>I was building a collection object recently, which stores an array of tuples: (Range&lt;I&gt;, T) - some generic type, and a range. <br>Part of the workings of the collection involves splitting these tuples, which means we need to split the Range (easy enough) and duplicate T.<br><br>In practice, I was using value types for T (it was another Array), so I could duplicate by assignment; but what if somebody stuck an NSArray or other reference-type in instead?<br><br>My first thought was - I could allow it, create some “Copyable” protocol and require conformance. But there are other guarantees I get from value types as well. Let’s say I had a sorted Array of T; if T could be a reference-type, anybody who gets a T from the collection could mutate it and invalidate the sort order at any time! That could lead to unexpected behaviour, such as infinite loops in binary-search algorithms, and it might not be obvious to a user of the collection how that happened (or that it’s even their fault - how are they supposed to know this is kept in a sorted Array, especially if it’s wrapped by another type, and that this particular search algorithm could infinitely loop if the Array is not sorted?). I could return a copy from the getter, but at this point I’m basically re-inventing value-type semantics for classes while creating burdensome requirements for actual value-types.<br><br>Actually, this is a problem with the language in general. While we have a way to specify that a generic type or protocol must obey reference-type semantics (via “&lt;T where T:AnyObject&gt;”, “protocol MyProtocol : class”), we don’t have a value-type semantic counterpart.<br><br>So I’d like to see us provide an “AnyValue” and “value” equivalent. We should be able to require that generic types or protocols are satisfied by values so we know how to treat them.<br>_______________________________________________<br>swift-evolution mailing list<br>swift-evolution@swift.org<br>https://lists.swift.org/mailman/listinfo/swift-evolution<br></div></div></span></blockquote></body></html>