[swift-evolution] Symmetrical operators

David Sweeris davesweeris at mac.com
Sun Nov 13 13:49:21 CST 2016


> On Nov 13, 2016, at 1:38 PM, Андрей Володин via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Hi, list!
> 
> I’m thinking about proposal that would add a possibility to save some time on creating symmetrical binary operators.
> 
> The latest code example from my math lib:
> 
>     @inline(__always)
>     public static func *(lhs: Angle, rhs: Float) -> Angle {
>         return Angle(lhs.degrees * rhs)
>     }
>     
>     @inline(__always)
>     public static func *(lhs: Float, rhs: Angle) -> Angle {
>         return Angle(rhs.degrees * lhs)
>     }
> 
> The API of Angle doesn’t really matter here, what’s important is that I have to write another operator to make it symmetrical. Not so hard: 3 lines of code. It can even refer to original implementation, instead of duplicating the logic. But I think it would be nice to have something like symmetrical keyword, just like we have associativity and precedence. 
> 
> I also bet that all operators should be asymmetrical by default.
> 
> Any thoughts?

I fully support adding a “@commutative” attribute or something to let the compiler know that a function can be called with its arguments out of order, but I’m thoroughly against turning it on by default. Some operations, such as matrix multiplication, aren’t even defined if you swap the arguments.

- Dave Sweeris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161113/c2bd0da3/attachment.html>


More information about the swift-evolution mailing list