[swift-evolution] Proposal: Adding precedence option for prefix and postfix operators

Maximilian Hünenberger m.huenenberger at me.com
Sat Jan 16 15:21:19 CST 2016


+1 for me and as far as values go:

prefix -
precedence 150, same as infix * since it is essentially (-1)*

prefix +
same as prefix -


To break the least amount of code:

prefix !
precedence 140, which is higher than any other Bool operator (== is highest with 130)

prefix ~
precedence 170, which is higher than any other binary operator (<< is highest with 160)

> Am 16.01.2016 um 16:30 schrieb Jason Nielsen via swift-evolution <swift-evolution at swift.org>:
> 
> Hi all,
> 
> My proposal is to add a precedence option for prefix and postfix operators.  It is great that swift allows for associativity and precedence for binary operators but it hasn't quite gone all the way to make operator overloading fully functional (just an opinion).  To illustrate consider the following code:
> 
> import CoreFoundation
> 
> infix operator ** { associativity right precedence 200 }
> 
> func ** (base: Double, power: Double) -> Double {
>     return pow(base, power)
> }
> 
> print(-3**2)
> print(0-3**2)
> 
> which prints 9 and -9.  In the first case because unary minus has higher precedence as a prefix operator it evaluates to (-3)*(-3) and the second because - is viewed as a binary operator of lower precedence as (0-(3*3).  Exponentiation has higher precedence than subtraction so -3**2 should be -9 and the two expressions above are mathematically equivalent.  I originally reported this as a bug (SR-552) as to me the point of operator overloading is to allow you to write numerical expressions cleanly but should give you the correct mathematical result.  The only really useful application I can think of for operator overloading is basically as a DSL for numerical expressions.  If it doesn't allow you to get correct results without having to put brackets everywhere it sort of defeats the purpose (just my opinion of course).
> 
> Best regards,
> Jason
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution


More information about the swift-evolution mailing list