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-clauseopt function-signature requirement-clauseopt 
> function-bodyopt
> 
> union-style-enum → indirectopt enum enum-name  generic-parameter-clauseopt 
> type-inheritance-clauseopt requirement-clauseopt { 
> union-style-enum-membersopt }
> 
> raw-value-style-enum → enum enum-name generic-parameter-clauseopt 
> type-inheritance-clause requirement-clauseopt { raw-value-style-enum-members 
> *}*
> 
> struct-declaration → attributesopt access-level-modifieropt struct 
> struct-name generic-parameter-clauseopt type-inheritance-clauseopt 
> requirement-clauseopt struct-body
> 
> class-declaration → attributesopt access-level-modifieropt finalopt class 
> class-name generic-parameter-clauseopt type-inheritance-clauseopt 
> requirement-clauseopt class-body
> 
> protocol-method-declaration → function-head function-name 
> generic-parameter-clauseopt function-signature requirement-clauseopt
> 
> protocol-initializer-declaration → initializer-head 
> generic-parameter-clauseopt parameter-clause throwsopt requirement-clauseopt
> 
> protocol-initializer-declaration → initializer-head 
> generic-parameter-clauseopt parameter-clause rethrows requirement-clauseopt
> 
> initializer-declaration → initializer-head generic-parameter-clauseopt 
> parameter-clause throwsopt requirement-clauseopt initializer-body
> 
> initializer-declaration → initializer-head generic-parameter-clauseopt 
> parameter-clause rethrows requirement-clauseopt 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