<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">It does seem to me that there is seriously wrong - when you are literally taking a sledge-hammer to try and make standard mathematical terminology (square peg) fit into a given proposal (round hole). &nbsp;<div class=""><br class=""></div><div class="">When you are at a point where you are taking a sledgehammer to make a square peg fit into a round hole, then it might be a sign that it won’t fit. &nbsp;</div><div class=""><br class=""></div><div class="">I have less issues with “InPlace” than other proposals so far - it makes mutable operations second class citizens (instead of the other way around).</div><div class=""><br class=""></div><div class="">I still think that the having two copies of every operation on a single type - is sort of the schizophrenic version of interface design — which is leading collections down the path of being less concise of what it’s function is. &nbsp;Giving the same collection two completely identities within the same body.</div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On 2016-02-16, at 3:46:07, Xiaodi Wu via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="">On that topic, you mentioned earlier that you've asked someone involved in the decision to explain why we can't have a term-of-art InPlace exception. That would be enormously beneficial as it seems we've returned once again to: "InPlace isn't so bad"!<br class=""><br class="">It's difficult to advance alternatives clearly superior to InPlace while the objection to its use in this context originating from the Inner Sanctum of Swiftiness[TM] remains opaque.<br class=""><br class=""><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Mon, Feb 15, 2016 at 2:32 PM Dave Abrahams via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="">
on Mon Feb 15 2016, Austin Zheng &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:<br class="">
<br class="">
&gt; +1. Would rather see us retain the (IMHO) correct math-based nomenclature,<br class="">
&gt; and come up with rules for handling cases where there are 'terms of art'<br class="">
&gt; that don't fit neatly into the standard ruleset.<br class="">
<br class="">
Of course, that's what "InPlace" was supposed to do.<br class="">
<br class="">
&gt;<br class="">
&gt; Austin<br class="">
&gt;<br class="">
&gt; On Mon, Feb 15, 2016 at 11:46 AM, Xiaodi Wu via swift-evolution &lt;<br class="">
&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:<br class="">
&gt;<br class="">
&gt;&gt; It pains me that well-known math terms and even whole protocols get lopped<br class="">
&gt;&gt; off because of vagaries of the English language. New thought prompted by<br class="">
&gt;&gt; some of these suggestions:<br class="">
&gt;&gt;<br class="">
&gt;&gt; There's a fairly circumscribed number of commonly used mathematical terms<br class="">
&gt;&gt; of art. These describe for the most part functions for which there are no<br class="">
&gt;&gt; noun/verb pairs. Suppose then, we have a rule:<br class="">
&gt;&gt;<br class="">
&gt;&gt; Define these mathematical functions only outside types, as though they<br class="">
&gt;&gt; were operators. If (as it seems), operators are an acceptable option for<br class="">
&gt;&gt; Set but for the nomenclature, surely these functions can be acceptable as<br class="">
&gt;&gt; well. Then you would have:<br class="">
&gt;&gt; union(a, b) // non-mutating<br class="">
&gt;&gt; union(&amp;a, b) // mutating<br class="">
&gt;&gt;<br class="">
&gt;&gt; This is unambiguous, terse, conformant to expectations arising from<br class="">
&gt;&gt; familiarity with math, and recognizably English, and you can still have a<br class="">
&gt;&gt; SetAlgebra protocol if it can ensure these functions exist for conforming<br class="">
&gt;&gt; types as Equatable ensures ==. "Pollution" of the global scope would be<br class="">
&gt;&gt; limited to commonly used math terms, which should not be coopted for<br class="">
&gt;&gt; another purpose in any case.<br class="">
&gt;&gt;<br class="">
&gt;&gt;<br class="">
&gt;&gt;<br class="">
&gt;&gt;<br class="">
&gt;&gt;<br class="">
&gt;&gt;<br class="">
&gt;&gt;<br class="">
&gt;&gt; On Mon, Feb 15, 2016 at 1:17 PM Dave Abrahams via swift-evolution &lt;<br class="">
&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:<br class="">
&gt;&gt;<br class="">
&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; on Mon Feb 15 2016, Xiaodi Wu &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:<br class="">
&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt; Agreed that "union" creates an expectation that it's non-mutating.<br class="">
&gt;&gt;&gt; &gt;<br class="">
&gt;&gt;&gt; &gt; There's no real point in pushing back on whether UIs are more or less<br class="">
&gt;&gt;&gt; &gt; important for Swift than math.<br class="">
&gt;&gt;&gt; &gt;<br class="">
&gt;&gt;&gt; &gt; Problem is, the moment you name something SetAlgebra, you've set user<br class="">
&gt;&gt;&gt; &gt; expectations that it's a 'math API'. Those ain't UI terms.<br class="">
&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; Yep.&nbsp; As I mentioned in<br class="">
&gt;&gt;&gt; &lt;<br class="">
&gt;&gt;&gt; <a href="http://news.gmane.org/find-root.php?message_id=m2pow033r1.fsf%40eno.apple.com" rel="noreferrer" target="_blank" class="">http://news.gmane.org/find-root.php?message_id=m2pow033r1.fsf%40eno.apple.com</a><br class="">
&gt;&gt;&gt; &gt;,<br class="">
&gt;&gt;&gt; we have a semantic muddle here.&nbsp; Given where this is all headed, I am<br class="">
&gt;&gt;&gt; somewhat inclined to retire the SetAlgebra protocol (it only seems to<br class="">
&gt;&gt;&gt; have 3-4 uses on github), but renaming it could be another viable<br class="">
&gt;&gt;&gt; option.<br class="">
&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt; On Mon, Feb 15, 2016 at 11:25 AM Dave Abrahams via swift-evolution &lt;<br class="">
&gt;&gt;&gt; &gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:<br class="">
&gt;&gt;&gt; &gt;<br class="">
&gt;&gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; on Mon Feb 15 2016, Maximilian Hünenberger &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; wrote:<br class="">
&gt;&gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt; I also prefer (2). Isn't "union", "intersection", ... a "Term of<br class="">
&gt;&gt;&gt; Art"?<br class="">
&gt;&gt;&gt; &gt;&gt; &gt; See the guidelines under "Stick to the established meaning".<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt; So we should stick to the mathematical naming.<br class="">
&gt;&gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; My understanding of the rationale for the current direction is that the<br class="">
&gt;&gt;&gt; &gt;&gt; domain of building GUI apps is more important than that of math, so the<br class="">
&gt;&gt;&gt; &gt;&gt; look and feel of sets should match those of most other (non-math) APIs.<br class="">
&gt;&gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt; Since these terms almost always return a new instance we should have<br class="">
&gt;&gt;&gt; &gt;&gt; &gt; an obvious mutating version with an "inPlace" suffix.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt; - Maximilian<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; Am 14.02.2016 um 22:37 schrieb Xiaodi Wu via swift-evolution<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; From a 10,000-ft view, I'd suggest that the noun/verb rule<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; consistently runs into a problem with mathematical terms.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; In general, mathematical functions don't have verb forms. You<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; 'compute' the reciprocal, or 'find' the reciprocal, or 'take' the<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; reciprocal, you don't 'reciprocate' or 'reciprocalize'. Likewise for<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; trigonometric functions, etc. Nor can you really 'cross produce'...<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; So consistent is this trend that where two words might be noun/verb<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; counterparts, like intersect/intersection and<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; transform/transformation, common math usage treats both as<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; acceptable nouns.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; In colloquial usage, you might verb the noun, but then by definition<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; the verb and noun become the same. Then, to generate a noun<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; phrase/participle/etc. that looks different from the verb, you have<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; to noun-ify the verbed noun.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; Without an exception for mathematical function names, the only<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; solution to fulfill these new Swift rules are clobbering the<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; well-known math name or not using the math name at all. Indeed all<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; proposed solutions so far come down to one of four options, either<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; applied globally or only to sets for now, punting the rest down the<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; road:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; (1) Abandon the rule, making a new one (e.g.: .=)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; (2) Make an exception to the rule for math function names<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; (3) Generate the least offensive noun-ified verbed nouns based on<br class="">
&gt;&gt;&gt; math<br class="">
&gt;&gt;&gt; &gt;&gt; function names<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; (4) Don't use math function names<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; (1) is off the table, according to the core team. My vote at this<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; point is for (2), and I see that a few others have voiced that<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; opinion. It'd be nice to get a sense from the core team if that is<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; even a possibility. (3) has elicited a lot of discussion and<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; visceral reactions. (4) might be workable for sets alone but surely<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; can't be a generalized solution for all mathematical concepts to be<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; encountered in Swift.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; On Sun, Feb 14, 2016 at 3:14 PM Tyler Fleming Cloutier via<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; swift-evolution<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; On Feb 14, 2016, at 12:48 PM, Dave Abrahams<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &lt;<a href="mailto:dabrahams@apple.com" target="_blank" class="">dabrahams@apple.com</a>&gt; wrote:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; on Sun Feb 14 2016, Tyler Fleming Cloutier<br class="">
&gt;&gt;&gt; &lt;<a href="http://cloutiertyler-at-aol.com" class="">cloutiertyler-AT-aol.com</a>&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; wrote:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; On Feb 14, 2016, at 8:27 AM, Dave Abrahams<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:dabrahams@apple.com" target="_blank" class="">dabrahams@apple.com</a>&gt; wrote:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; on Sat Feb 13 2016, Tyler Fleming Cloutier<br class="">
&gt;&gt;&gt; &gt;&gt; &lt;<a href="http://cloutiertyler-at-aol.com" class="">cloutiertyler-AT-aol.com</a>&gt; wrote:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; I would, personally, be very careful about discarding the<br class="">
&gt;&gt;&gt; &gt;&gt; mathematical<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; terms since they are so widely used and understood.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; IMO it's better to leave them aside than to use them in<br class="">
&gt;&gt;&gt; “creative”<br class="">
&gt;&gt;&gt; &gt;&gt; ways<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; that might be misleading.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; Agreed. I’m all for that.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; One issue is that it’s going to be hard to search for the<br class="">
&gt;&gt;&gt; &gt;&gt; operation I<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; want considering I won’t be looking for "func<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; invertingMembershipOfContentsOf(other: Self) -&gt; Self”. I’m<br class="">
&gt;&gt;&gt; &gt;&gt; concerned<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; people are going to have to do mental gymnastics to build the<br class="">
&gt;&gt;&gt; map<br class="">
&gt;&gt;&gt; &gt;&gt; from<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; math term to Swift function every time they want to look for a<br class="">
&gt;&gt;&gt; set<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; operation method. “func invertingMembershipOfContentsOf(other:<br class="">
&gt;&gt;&gt; &gt;&gt; Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; -&gt; Self” doesn’t exactly seem to fit in the commonly held Venn<br class="">
&gt;&gt;&gt; &gt;&gt; diagram<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; mental model of set operations. You could always have a<br class="">
&gt;&gt;&gt; &gt;&gt; documentation<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; comment that specifies the mathematical term so that people<br class="">
&gt;&gt;&gt; didn’t<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; have to double check themselves every time.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; That being said, if the autocomplete issue is not a concern,<br class="">
&gt;&gt;&gt; I’m of<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; the opinion that the names Ricardo proposed are short, clear,<br class="">
&gt;&gt;&gt; and<br class="">
&gt;&gt;&gt; &gt;&gt; are<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; not so hard to fit to my Venn diagram mental model.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; +1<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; However, I tend to think that if there has to be this much<br class="">
&gt;&gt;&gt; dancing<br class="">
&gt;&gt;&gt; &gt;&gt; to<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; name a set of fundamental operations, the guidelines aren’t<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; accomplishing their goal.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; I can't disagree.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; It’s going to make it that much harder for people do design<br class="">
&gt;&gt;&gt; their<br class="">
&gt;&gt;&gt; &gt;&gt; own<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; APIs. I'm having quite a time trying to conform Mattt’s Surge<br class="">
&gt;&gt;&gt; API<br class="">
&gt;&gt;&gt; &gt;&gt; to<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; the guidelines.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; Please explain in detail.&nbsp; Without details we don't know what's<br class="">
&gt;&gt;&gt; &gt;&gt; wrong<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; with the guidelines.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; Ah, I apologize. I’ve gone into detail about this API on the list<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; before, but I should have included the details here.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; Here are my previous posts:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; <a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160118/007560.html" rel="noreferrer" target="_blank" class="">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160118/007560.html</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; &lt;<br class="">
&gt;&gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; <a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160118/007560.html" rel="noreferrer" target="_blank" class="">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160118/007560.html</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; Basically the issues come down to the following. The Accelerate<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; framework typical operates in a non-mutating way. This means<br class="">
&gt;&gt;&gt; that my<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; API only has non mutating member functions and I should use the<br class="">
&gt;&gt;&gt; &gt;&gt; ed/ing<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; rule according to the guidelines to name my methods.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; This is very difficult for some methods. I’m able to frequently<br class="">
&gt;&gt;&gt; get<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; around the problem for things like “sin” or “arctan” by keeping<br class="">
&gt;&gt;&gt; them<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; as global functions, but I can’t do that for a number of<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; methods. Consider:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; remainder<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; dot (returns a scalar, thus there can’t be a mutating version, so<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; should I just call it dot? Guidelines don’t really comment on<br class="">
&gt;&gt;&gt; this)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; mean (same as above)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; cross<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; reciprocal<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; threshold<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; copysign<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; fastFourierTransform<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; pow (arguably the method version should be called raisedTo)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; I could force all these to be global functions only, but these<br class="">
&gt;&gt;&gt; are<br class="">
&gt;&gt;&gt; &gt;&gt; not<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; as cut and dry as “sin” or “arctan”. I feel like I’d be<br class="">
&gt;&gt;&gt; splitting my<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; API up into two parts just based on the fact that it’s difficult<br class="">
&gt;&gt;&gt; to<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; use the ed/ing rule. That makes it very difficult for users to<br class="">
&gt;&gt;&gt; find<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; certain functions in my API.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; In this case there are no corresponding mutating operations<br class="">
&gt;&gt;&gt; because<br class="">
&gt;&gt;&gt; &gt;&gt; of<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; the way Accelerate works, but one could certainly imagine an API<br class="">
&gt;&gt;&gt; with<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; mutating counterparts. The way I read the guidelines, they seem<br class="">
&gt;&gt;&gt; to<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; imply I should use ed/ing regardless of whether there is a<br class="">
&gt;&gt;&gt; mutating<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; counterpart. I’d love to hear your thoughts on this.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; As long as the ones without side effects read as noun phrases and<br class="">
&gt;&gt;&gt; the<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; ones with side-effects read as verb phrases, you're good.&nbsp; No<br class="">
&gt;&gt;&gt; ed/ing<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; needed.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; Ah yes, you are very right. Still what would the mutating versions<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; of remainder, fastFourierTransform, or reciprocal be? getRemainder?<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; applyFastFourierTransform? reciprocate? I suppose those aren’t so<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; bad.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; I also suppose cross could become x.crossProduct(with: y) and<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; copysign, x.copyingSign(of: y). Seems a little verbose, but it does<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; the job.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; Thanks,<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; Tyler<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; Thanks,<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; Tyler<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; Tyler<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; On Feb 13, 2016, at 9:09 PM, Ricardo Parada via<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; swift-evolution<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; wrote:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Hi Dave,<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I would be okay with staying away from the mathematical terms<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; similar to what you are suggesting except that the union can<br class="">
&gt;&gt;&gt; still<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; be made more concise if you use merged / merge for the base<br class="">
&gt;&gt;&gt; name<br class="">
&gt;&gt;&gt; &gt;&gt; and<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; shorten the labels to a bare minimum without loosing<br class="">
&gt;&gt;&gt; clarity.&nbsp; In<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; addition, the merge can have a second parameter with a<br class="">
&gt;&gt;&gt; default to<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; false in order to implement the symmetric difference<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; (a.k.a. exclusive or).&nbsp; Recall that symmetric difference is<br class="">
&gt;&gt;&gt; the<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; union of two sets and then removing the intersection (or<br class="">
&gt;&gt;&gt; members<br class="">
&gt;&gt;&gt; &gt;&gt; in<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; common).&nbsp; I think it looks perfect (concise and clear).&nbsp; What<br class="">
&gt;&gt;&gt; does<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; everybody else think?<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Non-mutable<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; let union =&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a.merged(with: b)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; let intersection =&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a.members(in: b)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; let difference =&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a.removingMembers(in: b)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; let symmetricDifference =&nbsp; &nbsp; &nbsp; a.merged(with: b,<br class="">
&gt;&gt;&gt; &gt;&gt; removingMembersInCommon: true)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Mutable (In-Place)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; a.merge(with: b)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// union in-place<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; a.removeMembers(notIn: b)&nbsp; &nbsp; &nbsp; // intersect in-place<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; a.removeMembers(in: b)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// difference in-place<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; a.merge(with: b, removeMembersInCommon: true)&nbsp; // symmetric<br class="">
&gt;&gt;&gt; &gt;&gt; difference in-place<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Ricardo Parada<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; On Feb 13, 2016, at 1:16 PM, Dave Abrahams via<br class="">
&gt;&gt;&gt; swift-evolution<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;mailto:<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; wrote:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; on Fri Feb 12 2016, Ricardo Parada &lt;<br class="">
&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;mailto:<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;&gt; wrote:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Hi all,<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I can’t make up my mind.&nbsp; Let me propose two different<br class="">
&gt;&gt;&gt; &gt;&gt; alternatives<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; that I’m not sure if they have been considered:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; ALTERNATIVE 1<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Non-mutable (noun-based)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; func union(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; func union(other: Self) -&gt; Self&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Assumes union<br class="">
&gt;&gt;&gt; is a<br class="">
&gt;&gt;&gt; &gt;&gt; noun, i.e. not a verb<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; func intersect(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; func intersection(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; func subtract(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; func subtraction(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; func exclusiveOr(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; func symmetricSubtraction(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Mutable (verb-based)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; mutating func unionInPlace(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; mutating func unite(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; mutating func intersectInPlace(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; mutating func intersect(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; mutating func subtractInPlace(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; mutating func subtract(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; mutating func exclusiveOrInPlace(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; mutating func symmetricSubtract(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Comments:<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; With this alternative we keep the union name which I assume<br class="">
&gt;&gt;&gt; is<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; popular.&nbsp; However, one has to accept unite as a verb (for<br class="">
&gt;&gt;&gt; the<br class="">
&gt;&gt;&gt; &gt;&gt; mutable<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; version) as I wanted all the mutable methods use verbs for<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; consistency.&nbsp; I think unite is acceptable because it can be<br class="">
&gt;&gt;&gt; &gt;&gt; found in<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; the dictionary and it is a verb.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Notice that all the non-mutable methods use nouns: union,<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; intersection, subtraction and symmetricSubtraction.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I understand some may oppose to symmetricSubtraction saying<br class="">
&gt;&gt;&gt; that<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; symmetricSubraction is not as common as "exclusive or".<br class="">
&gt;&gt;&gt; &gt;&gt; However,<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; using symmetricSubtraction is consistent with subtraction<br class="">
&gt;&gt;&gt; and<br class="">
&gt;&gt;&gt; &gt;&gt; it hints<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; to a variation of the “subtraction" operation.&nbsp; We will get<br class="">
&gt;&gt;&gt; &gt;&gt; used to it<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; quickly / easily.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; The mutable methods all use verbs:&nbsp; unite, intersect,<br class="">
&gt;&gt;&gt; subtract<br class="">
&gt;&gt;&gt; &gt;&gt; and symmetricSubtract.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; ALTERNATIVE 2<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Non-mutable<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; func union(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; func adding(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; func intersect(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; func intersecting(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; func exclusiveOr(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; func exclusiveOring(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; func subtract(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; func removing(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Mutable<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; mutating func unionInPlace(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; mutating func add(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; mutating func intersectInPlace(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; mutating func intersect(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; mutating func exclusiveOrInPlace(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; mutating func exclusiveOr(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -&nbsp; mutating func subtractInPlace(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +&nbsp; mutating func remove(other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Comments: This alternative gives up on union in favor or<br class="">
&gt;&gt;&gt; add.<br class="">
&gt;&gt;&gt; &gt;&gt; Many<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; may not like this, that is why I have it as the second<br class="">
&gt;&gt;&gt; &gt;&gt; alternative.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; It brings back exclusiveOr and treats it as a verb.&nbsp; Some<br class="">
&gt;&gt;&gt; may<br class="">
&gt;&gt;&gt; &gt;&gt; argue<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; that exclusiveOr is a noun for the "exclusive or" operation.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; If we are going to force Set fit the naming guidelines, I<br class="">
&gt;&gt;&gt; would<br class="">
&gt;&gt;&gt; &gt;&gt; prefer<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; to stay away from the mathematical terms altogether.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; func insertingContentsOf(other: Self) -&gt; Self<br class="">
&gt;&gt;&gt;&nbsp; //<br class="">
&gt;&gt;&gt; &gt;&gt; union<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; mutating func insertContentsOf(other)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; func members(in other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt;&nbsp; // intersection<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; mutating func removeMembers(notIn: other)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; func removingMembersAndAddingNonMembers(in other: Self) -&gt;<br class="">
&gt;&gt;&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; // symmetric difference<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; mutating func removeMembersAndAddingNonMembers(in other:<br class="">
&gt;&gt;&gt; Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; func removingMembers(in other: Self) -&gt; Self<br class="">
&gt;&gt;&gt; &gt;&gt; // subtract<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; mutating func removeMembers(in other: Self)<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; If it would help with clarity, we could replace "in" with<br class="">
&gt;&gt;&gt; &gt;&gt; "foundIn"<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; above.<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; --<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -Dave<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; _______________________________________________<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; swift-evolution mailing list<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;mailto:<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a>&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; _______________________________________________<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; swift-evolution mailing list<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; --<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; -Dave<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; --<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; -Dave<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; _______________________________________________<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; swift-evolution mailing list<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; _______________________________________________<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; swift-evolution mailing list<br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt; _______________________________________________<br class="">
&gt;&gt;&gt; &gt;&gt; &gt; swift-evolution mailing list<br class="">
&gt;&gt;&gt; &gt;&gt; &gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt;&gt; &gt;&gt; &gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
&gt;&gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; --<br class="">
&gt;&gt;&gt; &gt;&gt; -Dave<br class="">
&gt;&gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt;&gt; _______________________________________________<br class="">
&gt;&gt;&gt; &gt;&gt; swift-evolution mailing list<br class="">
&gt;&gt;&gt; &gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt;&gt; &gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
&gt;&gt;&gt; &gt;&gt;<br class="">
&gt;&gt;&gt; &gt; _______________________________________________<br class="">
&gt;&gt;&gt; &gt; swift-evolution mailing list<br class="">
&gt;&gt;&gt; &gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt;&gt; &gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; --<br class="">
&gt;&gt;&gt; -Dave<br class="">
&gt;&gt;&gt;<br class="">
&gt;&gt;&gt; _______________________________________________<br class="">
&gt;&gt;&gt; swift-evolution mailing list<br class="">
&gt;&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
&gt;&gt;&gt;<br class="">
&gt;&gt;<br class="">
&gt;&gt; _______________________________________________<br class="">
&gt;&gt; swift-evolution mailing list<br class="">
&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
&gt;&gt;<br class="">
&gt;&gt;<br class="">
&gt; _______________________________________________<br class="">
&gt; swift-evolution mailing list<br class="">
&gt; <a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
<br class="">
--<br class="">
-Dave<br class="">
<br class="">
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
</blockquote></div>
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></div></body></html>