[swift-evolution] ed/ing, InPlace, Set/SetAlgebra naming resolution

Craig Cruden ccruden at novafore.com
Sat Feb 13 12:41:31 CST 2016


Is there a reason why the same data structures are supporting both mutable and non-mutable operations?  

I would think you would have a mutable set, and a non-mutable set and they would not intersect :p

If you have a mutable set and you don’t want to affect the original - you would copy or clone it.


> On 2016-02-14, at 1:16:26, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
> on Fri Feb 12 2016, Ricardo Parada <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> 
>> Hi all,
>> 
>> I can’t make up my mind.  Let me propose two different alternatives
>> that I’m not sure if they have been considered:
>> 
>> ALTERNATIVE 1
>> 
>> Non-mutable (noun-based)
>> 
>> -  func union(other: Self) -> Self
>> +  func union(other: Self) -> Self		Assumes union is a noun, i.e. not a verb
>> 
>> -  func intersect(other: Self) -> Self
>> +  func intersection(other: Self) -> Self
>> 
>> -  func subtract(other: Self) -> Self
>> +  func subtraction(other: Self) -> Self
>> 
>> -  func exclusiveOr(other: Self) -> Self
>> +  func symmetricSubtraction(other: Self) -> Self
>> 
>> Mutable (verb-based)
>> 
>> -  mutating func unionInPlace(other: Self)
>> +  mutating func unite(other: Self)
>> 
>> -  mutating func intersectInPlace(other: Self)
>> +  mutating func intersect(other: Self)
>> 
>> -  mutating func subtractInPlace(other: Self)
>> +  mutating func subtract(other: Self)
>> 
>> -  mutating func exclusiveOrInPlace(other: Self)
>> +  mutating func symmetricSubtract(other: Self)
>> 
>> Comments: 
>> 
>> With this alternative we keep the union name which I assume is
>> popular.  However, one has to accept unite as a verb (for the mutable
>> version) as I wanted all the mutable methods use verbs for
>> consistency.  I think unite is acceptable because it can be found in
>> the dictionary and it is a verb.
>> 
>> Notice that all the non-mutable methods use nouns: union,
>> intersection, subtraction and symmetricSubtraction.
>> 
>> I understand some may oppose to symmetricSubtraction saying that
>> symmetricSubraction is not as common as "exclusive or".  However,
>> using symmetricSubtraction is consistent with subtraction and it hints
>> to a variation of the “subtraction" operation.  We will get used to it
>> quickly / easily.
>> 
>> The mutable methods all use verbs:  unite, intersect, subtract and symmetricSubtract.
>> 
>> ALTERNATIVE 2
>> 
>> Non-mutable
>> 
>> -  func union(other: Self) -> Self
>> +  func adding(other: Self) -> Self
>> 
>> -  func intersect(other: Self) -> Self
>> +  func intersecting(other: Self) -> Self
>> 
>> -  func exclusiveOr(other: Self) -> Self
>> +  func exclusiveOring(other: Self) -> Self
>> 
>> -  func subtract(other: Self) -> Self
>> +  func removing(other: Self) -> Self
>> 
>> Mutable
>> 
>> -  mutating func unionInPlace(other: Self)
>> +  mutating func add(other: Self)
>> 
>> -  mutating func intersectInPlace(other: Self)
>> +  mutating func intersect(other: Self)
>> 
>> -  mutating func exclusiveOrInPlace(other: Self)
>> +  mutating func exclusiveOr(other: Self)
>> 
>> -  mutating func subtractInPlace(other: Self)
>> +  mutating func remove(other: Self)
>> 
>> Comments: This alternative gives up on union in favor or add.  Many
>> may not like this, that is why I have it as the second alternative.
>> It brings back exclusiveOr and treats it as a verb.  Some may argue
>> that exclusiveOr is a noun for the "exclusive or" operation.
> 
> If we are going to force Set fit the naming guidelines, I would prefer
> to stay away from the mathematical terms altogether.
> 
>   func insertingContentsOf(other: Self) -> Self                 // union
>   mutating func insertContentsOf(other)
> 
>   func members(in other: Self) -> Self                           // intersection
>   mutating func removeMembers(notIn: other)
> 
>   func removingMembersAndAddingNonMembers(in other: Self) -> Self // symmetric difference
>   mutating func removeMembersAndAddingNonMembers(in other: Self)
> 
>   func removingMembers(in other: Self) -> Self                    // subtract
>   mutating func removeMembers(in other: Self)
> 
> If it would help with clarity, we could replace "in" with "foundIn"
> above.
> 
> -- 
> -Dave
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160214/f8a81d7f/attachment.html>


More information about the swift-evolution mailing list