[swift-evolution] [Discussion] Breaking precedence

Ross O'Brien narrativium+swift at gmail.com
Tue Aug 2 04:41:12 CDT 2016


Assignment has the lowest precedence. 'x = condition ? y : z' doesn't make
sense if assignment is resolved before the ternary; the compiler would
complain that perhaps you meant '==' instead of '='.

There was an idea ages ago for essentially a 'switch expression' which was
effectively ternary for cases; if we ever make that a reality, it should
probably have the same precedence as ternary. But otherwise it's probably
going to continue to be a group of one.

On Tue, Aug 2, 2016 at 10:29 AM, Anton Zhilin via swift-evolution <
swift-evolution at swift.org> wrote:

> 2016-08-02 7:18 GMT+03:00 FĂ©lix Cloutier <swift-evolution at swift.org>:
>
>> I disagree. The binary operators have properties that are comparable to
>> arithmetic operators, and their precedence is easy to define as such. & has
>> multiplication-like properties (0*0=0, 0*1=0, 1*0=0, 1*1=1); | has
>> addition-like properties (0+0=0, 0+1=1, 1+0=1, 1+1=2); ^ has
>> subtraction-like properties (0-0=0, 0-1=-1, 1-0=1, 1-1=0), and their
>> precedences are set accordingly (& is multiplicative, | and ^ are additive).
>>
>> The same applies to && and ||. Bit shifts are exponentiative.
>>
>
> I believe that such way of thinking is non-intuitive. In C, bitwise
> operators are not intervened by any others, except for comparison operators
> (agreed, it was a mistake). We now have possibilities to do so in Swift,
> even better. I suggest to branch off right before AdditionPrecedence:
>
> RangeFormation < Addition < Multiplication
> RangeFormation < BitwiseOr < BitwiseAnd < LogicalShift
>
> Another concern is NilCoalescing, which can be though to be semantically
> similar to Ternary. And at the same time it looks like || and &&, which
> would bring it between LogicalConjunction and Comparison.
> Also, do Casting and RangeFormation stand where they should?
>
> Next, Ternary operator is unique. Noone would ever like to put operators
> in this precedence group, because it would be confusing. Why not simplify
> our model and say that ?: has lower precedence than all binary operators,
> including Assignment? Unary > binary > ternary, sounds good?
>
> _______________________________________________
> 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/20160802/d8023c74/attachment.html>


More information about the swift-evolution mailing list