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