> On May 19, 2016, at 3:07 PM, Антон Жилин via swift-evolution 
> <[email protected]> wrote:
> 
> Thanks Brent,
> 
> I managed to confuse at least two people! I've stated it in the grammar, but 
> forgot to give an example:
> 
> ===begin===
> Multiple precedence relationships can be stated for a single precedence 
> group. Example:
> ```swift
> precedencegroup A { }
> precedencegroup C { }
> precedencegroup B { precedence(> A) precedence(< C) }
> ```
> By transitivity, precedence of C becomes greater than precedence of A.
> ===end===
> 
> As you can see, your suggested syntax would not look good, because there can 
> be any number of precedence declarations.
> 
> But I agree that bulkiness of my syntax is a problem.
> I can think of two solutions:
> 
> 1. Global-scope precedence relationships. Example:
> 
> precedencegroup B : associativity(left)
> precedencerelation B > A
> precedencerelation B < C
> infix operator <$> : B
> 
> It's already included as an alternate solution.

Your argument against this in the alternatives is compelling.  We should avoid 
this one.

> 
> 2. Limit precedence relationships.
> 
> Do we really need a full-blown Directed Acyclic Graph?
> Could `above` and `between` be enough?
> 
> Example:
> 
> precedencegroup B : between(A, C)

Brainstorming some other options here based on Brent’s syntax

A list:
precedence NewGroup > ExistingGroup, < OtherExistingGroup left

Require braces for multiple precedence levels:
precedence NewGroup {
        left
        > ExistingGroup
        < OtherExistingGroup
}

I think my preference is this “lightweight” braced option when multiple 
relations are necessary, with Brent’s syntax as a shorthand for the common case.

> 
> This is one of dark places of the proposal, obviously underdiscussed.
> Are there practical situations other than `above` and `between`?
> Do we really need unlimited relationships per one precedence group?

I don’t have a concrete example, but those would not allow you to place a group 
above two unrelated groups.  I can’t think of a good reason for this 
restriction unless there are implementation considerations that make it 
necessary.

> 
> - Anton
> 
> Brent Royal-Gordon wrote:
> I like this proposal, except for the `precedencegroup` syntax, which I think 
> is a bit overwrought. Rather than this proposal's:
>       precedencegroup Multiplicative {
>               associativity(left)
>               precedence(> Additive)
>       } 
> I would prefer to see:
>       precedence Multiplicative > Additive left
> (Or possibly, if the `left` is deemed too inexplicable by itself, 
> `associativity(left)`.) I don't really think the `precedence` keyword or the 
> curly brackets bring much to the declaration, and dropping them allows us to 
> replace the awkward compound `precedencegroup` with the shorter and equally 
> explanatory `precedence`.
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to