I'll update the proposal ASAP :) Btw, wasn't sure if you wanted to be cited as 
co-author because I did not have your express approval, but I thought it was 
the right thing to do. Was in a bit in a hurry to send the Pull Request before 
going to work.

> On 02 May 2016, at 09:20, Developer <devteam.cod...@gmail.com> wrote:
> 
> Hi there, just wanted to let you know I have a name!  It's unfortunate that 
> the mailing list won't accept the update I've made (this has been the 3rd-ish 
> time I've tried).
> 
> ~Robert Widmann
> 
> 2016/05/02 3:16、David Hart <da...@hartbit.com> のメッセージ:
> 
>> Hello swift-evolution,
>> 
>> I took the pitch originally from Developer to move the where clause out of 
>> the generic parameter list, with improvements brought up by Pyry Jahkola, 
>> and wrote a proposal for it. I opened a Pull Request, but if anybody wants 
>> to bring some modifications to it before it is merged, please let me know 
>> what you think:
>> 
>> Move where clause to end of declaration
>> Proposal: SE-XXXX
>> Author(s): David Hart, Developer, Pry Jahkola
>> Status: TBD
>> Review manager: TBD
>> Introduction
>> 
>> This proposal suggests moving the where clause to the end of the declaration 
>> syntax, but before the body, for readability reasons. It has been discussed 
>> at length on the following swift-evolution thread:
>> 
>> [Pitch] Moving where Clauses Out Of Parameter Lists
>> 
>> Motivation
>> 
>> The where clause in declarations can become quite long. When that happens, 
>> it breaks the declaration syntax in two, hurting its readability. There is 
>> also no good way of formatting the declaration syntax to make it much better.
>> 
>> Proposed solution
>> 
>> The proposal suggests moving the where clause at the end of the declaration, 
>> but before the body of concerned declarations. With the proposed change, 
>> where clauses do not impede the main declaration and are also more easily 
>> formattable. For example, here is the same function declaration before and 
>> after the change: 
>> 
>> func anyCommonElements<T : SequenceType, U : SequenceType where
>>     T.Generator.Element: Equatable,
>>     T.Generator.Element == U.Generator.Element>(lhs: T, _ rhs: U) -> Bool 
>> where
>> {
>>     ...
>> }
>> 
>> func anyCommonElements<T : SequenceType, U : SequenceType>(lhs: T, _ rhs: U) 
>> -> Bool where
>>     T.Generator.Element: Equatable,
>>     T.Generator.Element == U.Generator.Element
>> {
>>     ...
>> }
>> This proposal has no impact on extension declarations with constraints 
>> because those declarations already have the where clauses right before the 
>> body. In that regard, the proposal makes the other declarations more 
>> consistent with extension declarations.
>> 
>> Detailed design
>> 
>> First of all, the grammar of generic-parameter-clause is modified to loose 
>> the requirement- clause:
>> 
>> generic-parameter-clause → < ­generic-parameter-list­­ >­
>> 
>> The grammar of declarations are then amended to gain the requirement-clause: 
>> 
>> function-declaration → function-head­ function-name­ 
>> generic-parameter-clause­opt­ function-signature requirement-clause­opt 
>> ­function-body­opt
>> 
>> union-style-enum → indirect­­opt­ ­enum ­enum-name 
>> ­generic-parameter-clause­­opt ­type-inheritance-clause­­opt­ 
>> requirement-clause­opt { ­union-style-enum-members­­opt­ }
>> 
>> raw-value-style-enum → enum ­enum-name­ generic-parameter-clause­­opt 
>> ­type-inheritance-clause requirement-clause­opt ­{ 
>> ­raw-value-style-enum-members­ *}­*
>> 
>> struct-declaration → attributes­­opt ­access-level-modifier­­opt ­struct 
>> ­struct-name ­generic-parameter-clause­­opt ­type-inheritance-clause­­opt 
>> requirement-clause­opt ­struct-body­
>> 
>> class-declaration → attributes­­opt ­access-level-modifier­opt ­final­opt 
>> ­class ­class-name ­generic-parameter-clause­opt 
>> ­type-inheritance-clause­opt requirement-clause­opt ­class-body­
>> 
>> protocol-method-declaration → function-head ­function-name 
>> ­generic-parameter-clause­­opt ­function-signature­ requirement-clause­opt
>> 
>> protocol-initializer-declaration → initializer-head 
>> ­generic-parameter-clause­­opt ­parameter-clause ­throws­­opt­ 
>> requirement-clause­opt
>> 
>> protocol-initializer-declaration → initializer-head 
>> ­generic-parameter-clause­opt ­parameter-clause­ rethrows­ 
>> requirement-clause­opt
>> 
>> initializer-declaration → initializer-head ­generic-parameter-clause­­opt 
>> ­parameter-clause ­throws­opt requirement-clause­opt ­initializer-body­
>> 
>> initializer-declaration → initializer-head ­generic-parameter-clause­opt 
>> ­parameter-clause ­rethrows requirement-clause­opt ­initializer-body­
>> 
>> Impact on existing code
>> 
>> This proposal impacts all declarations which contain where clauses expect 
>> for extension declarations and will therefore require a Fix-It. 
>> 
>> Alternatives considered
>> 
>> The first post in the swift-evolution thread originally proposed moving the 
>> where clause just after the generic type declaration. Since then, the 
>> original author and many other participants in the thread have agreed that 
>> the current proposal is superior.
>> 
>> It was also proposed to remove the simple inheritance constraints from the 
>> generic parameter list, but several arguments were brought up that it would 
>> complicate declarations of simple generics which only needed inheritance 
>> constraints.
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to