[swift-evolution] [Review] SE-0077: Improved operator declarations

Антон Жилин antonyzhilin at gmail.com
Fri May 20 16:56:46 CDT 2016


My working version is still the one in the proposal, but I'm planning to
add the alternative versions we discussed, including your and Brent's
variants.

IMHO, original version is heavy, but clear (not to confuse with "clean").
Your lighter version looks more clean, but somewhat less consistent and
more free in terms of grammar.

Also, I've got another version, which is considerably ligher than current
one, while being as structured:

precedence Multiplicative {
    associativity(left)
    above(Additive)
    below(Exponentiative)
}

- Anton

2016-05-21 0:25 GMT+03:00 Matthew Johnson <matthew at anandabits.com>:

>
> On May 20, 2016, at 4:22 PM, Антон Жилин <antonyzhilin at gmail.com> wrote:
>
> Yes, in this case it should be allowed, because this relationship already
> existed in imported modules. I will add that, too, thanks!
>
>
> Cool.
>
> What is the latest syntax you are using?  Did you consider any of the
> lighter weight options?  That subthread died without conclusion (unless I
> missed something somehow).
>
>
>
> - Anton
>
> 2016-05-21 0:01 GMT+03:00 Matthew Johnson <matthew at anandabits.com>:
>
>>
>> On May 20, 2016, at 3:51 PM, John McCall <rjmccall at apple.com> wrote:
>>
>> On May 20, 2016, at 1:25 PM, Антон Жилин <antonyzhilin at gmail.com> wrote:
>> Inline:
>>
>> 2016-05-20 20:58 GMT+03:00 John McCall <rjmccall at apple.com>:
>>
>>> The transitivity rule plus the ability to define precedence
>>> relationships in both directions on a new precedence group allows a new
>>> precedence group to create a precedence relationship between existing
>>> unrelated precedence groups.  This should be forbidden.
>>>
>>
>> Agreed, although there is an alternate solution to allow global-scope
>> relationship definition.
>> Trying to write it formally:
>>
>> ====begin====
>> Precedence relationships that, by transitivity rule, create relationship
>> between two imported groups, is an error. Example:
>>
>> // Module X
>> precedencegroup A { }
>> precedencegroup C { }
>>
>> // Module Y
>> import X
>> precedencegroup B { precedence(> A) precedence(< C) }
>>
>> This results in compilation error "B uses transitivity to define
>> relationship between imported groups A and C".
>> The rationale behind this is that otherwise one can create relationships
>> between standard precedence groups that are confusing for the reader.
>>
>> ====end====
>>
>>
>> Seems good to me.
>>
>>
>> Would this be allowed if Module X already defined precedence group C > A
>> (it would not be defining a *new* relationship between A and C in that
>> case)?
>>
>>
>> What's the purpose of equality relationships between precedence groups?
>>>
>>
>> Agreed, will remove.
>>
>>
>> Ok.
>>
>>
>> Your proposal should call out the special treatment of the Assignment and
>>> Ternary groups.
>>>
>>
>> Do you mean that most operators should define greater precedence than
>> Assignment / Ternary? Or there should be some other special treatment?
>>
>>
>> Just that they have implicit members.
>>
>> John.
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160521/f62826dc/attachment.html>


More information about the swift-evolution mailing list