[swift-evolution] Throws, rethrows and declaration-modifiers in function declarations

Matthieu Oger moger at pixelnest.io
Tue Jul 19 12:51:30 CDT 2016


Hello,
 
I'm currently reading the updated Swift 3 preview book, and was
wondering about the `throws` and `rethrows` keywords.
 
In a function declaration, all the keywords are at the beginning, except
for `throws` and `rethrows`, which are… oddly placed.
 
In the grammar:
 
```
*function-declaration *→ *function-head[1] ­function-name[2]­ **generic-parameter-clause[3]­*opt­*function-
signature[4]­ **function-body[5]­*opt­
*function-head *→ *attributes[6]­*opt­*declaration-
modifiers[7]­*opt­func­
*function-signature *→ *parameter-clause[8]­*throws­opt­*function-
result[9]­*opt­
*function-signature *→ *parameter-clause[10]­*rethrows­*function-
result[11]­*opt­
```
Is there a reason to have throws and rethrows at this specific position,
instead of declaration-modifiers?
 
ie.:
 
This:
 
```
func send() throws -> String {}
```
 
Becomes:
 
```
throwing func send() -> String {}
rethrowing func send() -> String {}
```
 
Like:
 
```
mutating func send() -> String {}
```
 
Or:
 
```
throw func send() -> String {}
rethrow func send() -> String {}
```
 
Like: 
 
```
override func send() -> String {}
```
 
(You can also see the weird difference between `override` and
`mutating`, one using the -ing suffix, the other being infinitive)
 
Am I missing something? I find that these keywords break the flow of the
function declaration, separating the parameters and the return type,
which is never done anywhere else.
 
Thanks.
 
--
Matthieu Oger
Pixelnest Studio[12]
 

Links:

   1. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-head
   2. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-name
   3. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/GenericParametersAndArguments.html#//apple_ref/swift/grammar/generic-parameter-clause
   4. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-signature
   5. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-body
   6. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html#//apple_ref/swift/grammar/attributes
   7. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/declaration-modifiers
   8. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/parameter-clause
   9. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-result
  10. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/parameter-clause
  11. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-result
  12. http://pixelnest.io/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160719/cfc41cb9/attachment.html>


More information about the swift-evolution mailing list