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

Jason Nielsen drjdnielsen at gmail.com
Sun Jan 17 10:36:11 CST 2016


Yes, prefix and postfix operators have highest precedence with postfix
binding first if I recall correctly.  That is why I made the proposal so
that it could be modified so that pre- and postfix operators that are
mathematically meaningful can operate as one would expect.

As for statements like -3**2 not being allowed, or hard to read, that is a
personal opinion.  It looks perfectly readable to me, just syntactic sugar
for -pow(3,2).  I do not think your opinion it is shared by the swift devs
either else why allow operator overloading in the first place?

Best regards,
Jason


On Sat, Jan 16, 2016 at 8:36 PM, 肇鑫 <owenzx at gmail.com> wrote:

> I think they are already the highest precedence. That why they need not
> to be set this property.
>
> Also, I think things like
>
> print(-3**2)
>> print(0-3**2)
>
>
> should never appear in Swift. As it is hard for human to read.
>
> zhaoxin
>
>
> On Sun, Jan 17, 2016 at 5:21 AM, Maximilian Hünenberger <
> swift-evolution at swift.org> wrote:
>
>> +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
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160117/794ecb21/attachment.html>


More information about the swift-evolution mailing list